[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCHv2 2/9] getcwd-lgpl: new module
From: |
Bruno Haible |
Subject: |
Re: [PATCHv2 2/9] getcwd-lgpl: new module |
Date: |
Wed, 27 Apr 2011 02:54:37 +0200 |
User-agent: |
KMail/1.9.9 |
Hi Eric,
Now the code is clear enough that it can be understood :-) I have three remarks:
> +AC_DEFUN([gl_FUNC_GETCWD_LGPL],
> +[
> + AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
> + AC_REQUIRE([gl_FUNC_GETCWD_NULL])
> +
> + case $gl_cv_func_getcwd_null in
> + *yes) ;;
> + *)
> + dnl Minimal replacement
> + REPLACE_GETCWD=1
> + AC_LIBOBJ([getcwd-lgpl])
> + esac
There is a missing ;; here, before the 'esac'.
> + ptr = realloc (buf, size);
> + if (ptr == NULL)
> + {
> + free (buf);
> + errno = ENOMEM;
> + return NULL;
> + }
> + result = getcwd (buf, size);
Here you ask getcwd() to fill a buffer at an address that does not exist
any more. The fix is to add a line "buf = ptr;":
ptr = realloc (buf, size);
if (ptr == NULL)
{
free (buf);
errno = ENOMEM;
return NULL;
}
buf = ptr;
result = getcwd (buf, size);
> AC_DEFUN([gl_PREREQ_GETCWD],
> [
> AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
> AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO])
> + AC_DEFINE([USE_GPL_GETCWD], [1],
> + [Define to 1 if GPL code should be used to attempt to work around
> + native getcwd failures.])
This will cause a link error if a package uses
"gnulib-tool --import --with-tests ... getcwd-lgpl ..."
and the module 'getcwd' occurs among the dependencies of the tests. Then
USE_GPL_GETCWD will be defined to 1, therefore lib/getcwd-lgpl.o will be empty,
therefore lib/libgnu.a will have a missing link dependency. (Recall that
lib/getcwd.o is linked into the tests only, not into lib/libgnu.a, in this
case.)
The easiest fix is to use
gl_MODULE_INDICATOR([getcwd])
and then in the C code you use
#if GNULIB_GETCWD
Another fix would be to change
AC_DEFINE([USE_GPL_GETCWD], [1],
to
AC_DEFINE([USE_GPL_GETCWD], [gl_MODULE_INDICATOR_CONDITION],
but that's not the common idiom: hardly anyone remembers what
gl_MODULE_INDICATOR_CONDITION stands for.
Bruno
--
In memoriam Heinrich Conradi <http://de.wikipedia.org/wiki/Heinrich_Conradi>
[PATCHv2 2/9] getcwd-lgpl: new module, Eric Blake, 2011/04/26
- Re: [PATCHv2 2/9] getcwd-lgpl: new module,
Bruno Haible <=
[PATCHv2 5/9] dirent-safer: drop unused link dependency, Eric Blake, 2011/04/26
[PATCHv2 6/9] tests: reduce dependencies, Eric Blake, 2011/04/26
[PATCHv2 3/9] getcwd: enhance tests, Eric Blake, 2011/04/26
[PATCHv2 7/9] linkat, renameat: add missing dependency, Eric Blake, 2011/04/26