Home | History | Annotate | Download | only in lib
      1 /* Define PATH_MAX somehow.  Requires sys/types.h.
      2    Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2012 Free Software
      3    Foundation, Inc.
      4 
      5    This program is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by
      7    the Free Software Foundation; either version 3, or (at your option)
      8    any later version.
      9 
     10    This program is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13    GNU General Public License for more details.
     14 
     15    You should have received a copy of the GNU General Public License
     16    along with this program; if not, see <http://www.gnu.org/licenses/>.  */
     17 
     18 #ifndef _PATHMAX_H
     19 # define _PATHMAX_H
     20 
     21 /* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename,
     22    including the terminating NUL byte.
     23    <http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html>
     24    PATH_MAX is not defined on systems which have no limit on filename length,
     25    such as GNU/Hurd.
     26 
     27    This file does *not* define PATH_MAX always.  Programs that use this file
     28    can handle the GNU/Hurd case in several ways:
     29      - Either with a package-wide handling, or with a per-file handling,
     30      - Either through a
     31          #ifdef PATH_MAX
     32        or through a fallback like
     33          #ifndef PATH_MAX
     34          # define PATH_MAX 8192
     35          #endif
     36        or through a fallback like
     37          #ifndef PATH_MAX
     38          # define PATH_MAX pathconf ("/", _PC_PATH_MAX)
     39          #endif
     40  */
     41 
     42 # include <unistd.h>
     43 
     44 # include <limits.h>
     45 
     46 # ifndef _POSIX_PATH_MAX
     47 #  define _POSIX_PATH_MAX 256
     48 # endif
     49 
     50 /* Don't include sys/param.h if it already has been.  */
     51 # if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
     52 #  include <sys/param.h>
     53 # endif
     54 
     55 # if !defined PATH_MAX && defined MAXPATHLEN
     56 #  define PATH_MAX MAXPATHLEN
     57 # endif
     58 
     59 # ifdef __hpux
     60 /* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename,
     61    *not* including the terminating NUL byte, and is set to 1023.
     62    Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is
     63    not defined at all any more.  */
     64 #  undef PATH_MAX
     65 #  define PATH_MAX 1024
     66 # endif
     67 
     68 # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
     69 /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com,
     70    section "Maximum Path Length Limitation",
     71    <http://msdn.microsoft.com/en-us/library/aa365247(v=vs.85).aspx#maxpath>
     72    explains that the maximum size of a filename, including the terminating
     73    NUL byte, is 260 = 3 + 256 + 1.
     74    This is the same value as
     75      - FILENAME_MAX in <stdio.h>,
     76      - _MAX_PATH in <stdlib.h>,
     77      - MAX_PATH in <windef.h>.
     78    Undefine the original value, because mingw's <limits.h> gets it wrong.  */
     79 #  undef PATH_MAX
     80 #  define PATH_MAX 260
     81 # endif
     82 
     83 #endif /* _PATHMAX_H */
     84