X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fcanonicalize.c;h=4fe9f308af7e9ee54eef166ac16f2f8e5418d1f6;hb=b65bfcd7ba0be84de3d96f22103103f21679a721;hp=2f008e0689a369f1486113704765ce1fc18a4707;hpb=441aa3044f43e5572f58c354f01e6bc070acd5c7;p=gnulib.git diff --git a/lib/canonicalize.c b/lib/canonicalize.c index 2f008e068..4fe9f308a 100644 --- a/lib/canonicalize.c +++ b/lib/canonicalize.c @@ -1,5 +1,5 @@ /* Return the canonical absolute name of a given file. - Copyright (C) 1996-2009 Free Software Foundation, Inc. + Copyright (C) 1996-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,6 +31,12 @@ #include "xalloc.h" #include "xgetcwd.h" +/* In this file, we cannot handle file names longer than PATH_MAX. + On systems with no file name length limit, use a fallback. */ +#ifndef PATH_MAX +# define PATH_MAX 8192 +#endif + #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 #endif @@ -272,6 +278,8 @@ canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && *dest == '/') dest++; *dest = '\0'; + if (rname_limit != dest + 1) + rname = xrealloc (rname, dest - rname + 1); free (extra_buf); if (ht)