What are the proper uses of MAXNAMLEN, NAME_MAX, and FILENAME_MAX? Do they represent filenames with or without paths? Do they include the terminating null or not? The source seems inconsistent:
[EMAIL PROTECTED]/usr/src] egrep -R '(MAXNAMLEN|NAME_MAX) ?\+ ?1' . ./bin/csh/file.c: Char name[MAXNAMLEN + 1], extended_name[MAXNAMLEN + 1]; ./games/hunt/huntd/conf.c: char nm[MAXNAMLEN + 1]; ./gnu/egcs/gcc/config/winnt/dirent.h: char d_name[MAXNAMLEN + 1]; ./gnu/usr.bin/cvs/contrib/dirfns.shar:X char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */ ./gnu/usr.bin/cvs/contrib/dirfns.shar:X char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */ ./gnu/usr.bin/cvs/contrib/dirfns.shar:X ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) ./gnu/usr.bin/cvs/vms/ndir.h: char d_name[MAXNAMLEN+1]; /* name of file */ ./gnu/usr.bin/cvs/windows-NT/ndir.h: char d_name[MAXNAMLEN + 1]; /* garentee null termination */ ./gnu/usr.bin/gcc/gcc/config/i386/xm-djgpp.h: static char fixed_path[FILENAME_MAX + 1]; \ ./gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c: char d_name[255+1]; /* name (up to MAXNAMLEN + 1) */ ./gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c: * at least MAXNAMLEN + 1 (more may be added for padding). ./gnu/usr.bin/lynx/WWW/Library/Implementation/HTVMSUtils.c: (((sizeof(struct dirent) - (MAXNAMLEN+1) + ((dp)->d_namlen+1)) +3) & ~3) ./gnu/usr.bin/perl/doio.c: char newname[FILENAME_MAX+1]; ./lib/csu/common.h:char __progname_storage[NAME_MAX+1]; ./lib/csu/alpha/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/amd64/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/arm/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/hppa/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/i386/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/powerpc/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/sparc/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/sparc64/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/csu/hppa64/crt0.c:char __progname_storage[NAME_MAX+1]; ./lib/libc/gen/authenticate.c: char namebuf[MAXLOGNAME + 1 + NAME_MAX + 1]; ./lib/libc/gen/authenticate.c: char namebuf[MAXLOGNAME + 1 + NAME_MAX + 1]; ./lib/libc/gen/getcwd.c: if (bup + 3 + MAXNAMLEN + 1 >= eup) { ./lib/libc/sys/getdirentries.2:char d_name[MAXNAMLEN + 1]; /* see below */ ./lib/libc/sys/.#getdirentries.2.1.19:char d_name[MAXNAMLEN + 1]; /* see below */ ./lib/libc/time/localtime.c: (2 * (MY_TZNAME_MAX + 1)))]; ./lib/libssl/src/crypto/dso/dso_vms.c: char filename[FILENAME_MAX+1]; ./lib/libssl/src/crypto/dso/dso_vms.c: char imagename[FILENAME_MAX+1]; ./sbin/newfs/mkfs.c: u_char d_name[MAXNAMLEN + 1]; ./share/man/man5/dir.5: char d_name[MAXNAMLEN + 1]; /* maximum name length */ ./sys/compat/ibcs2/ibcs2_dirent.h: char d_name[IBCS2_MAXNAMLEN + 1]; ./sys/compat/linux/linux_dirent.h: char d_name[LINUX_MAXNAMLEN + 1]; ./sys/compat/linux/linux_dirent.h: char d_name[LINUX_MAXNAMLEN + 1]; ./sys/compat/linux/linux_getcwd.c:#define DIRENT_MINSIZE (sizeof(struct dirent) - (LINUX_MAXNAMLEN+1) + 4) ./sys/compat/netbsd/netbsd_getcwd.c:#define DIRENT_MINSIZE (sizeof(struct dirent) - (MAXNAMLEN+1) + 4) ./sys/compat/sunos/sunos_dirent.h: char d_name[SUNOS_MAXNAMLEN + 1]; ./sys/compat/svr4/svr4_dirent.h: char d_name[SVR4_MAXNAMLEN + 1]; ./sys/compat/svr4/svr4_dirent.h: char d_name[SVR4_MAXNAMLEN + 1]; ./sys/isofs/udf/udf_vnops.c: ((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) ./sys/nfs/nfs_vnops.c:#define NFS_DIRHDSIZ (sizeof (struct nfs_dirent) - (MAXNAMLEN + 1)) ./sys/stand/ls.c: if (((DP *)dp)->d_namlen > MAXNAMLEN+1) { ./sys/sys/dir.h: ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) ./sys/sys/dirent.h: char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */ ./sys/sys/dirent.h: ((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) ./sys/ufs/ufs/dir.h: char d_name[MAXNAMLEN + 1];/* name with length <= MAXNAMLEN */ ./sys/ufs/ufs/dir.h: ((sizeof(struct direct) - (MAXNAMLEN+1)) + (((dp)->d_type+1 + 3) &~ 3)) : \ ./sys/ufs/ufs/dir.h: ((sizeof(struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))) ./sys/ufs/ufs/dir.h: ((sizeof(struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) ./sys/ufs/ufs/dirhash.h:#define DH_NFSTATS (DIRECTSIZ(MAXNAMLEN + 1) / DIRALIGN) ./sys/xfs/xfs_node-bsd.c: char name[MAXNAMLEN + 1]; ./usr.bin/ar/archive.h: char name[MAXNAMLEN + 1]; /* name */ ./usr.bin/ctags/tree.c: char nbuf[1+MAXNAMLEN+1]; ./usr.bin/less/lsystem.c: char cwd[FILENAME_MAX+1]; ./usr.bin/patch/patch.c:static char rejname[NAME_MAX + 1]; ./usr.sbin/afs/src/nnpfs/bsd/nnpfs_node-bsd.c: char name[MAXNAMLEN + 1]; ./usr.sbin/cron/database.c: char fname[MAXNAMLEN+1], tabname[MAXNAMLEN]; ./usr.sbin/dev_mkdb/dev_mkdb.c: u_char buf[MAXNAMLEN + 1]; ./usr.sbin/lpr/common_source/lp.h: char q_name[MAXNAMLEN+1]; /* control file name */ ./usr.sbin/syslogd/syslogd.c: char prog[NAME_MAX+1]; ./usr.sbin/syslogd/syslogd.c: char cline[LINE_MAX], prog[NAME_MAX+1], *p; [EMAIL PROTECTED]/usr/src] egrep -R '(MAXNAMLEN|NAME_MAX)\]' . ./gnu/usr.bin/binutils/gas/config/tc-tic4x.c: char name[TIC4X_NAME_MAX]; /* Mnemonic of instruction. */ ./gnu/usr.bin/binutils/gdb/go32-nat.c:static char child_cwd[FILENAME_MAX]; ./gnu/usr.bin/binutils/ld/ldgram.y:static char *error_names[ERROR_NAME_MAX]; ./gnu/usr.bin/cvs/emx/filesubr.c: char fn1[MAXNAMLEN], fn2[MAXNAMLEN]; ./gnu/usr.sbin/mkhybrid/src/files.c: de->d_name[NAME_MAX]=0; ./gnu/usr.sbin/sendmail/sendmail/arpadate.c: static char b[43 + TZNAME_MAX]; ./lib/libc/gen/ttyname.c:static char buf[TTY_NAME_MAX]; ./lib/libc/time/localtime.c: char fullname[FILENAME_MAX]; ./lib/libc/time/strftime.c: char filename[FILENAME_MAX]; ./lib/libutil/uucplock.c: char lckname[sizeof(_PATH_UUCPLOCK) + MAXNAMLEN], ./lib/libutil/uucplock.c: lcktmpname[sizeof(_PATH_UUCPLOCK) + MAXNAMLEN]; ./lib/libutil/uucplock.c: char lckname[sizeof(_PATH_UUCPLOCK) + MAXNAMLEN]; ./lib/libutil/uucplock.c: char tbuf[sizeof(_PATH_UUCPLOCK) + MAXNAMLEN]; ./sbin/fsck_ext2fs/utilities.c: if (cp < &namebuf[EXT2FS_MAXNAMLEN]) ./sbin/fsck_ffs/utilities.c: if (cp < &namebuf[MAXNAMLEN]) ./sbin/isakmpd/ike_auth.c: char filename[FILENAME_MAX]; ./sys/isofs/cd9660/cd9660_lookup.c: char altname[NAME_MAX]; ./sys/ufs/ext2fs/ext2fs_dir.h: char e2d_name[EXT2FS_MAXNAMLEN];/* name with length <= EXT2FS_MAXNAMLEN */ ./usr.bin/mg/fileio.c: char user[LOGIN_NAME_MAX], path[MAXPATHLEN]; ./usr.bin/mixerctl/mixerctl.c: char name[FIELD_NAME_MAX]; ./usr.bin/mixerctl/mixerctl.c: char tmp[FIELD_NAME_MAX]; ./usr.bin/tip/uucplock.c: char tbuf[sizeof(_PATH_LOCKDIRNAME) + MAXNAMLEN]; ./usr.bin/tip/uucplock.c: char tbuf[sizeof(_PATH_LOCKDIRNAME) + MAXNAMLEN]; ./usr.bin/tip/value.c: char file[FILENAME_MAX]; ./usr.bin/wall/ttymsg.c: static char device[MAXNAMLEN] = _PATH_DEV; ./usr.bin/cvs/file.c: char ip_pat[MAXNAMLEN]; ./usr.bin/cvs/file.c: char path[MAXPATHLEN], buf[MAXNAMLEN]; ./usr.bin/cvs/resp.c: char newname[MAXNAMLEN], *file; ./usr.bin/cvs/status.c: char buf[MAXNAMLEN], fpath[MAXPATHLEN], rcspath[MAXPATHLEN]; ./usr.sbin/cron/database.c: char fname[MAXNAMLEN+1], tabname[MAXNAMLEN]; ./usr.sbin/lpr/common_source/displayq.c:static char current[NAME_MAX]; /* current file being printed */ ./usr.sbin/lpr/common_source/displayq.c:static char file[NAME_MAX]; /* print file name */ ./usr.sbin/lpr/common_source/rmjob.c:static char current[NAME_MAX]; /* active control file name */ ./usr.sbin/lpr/lpd/printjob.c:static char jobname[NAME_MAX]; /* job or file name */ ./usr.sbin/lpr/lpd/recvjob.c:static char dfname[NAME_MAX]; /* data files */ ./usr.sbin/lpr/lpd/recvjob.c:static char tfname[NAME_MAX]; /* tmp copy of cf before linking */ ./usr.sbin/mopd/mopd/process.c: char filename[FILENAME_MAX]; ./usr.sbin/syslogd/ttymsg.c: static char device[MAXNAMLEN] = _PATH_DEV; ./plusone.grep:./usr.sbin/cron/database.c: char fname[MAXNAMLEN+1], tabname[MAXNAMLEN]; chdir(2) says: [ENAMETOOLONG] A component of a pathname exceeded {NAME_MAX} characters, or an entire path name exceeded {PATH_MAX} characters. dir(5) says: /* * A directory entry has a struct dirent at the front of it, containing * its inode number, the length of the entry, and the length of the name * contained in the entry. These are followed by the name padded to a 4 * byte boundary with null bytes. All names are guaranteed NUL terminated. * The maximum length of a name in a directory is MAXNAMLEN. */ struct dirent { u_int32_t d_fileno; /* file number of entry */ u_int16_t d_reclen; /* length of this record */ u_int8_t d_type; /* file type, see below */ u_int8_t d_namlen; /* length of string in d_name */ #define MAXNAMLEN 255 char d_name[MAXNAMLEN + 1]; /* maximum name length */ }; Can someone clarify? Thank you. -Ray-