| 1 | /* Define PATH_MAX somehow. Requires sys/types.h. |
| 2 | Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2020 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 <https://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 | <https://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 __CYGWIN__ |
| 69 | /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, |
| 70 | section "Maximum Path Length Limitation", |
| 71 | <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation> |
| 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 */ |