diff --git a/newlib/ChangeLog b/newlib/ChangeLog index 68283e31c..9661de9c5 100644 --- a/newlib/ChangeLog +++ b/newlib/ChangeLog @@ -1,3 +1,12 @@ +2000-08-27 Werner Almesberger + + * libc/posix/scandir.c (DIRSIZ, scandir): use struct dirent.d_namlen + only if _DIRENT_HAVE_D_NAMLEN is defined. + (alphasort): aligned prototype with + libc/sys/cygwin/sys/dirent.h and simplified function body. + * libc/posix/telldir.c (telldir): changed "telldir" prototype to + long telldir (DIR *) as mentioned in annex B of POSIX.1 + 2000-08-27 Werner Almesberger * libc/machine/i386/i386mach.h: added SOTYPE_FUNCTION to set type diff --git a/newlib/libc/posix/scandir.c b/newlib/libc/posix/scandir.c index 895879bac..6acaff739 100644 --- a/newlib/libc/posix/scandir.c +++ b/newlib/libc/posix/scandir.c @@ -57,8 +57,13 @@ static char sccsid[] = "@(#)scandir.c 5.10 (Berkeley) 2/23/91"; * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary. */ #undef DIRSIZ +#ifdef _DIRENT_HAVE_D_NAMLEN #define DIRSIZ(dp) \ ((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3)) +#else +#define DIRSIZ(dp) \ + ((sizeof (struct dirent) - (MAXNAMLEN+1)) + ((strlen((dp)->d_name)+1 + 3) &~ 3)) +#endif #ifndef __P #define __P(args) () @@ -103,8 +108,12 @@ scandir(dirname, namelist, select, dcomp) return(-1); p->d_ino = d->d_ino; p->d_reclen = d->d_reclen; +#ifdef _DIRENT_HAVE_D_NAMLEN p->d_namlen = d->d_namlen; bcopy(d->d_name, p->d_name, p->d_namlen + 1); +#else + strcpy(p->d_name, d->d_name); +#endif /* * Check to make sure the array has space left and * realloc the maximum size. @@ -132,11 +141,10 @@ scandir(dirname, namelist, select, dcomp) */ int alphasort(d1, d2) - const void *d1; - const void *d2; + const struct dirent **d1; + const struct dirent **d2; { - return(strcmp((*(struct dirent **)d1)->d_name, - (*(struct dirent **)d2)->d_name)); + return(strcmp((*d1)->d_name, (*d2)->d_name)); } #endif /* ! HAVE_OPENDIR */ diff --git a/newlib/libc/posix/telldir.c b/newlib/libc/posix/telldir.c index 90b12f99c..30c003760 100644 --- a/newlib/libc/posix/telldir.c +++ b/newlib/libc/posix/telldir.c @@ -73,7 +73,7 @@ static struct ddloc *dd_hash[NDIRHASH]; /* Hash list heads for ddlocs */ */ long telldir(dirp) - const DIR *dirp; + DIR *dirp; { register int index; register struct ddloc *lp;