cechew@bruce.OZ (Earl Chew) (11/10/89)
This shar file contains patches to ls 2.0 to bring it up to 2.1. Mostly cosmetic fixes for symbolic link processing. I have also included a makefile for minix, bsd, etc. Al Donaldson reported some problems listing _medium sized_ directories. I haven't heard from him since. Have you solved your problem Al? Earl ------------------------------------------------------------------------------- #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of shell archive." # Contents: ls.dif makefile.cpp makefile.min makefile.pyr makefile.sun # Wrapped by cechew@bruce on Fri Nov 10 09:41:18 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'ls.dif' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'ls.dif'\" else echo shar: Extracting \"'ls.dif'\" \(7023 characters\) sed "s/^X//" >'ls.dif' <<'END_OF_FILE' X*** ls.old Fri Nov 10 09:36:54 1989 X--- ls.c Fri Nov 10 09:29:51 1989 X*************** X*** 13,19 X * are no restrictions with regard to the size of the directory file X * since memory is allocated dynamically. X * X! * Patchlevel 2.0 X * X * Edit History: X * 21-Sep-1989 Changed names to _BSD and _MINIX. Use #ifdef for X X--- 13,19 ----- X * are no restrictions with regard to the size of the directory file X * since memory is allocated dynamically. X * X! * Patchlevel 2.1 X * X * Edit History: X * 20-Oct-1989 Change suffix for failed symbolic links. X*************** X*** 16,21 X * Patchlevel 2.0 X * X * Edit History: X * 21-Sep-1989 Changed names to _BSD and _MINIX. Use #ifdef for X * portability. X * 19-Sep-1989 Sizes in kb rather than `blocks'. X X--- 16,22 ----- X * Patchlevel 2.1 X * X * Edit History: X+ * 20-Oct-1989 Change suffix for failed symbolic links. X * 21-Sep-1989 Changed names to _BSD and _MINIX. Use #ifdef for X * portability. X * 19-Sep-1989 Sizes in kb rather than `blocks'. X*************** X*** 1119,1124 X #ifdef S_IFLNK X BOOL(dolink); /* follow link */ X char *link; /* link to */ X #endif X X p->length = 0; X X--- 1120,1126 ----- X #ifdef S_IFLNK X BOOL(dolink); /* follow link */ X char *link; /* link to */ X+ int fstat; /* result from filestat */ X #endif X X p->length = 0; X*************** X*** 1124,1129 X p->length = 0; X X #ifdef S_IFLNK X if (EVAL(dolink, TEST('o') || TEST('g')) && X (p->status->st_mode & S_IFMT) == S_IFLNK) { X if (! filestat(1, stat, link = followlink(p->name), &lsb)) { X X--- 1126,1132 ----- X p->length = 0; X X #ifdef S_IFLNK X+ link = (char *) NIL; X if (EVAL(dolink, TEST('o') || TEST('g')) && X (p->status->st_mode & S_IFMT) == S_IFLNK) { X fstat = filestat(1, stat, link = followlink(p->name), &lsb); X*************** X*** 1126,1132 X #ifdef S_IFLNK X if (EVAL(dolink, TEST('o') || TEST('g')) && X (p->status->st_mode & S_IFMT) == S_IFLNK) { X! if (! filestat(1, stat, link = followlink(p->name), &lsb)) { X *p->status = lsb; X p->length += 4 + stringlength(link); X *(p->suffix = (char *) safemalloc((unsigned int) p->length+2)) = 0; X X--- 1129,1140 ----- X link = (char *) NIL; X if (EVAL(dolink, TEST('o') || TEST('g')) && X (p->status->st_mode & S_IFMT) == S_IFLNK) { X! fstat = filestat(1, stat, link = followlink(p->name), &lsb); X! p->length += 4 + stringlength(link); X! X! /* Follow link and obtain status for final target */ X! if (! fstat) { X! X *p->status = lsb; X X /* Malloc extra space for null and possible type indicator */ X*************** X*** 1128,1134 X (p->status->st_mode & S_IFMT) == S_IFLNK) { X if (! filestat(1, stat, link = followlink(p->name), &lsb)) { X *p->status = lsb; X! p->length += 4 + stringlength(link); X *(p->suffix = (char *) safemalloc((unsigned int) p->length+2)) = 0; X (void) strcat(p->suffix, " -> "); X (void) strcat(p->suffix, link); X X--- 1136,1143 ----- X if (! fstat) { X X *p->status = lsb; X! X! /* Malloc extra space for null and possible type indicator */ X *(p->suffix = (char *) safemalloc((unsigned int) p->length+2)) = 0; X X (void) strcat(p->suffix, " -> "); X*************** X*** 1130,1135 X *p->status = lsb; X p->length += 4 + stringlength(link); X *(p->suffix = (char *) safemalloc((unsigned int) p->length+2)) = 0; X (void) strcat(p->suffix, " -> "); X (void) strcat(p->suffix, link); X } X X--- 1139,1145 ----- X X /* Malloc extra space for null and possible type indicator */ X *(p->suffix = (char *) safemalloc((unsigned int) p->length+2)) = 0; X+ X (void) strcat(p->suffix, " -> "); X (void) strcat(p->suffix, link); X link = (char *) NIL; X*************** X*** 1132,1137 X *(p->suffix = (char *) safemalloc((unsigned int) p->length+2)) = 0; X (void) strcat(p->suffix, " -> "); X (void) strcat(p->suffix, link); X } X } X #endif X X--- 1142,1148 ----- X X (void) strcat(p->suffix, " -> "); X (void) strcat(p->suffix, link); X+ link = (char *) NIL; X } X } X #endif X*************** X*** 1152,1158 X X p->length += stringlength(p->name) + strlen(type); X X! if (p->suffix == NIL) X p->suffix = type; X else if (*type != 0) X (void) strcat(p->suffix, type); X X--- 1163,1181 ----- X X p->length += stringlength(p->name) + strlen(type); X X! if (p->suffix == NIL) { X! #ifdef S_IFLNK X! if (link == (char *) NIL) X! p->suffix = type; X! X! /* Link followed but target non-existent --- file type shows link */ X! else { X! p->suffix = (char *) safemalloc((unsigned int) p->length+1); X! (void) strcpy(p->suffix, type); X! (void) strcat(p->suffix, " -> "); X! (void) strcat(p->suffix, link); X! } X! #else X p->suffix = type; X #endif X } X*************** X*** 1154,1159 X X if (p->suffix == NIL) X p->suffix = type; X else if (*type != 0) X (void) strcat(p->suffix, type); X } X X--- 1177,1184 ----- X } X #else X p->suffix = type; X+ #endif X+ } X else if (*type != 0) X (void) strcat(p->suffix, type); X } X*************** X*** 1209,1217 X X if ((*status)(name, statbuf) X #ifdef S_IFLNK X! && (status == lstat || X! errno != ENOENT || X! lstat(name, statbuf)) X #endif X ) { X if (errno == ENOENT) { X X--- 1234,1240 ----- X X if ((*status)(name, statbuf) X #ifdef S_IFLNK X! && (status == lstat || lstat(name, statbuf)) X #endif X ) { X if (! silent) { X*************** X*** 1214,1221 X lstat(name, statbuf)) X #endif X ) { X! if (errno == ENOENT) { X! if (! silent) X (void) fprintf(stderr, "%s not found\n", name); X return 1; X } X X--- 1237,1244 ----- X && (status == lstat || lstat(name, statbuf)) X #endif X ) { X! if (! silent) { X! if (errno == ENOENT) X (void) fprintf(stderr, "%s not found\n", name); X else X (void) fprintf(stderr, "%s stat failure: %s\n", name, strerror(errno)); X*************** X*** 1217,1223 X if (errno == ENOENT) { X if (! silent) X (void) fprintf(stderr, "%s not found\n", name); X! return 1; X } X else { X (void) fprintf(stderr, "%s stat failure: %s\n", name, strerror(errno)); X X--- 1240,1247 ----- X if (! silent) { X if (errno == ENOENT) X (void) fprintf(stderr, "%s not found\n", name); X! else X! (void) fprintf(stderr, "%s stat failure: %s\n", name, strerror(errno)); X } X return 1; X } X*************** X*** 1219,1228 X (void) fprintf(stderr, "%s not found\n", name); X return 1; X } X! else { X! (void) fprintf(stderr, "%s stat failure: %s\n", name, strerror(errno)); X! exit(1); X! } X } X return *endpath = 0; X } X X--- 1243,1249 ----- X else X (void) fprintf(stderr, "%s stat failure: %s\n", name, strerror(errno)); X } X! return 1; X } X return *endpath = 0; X } END_OF_FILE if test 7023 -ne `wc -c <'ls.dif'`; then echo shar: \"'ls.dif'\" unpacked with wrong size! fi # end of 'ls.dif' fi if test -f 'makefile.cpp' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'makefile.cpp'\" else echo shar: Extracting \"'makefile.cpp'\" \(1921 characters\) sed "s/^X//" >'makefile.cpp' <<'END_OF_FILE' X#ifdef _MSDOS X#define ARC pkarc X#undef _MSDOS X#endif X X#ifdef sun X#undef sun X#sun sun X#define WHOAMI sun X#define DEFINES -D_BSD X#define INCLUDES X#define LIBRARY X#define LIBRARIES X#define CCFLAGS X#define OBJECT(x) x.o X#define AOUT(x) x X#define CC cc X#define EXE(x) -o x X#define ARC arc X#endif X X#ifdef pyr X#undef pyr X#pyr pyr X#define WHOAMI pyr X#define DEFINES -D_BSD X#define INCLUDES X#define LIBRARY X#define LIBRARIES X#define CCFLAGS X#define OBJECT(x) x.o X#define AOUT(x) x X#define CC cc X#define EXE(x) -o x X#define ARC arc X#endif X X#ifdef _MINIX X#undef _MINIX X#min _MINIX X#define WHOAMI min X#define DEFINES -D_MINIX -Di8088 X#define LIBRARY X#define LIBRARIES X#define INCLUDES X#define CCFLAGS X#define OBJECT(x) x.s X#define AOUT(x) x X#define CC cc X#define EXE(x) -o x X#define ARC arc X#endif X X#define NONAME X#define NAME ls X Xall= *.c makefile.* *.man *.doc X Xeveryone= sun pyr min X XCFLAGS= DEFINES INCLUDES CCFLAGS X XLFLAGS= LIBRARY X Xsource= ls.c Xobject= OBJECT(ls) Xlibraries= LIBRARIES X X.SUFFIXES: OBJECT(NONAME) .c X X.c##OBJECT(NONAME): X CC -c $(CFLAGS) $< X XAOUT(NAME): $(object) X CC EXE(NAME) $(LFLAGS) $(object) $(libraries) X X$(object): X X# Everything Xall: ls.doc AOUT(NAME) X X# Documentation X Xls.doc: ls.man X nroff -man ls.man | col -b > ls.doc X X# Lint checking X Xlint: X lint $(define) $(source) X X# Packing X Xarc: X rm -f NAME.arc X ARC a NAME.arc $(all) X X# Makefiles X Xmakefiles: X -for w in $(everyone) ; \ X do \ X n=`awk "/^#$$w / "'{ print $$2 }' <CPPMAKEFILE` ; \ X if test WHOAMI = $$n ; then \ X cppmake -o makefile.$$w ; \ X else \ X cppmake -U##WHOAMI -D$$n -o makefile.$$w ; \ X fi ; \ X done X X# Shell Archive Xshar: X ls $(all) | \ X sed -e 's/^.*\.doc/& Formatted documentation/' \ X -e 's/^.*\.man/& Manual page source/' \ X -e 's/^makefile\.cpp$$/& Cppmakefile/' \ X -e 's/^makefile\.[a-z]*$$/& Site dependent makefiles/' \ X -e 's/^.*\.c$$/& Source code/' | \ X makekit -n##NAME. -s40k -oMANIFEST END_OF_FILE if test 1921 -ne `wc -c <'makefile.cpp'`; then echo shar: \"'makefile.cpp'\" unpacked with wrong size! fi # end of 'makefile.cpp' fi if test -f 'makefile.min' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'makefile.min'\" else echo shar: Extracting \"'makefile.min'\" \(1005 characters\) sed "s/^X//" >'makefile.min' <<'END_OF_FILE' X X X#min _MINIX X X Xall= *.c makefile.* *.man *.doc X Xeveryone= sun pyr min X XCFLAGS= -D_MINIX -Di8088 X XLFLAGS= X Xsource= ls.c Xobject= ls.s Xlibraries= X X.SUFFIXES: .s .c X X.c.s: X cc -c $(CFLAGS) $< X Xls: $(object) X cc -o ls $(LFLAGS) $(object) $(libraries) X X$(object): X X# Everything Xall: ls.doc ls X X# Documentation X Xls.doc: ls.man X nroff -man ls.man | col -b > ls.doc X X# Lint checking X Xlint: X lint $(define) $(source) X X# Packing X Xarc: X rm -f ls.arc X arc a ls.arc $(all) X X# Makefiles X Xmakefiles: X -for w in $(everyone) ; \ X do \ X n=`awk "/^#$$w / "'{ print $$2 }' <Makefile.cpp` ; \ X if test min = $$n ; then \ X cppmake -o makefile.$$w ; \ X else \ X cppmake -Umin -D$$n -o makefile.$$w ; \ X fi ; \ X done X X# Shell Archive Xshar: X ls $(all) | \ X sed -e 's/^.*\.doc/& Formatted documentation/' \ X -e 's/^.*\.man/& Manual page source/' \ X -e 's/^makefile\.cpp$$/& Cppmakefile/' \ X -e 's/^makefile\.[a-z]*$$/& Site dependent makefiles/' \ X -e 's/^.*\.c$$/& Source code/' | \ X makekit -nls. -s40k -oMANIFEST END_OF_FILE if test 1005 -ne `wc -c <'makefile.min'`; then echo shar: \"'makefile.min'\" unpacked with wrong size! fi # end of 'makefile.min' fi if test -f 'makefile.pyr' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'makefile.pyr'\" else echo shar: Extracting \"'makefile.pyr'\" \(993 characters\) sed "s/^X//" >'makefile.pyr' <<'END_OF_FILE' X X X#pyr pyr X X X Xall= *.c makefile.* *.man *.doc X Xeveryone= sun pyr min X XCFLAGS= -D_BSD X XLFLAGS= X Xsource= ls.c Xobject= ls.o Xlibraries= X X.SUFFIXES: .o .c X X.c.o: X cc -c $(CFLAGS) $< X Xls: $(object) X cc -o ls $(LFLAGS) $(object) $(libraries) X X$(object): X X# Everything Xall: ls.doc ls X X# Documentation X Xls.doc: ls.man X nroff -man ls.man | col -b > ls.doc X X# Lint checking X Xlint: X lint $(define) $(source) X X# Packing X Xarc: X rm -f ls.arc X arc a ls.arc $(all) X X# Makefiles X Xmakefiles: X -for w in $(everyone) ; \ X do \ X n=`awk "/^#$$w / "'{ print $$2 }' <Makefile.cpp` ; \ X if test pyr = $$n ; then \ X cppmake -o makefile.$$w ; \ X else \ X cppmake -Upyr -D$$n -o makefile.$$w ; \ X fi ; \ X done X X# Shell Archive Xshar: X ls $(all) | \ X sed -e 's/^.*\.doc/& Formatted documentation/' \ X -e 's/^.*\.man/& Manual page source/' \ X -e 's/^makefile\.cpp$$/& Cppmakefile/' \ X -e 's/^makefile\.[a-z]*$$/& Site dependent makefiles/' \ X -e 's/^.*\.c$$/& Source code/' | \ X makekit -nls. -s40k -oMANIFEST END_OF_FILE if test 993 -ne `wc -c <'makefile.pyr'`; then echo shar: \"'makefile.pyr'\" unpacked with wrong size! fi # end of 'makefile.pyr' fi if test -f 'makefile.sun' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'makefile.sun'\" else echo shar: Extracting \"'makefile.sun'\" \(993 characters\) sed "s/^X//" >'makefile.sun' <<'END_OF_FILE' X X#sun sun X X X X Xall= *.c makefile.* *.man *.doc X Xeveryone= sun pyr min X XCFLAGS= -D_BSD X XLFLAGS= X Xsource= ls.c Xobject= ls.o Xlibraries= X X.SUFFIXES: .o .c X X.c.o: X cc -c $(CFLAGS) $< X Xls: $(object) X cc -o ls $(LFLAGS) $(object) $(libraries) X X$(object): X X# Everything Xall: ls.doc ls X X# Documentation X Xls.doc: ls.man X nroff -man ls.man | col -b > ls.doc X X# Lint checking X Xlint: X lint $(define) $(source) X X# Packing X Xarc: X rm -f ls.arc X arc a ls.arc $(all) X X# Makefiles X Xmakefiles: X -for w in $(everyone) ; \ X do \ X n=`awk "/^#$$w / "'{ print $$2 }' <Makefile.cpp` ; \ X if test sun = $$n ; then \ X cppmake -o makefile.$$w ; \ X else \ X cppmake -Usun -D$$n -o makefile.$$w ; \ X fi ; \ X done X X# Shell Archive Xshar: X ls $(all) | \ X sed -e 's/^.*\.doc/& Formatted documentation/' \ X -e 's/^.*\.man/& Manual page source/' \ X -e 's/^makefile\.cpp$$/& Cppmakefile/' \ X -e 's/^makefile\.[a-z]*$$/& Site dependent makefiles/' \ X -e 's/^.*\.c$$/& Source code/' | \ X makekit -nls. -s40k -oMANIFEST END_OF_FILE if test 993 -ne `wc -c <'makefile.sun'`; then echo shar: \"'makefile.sun'\" unpacked with wrong size! fi # end of 'makefile.sun' fi echo shar: End of shell archive. exit 0 ------------------------------------------------------------------------------- -- Earl Chew, Dept of Computer Science, Monash University, Australia 3168 ARPA: cechew%bruce.cs.monash.oz.au@uunet.uu.net ACS : cechew@bruce.oz ----------------------------------------------------------------------