[pacman-dev] [PATCH] Detect undefined PATH_MAX
POSIX does not require PATH_MAX be defined when there is not actual limit to its value. This affects HURD based systems. Work around this by defining PATH_MAX to 4096 (as on Linux) when this is not defined. Also, clean up inclusions of limits.h Signed-off-by: Allan McRae <allan@archlinux.org> --- We do something like: #if !defined(PATH_MAX) #include <limits.h> #endif to only include limits.h when necessary, but given any decent compiler gets rid of unused stuff anyway, I do not think it necessary. acinclude.m4 | 16 ++++++++++++++++ configure.ac | 1 + lib/libalpm/be_sync.c | 1 + lib/libalpm/db.h | 1 - lib/libalpm/dload.c | 1 - lib/libalpm/error.c | 1 - lib/libalpm/package.c | 1 - lib/libalpm/sync.c | 1 + lib/libalpm/trans.c | 1 + src/util/cleanupdelta.c | 2 ++ src/util/testdb.c | 2 ++ 11 files changed, 24 insertions(+), 4 deletions(-) diff --git a/acinclude.m4 b/acinclude.m4 index 6693da4..7309d73 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -125,3 +125,19 @@ extern int getmntinfo (struct statfs **, int); [Defined as the filesystem stats type ('statvfs' or 'statfs')]) ]) +dnl Checks for PATH_MAX and defines it if not present +AC_DEFUN([PATH_MAX_DEFINED], + [AC_CACHE_CHECK([PATH_MAX defined], path_max_cv_defined, + [AC_EGREP_CPP(yes, [[ +#include <limits.h> +#if defined(PATH_MAX) +yes +#endif +]], + [path_max_cv_defined=yes], + [path_max_cv_defined=no])] + ) + if test $path_max_cv_defined = no; then + AC_DEFINE([PATH_MAX], 4096, [Define if PATH_MAX is undefined by limits.h.]) + fi +]) diff --git a/configure.ac b/configure.ac index 747c8b7..18e8996 100644 --- a/configure.ac +++ b/configure.ac @@ -185,6 +185,7 @@ AC_TYPE_SIZE_T AC_STRUCT_TM AC_TYPE_UID_T AC_STRUCT_DIRENT_D_TYPE +PATH_MAX_DEFINED # Checks for library functions. AC_FUNC_FORK diff --git a/lib/libalpm/be_sync.c b/lib/libalpm/be_sync.c index b201c00..d5d3a44 100644 --- a/lib/libalpm/be_sync.c +++ b/lib/libalpm/be_sync.c @@ -23,6 +23,7 @@ #include <errno.h> #include <ctype.h> #include <locale.h> +#include <limits.h> /* libarchive */ #include <archive.h> diff --git a/lib/libalpm/db.h b/lib/libalpm/db.h index ace366d..10aa164 100644 --- a/lib/libalpm/db.h +++ b/lib/libalpm/db.h @@ -23,7 +23,6 @@ #define _ALPM_DB_H #include "alpm.h" -#include <limits.h> #include <time.h> /* libarchive */ diff --git a/lib/libalpm/dload.c b/lib/libalpm/dload.c index 1cb24e6..ea7f557 100644 --- a/lib/libalpm/dload.c +++ b/lib/libalpm/dload.c @@ -29,7 +29,6 @@ #include <sys/types.h> #include <sys/stat.h> #include <signal.h> -#include <limits.h> /* the following two are needed on BSD for libfetch */ #if defined(HAVE_SYS_SYSLIMITS_H) #include <sys/syslimits.h> /* PATH_MAX */ diff --git a/lib/libalpm/error.c b/lib/libalpm/error.c index 78a7866..d4c296f 100644 --- a/lib/libalpm/error.c +++ b/lib/libalpm/error.c @@ -22,7 +22,6 @@ /* TODO: needed for the libfetch stuff, unfortunately- we should kill it */ #include <stdio.h> -#include <limits.h> /* the following two are needed on BSD for libfetch */ #if defined(HAVE_SYS_SYSLIMITS_H) #include <sys/syslimits.h> /* PATH_MAX */ diff --git a/lib/libalpm/package.c b/lib/libalpm/package.c index 2ea5125..edfb7bd 100644 --- a/lib/libalpm/package.c +++ b/lib/libalpm/package.c @@ -25,7 +25,6 @@ #include <stdio.h> #include <stdlib.h> -#include <limits.h> #include <string.h> #include <ctype.h> #include <errno.h> diff --git a/lib/libalpm/sync.c b/lib/libalpm/sync.c index 2d0a899..7a1e503 100644 --- a/lib/libalpm/sync.c +++ b/lib/libalpm/sync.c @@ -31,6 +31,7 @@ #include <stdint.h> /* intmax_t */ #include <unistd.h> #include <time.h> +#include <limits.h> /* libalpm */ #include "sync.h" diff --git a/lib/libalpm/trans.c b/lib/libalpm/trans.c index 5bc2c91..5c13211 100644 --- a/lib/libalpm/trans.c +++ b/lib/libalpm/trans.c @@ -31,6 +31,7 @@ #include <sys/stat.h> #include <sys/statvfs.h> #include <errno.h> +#include <limits.h> /* libalpm */ #include "trans.h" diff --git a/src/util/cleanupdelta.c b/src/util/cleanupdelta.c index c1ef18c..2010282 100644 --- a/src/util/cleanupdelta.c +++ b/src/util/cleanupdelta.c @@ -17,6 +17,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "config.h" + #include <stdio.h> #include <stdlib.h> #include <string.h> diff --git a/src/util/testdb.c b/src/util/testdb.c index 28f2b2b..f77583a 100644 --- a/src/util/testdb.c +++ b/src/util/testdb.c @@ -17,6 +17,8 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "config.h" + #include <unistd.h> #include <stdio.h> #include <stdlib.h> -- 1.7.3.3
On 18/12/10 11:42, Allan McRae wrote:
POSIX does not require PATH_MAX be defined when there is not actual limit to its value. This affects HURD based systems. Work around this by defining PATH_MAX to 4096 (as on Linux) when this is not defined.
Also, clean up inclusions of limits.h
Signed-off-by: Allan McRae<allan@archlinux.org> ---
You can easily test this works on your Linux system by editing /usr/include/linux/limits.h and commenting out the PATH_MAX definition. Allan
participants (1)
-
Allan McRae