From 3c163822d88105450806fdb6a29fdfc2511267d1 Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Thu, 14 Oct 1999 22:16:57 +0000 Subject: [PATCH] Fixed cp -[aR] and some other stuf. --- Makefile | 2 +- coreutils/cp.c | 12 +++-- coreutils/ls.c | 4 +- cp.c | 12 +++-- init.c | 128 +++++++++++++++++++++++--------------------- init/init.c | 128 +++++++++++++++++++++++--------------------- ls.c | 4 +- mount.c | 18 +++---- umount.c | 8 +-- util-linux/mount.c | 18 +++---- util-linux/umount.c | 8 +-- utility.c | 28 ++++------ 12 files changed, 188 insertions(+), 182 deletions(-) diff --git a/Makefile b/Makefile index 59d648512..3069c0711 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ BUILDTIME=$(shell date "+%Y%m%d-%H%M") # Comment out the following to make a debuggable build # Leave this off for production use. -DODEBUG=true +#DODEBUG=true #This will choke on a non-debian system ARCH=`uname -m | sed -e 's/i.86/i386/' | sed -e 's/sparc.*/sparc/'` diff --git a/coreutils/cp.c b/coreutils/cp.c index 94b4ab024..6ca66e642 100644 --- a/coreutils/cp.c +++ b/coreutils/cp.c @@ -40,13 +40,14 @@ static int followLinks = FALSE; static int preserveFlag = FALSE; static const char *srcName; static const char *destName; +static const char *skipName; static int fileAction(const char *fileName) { char newdestName[NAME_MAX]; strcpy(newdestName, destName); - strcat(newdestName, fileName+(strlen(srcName))); + strcat(newdestName, strstr(fileName, skipName)); return (copyFile(fileName, newdestName, preserveFlag, followLinks)); } @@ -98,10 +99,13 @@ extern int cp_main(int argc, char **argv) exit (FALSE); } - while (argc-- >= 2) { + while (argc-- > 1) { srcName = *(argv++); - exit( recursiveAction(srcName, recursiveFlag, followLinks, - fileAction, fileAction)); + skipName = strrchr(srcName, '/'); + if (skipName) skipName++; + if (recursiveAction(srcName, recursiveFlag, followLinks, + fileAction, fileAction) == FALSE) + exit( FALSE); } exit( TRUE); } diff --git a/coreutils/ls.c b/coreutils/ls.c index 7a1b0f3d0..50b983e24 100644 --- a/coreutils/ls.c +++ b/coreutils/ls.c @@ -179,15 +179,13 @@ int ls_main(int argc, char **argv) #define FEATURE_AUTOWIDTH /* calculate terminal & column widths */ #define FEATURE_FILETYPECHAR /* enable -p and -F */ -#undef OP_BUF_SIZE 1024 /* leave undefined for unbuffered output */ - #define TERMINAL_WIDTH 80 /* use 79 if your terminal has linefold bug */ #define COLUMN_WIDTH 14 /* default if AUTOWIDTH not defined */ #define COLUMN_GAP 2 /* includes the file type char, if present */ +#define HAS_REWINDDIR /************************************************************************/ -#define HAS_REWINDDIR #if 1 /* FIXME libc 6 */ # include diff --git a/cp.c b/cp.c index 94b4ab024..6ca66e642 100644 --- a/cp.c +++ b/cp.c @@ -40,13 +40,14 @@ static int followLinks = FALSE; static int preserveFlag = FALSE; static const char *srcName; static const char *destName; +static const char *skipName; static int fileAction(const char *fileName) { char newdestName[NAME_MAX]; strcpy(newdestName, destName); - strcat(newdestName, fileName+(strlen(srcName))); + strcat(newdestName, strstr(fileName, skipName)); return (copyFile(fileName, newdestName, preserveFlag, followLinks)); } @@ -98,10 +99,13 @@ extern int cp_main(int argc, char **argv) exit (FALSE); } - while (argc-- >= 2) { + while (argc-- > 1) { srcName = *(argv++); - exit( recursiveAction(srcName, recursiveFlag, followLinks, - fileAction, fileAction)); + skipName = strrchr(srcName, '/'); + if (skipName) skipName++; + if (recursiveAction(srcName, recursiveFlag, followLinks, + fileAction, fileAction) == FALSE) + exit( FALSE); } exit( TRUE); } diff --git a/init.c b/init.c index 2860272f9..19cbec130 100644 --- a/init.c +++ b/init.c @@ -66,11 +66,8 @@ waitfor(int pid) } static int -run( - const char * program -,const char * const * arguments -,const char * terminal -,int get_enter) +run(const char* program, const char* const* arguments, + const char* terminal, int get_enter) { static const char control_characters[] = { '\003', @@ -137,7 +134,8 @@ run( * before the user wants it. This is critical if swap is not * enabled and the system has low memory. Generally this will * be run on the second virtual console, and the first will - * be allowed to start a shell or the installation system. + * be allowed to start a shell or whatever an init script + * specifies. */ char c; write(1, press_enter, sizeof(press_enter) - 1); @@ -246,26 +244,49 @@ exit_signal(int sig) } void -configure_terminals( int serial_cons ); +configure_terminals( int serial_cons ) +{ + //struct stat statbuf; + char *tty; + + switch (serial_cons) { + case 1: + strcpy( console, "/dev/ttyS0" ); + break; + case 2: + strcpy( console, "/dev/ttyS1" ); + break; + default: + tty = ttyname(0); + if (tty) { + strcpy( console, tty ); + if (!strncmp( tty, "/dev/ttyS", 9 )) + serial_cons=1; + } + else + /* falls back to /dev/tty1 if an error occurs */ + strcpy( console, default_console ); + } + if (!first_terminal) + first_terminal = console; + if (serial_cons && !strncmp(term_ptr,"TERM=linux",10)) + term_ptr = "TERM=vt100"; +} extern int init_main(int argc, char * * argv) { - static const char * const rc = "etc/rc"; - const char * arguments[100]; - int run_rc = 1; - int j; - int pid1 = 0; - int pid2 = 0; - int create_swap= -1; - struct stat statbuf; -#ifndef INCLUDE_DINSTALL - const char * tty_commands[2] = { "bin/sh", "bin/sh"}; -#else - const char * tty_commands[2] = { "sbin/dinstall", "bin/sh"}; -#endif - char swap[20]; - int serial_console = 0; + static const char* const rc = "etc/rc"; + const char * arguments[100]; + int run_rc = 1; + int j; + int pid1 = 0; + int pid2 = 0; + int create_swap= -1; + struct stat statbuf; + const char * tty_commands[2] = { "bin/sh", "bin/sh"}; + char swap[20]; + int serial_console = 0; /* * If I am started as /linuxrc instead of /sbin/init, I don't have the @@ -330,17 +351,13 @@ init_main(int argc, char * * argv) set_free_pages(); - if (mem_total() < 3500) { /* not enough memory for standard install */ + /* not enough memory to do anything useful*/ + if (mem_total() < 2000) { int retval; retval= stat("/etc/swappartition",&statbuf); if (retval) { - printf(" -You do not have enough RAM, hence you must boot using the Boot Disk -for Low Memory systems. - -Read the instructions in the install.html file. -"); - while (1) {;} + printf("You do not have enough RAM, sorry.\n"); + while (1) { sleep(1);} } else { /* everything OK */ FILE *f; @@ -371,8 +388,13 @@ Read the instructions in the install.html file. arguments[j] = 0; if ( run_rc ) { - printf("running %s\n",rc); + printf("running %s with args \"",rc); + for ( j = 0; j < argc; j++ ) { + printf("%s ", arguments[j]); + } + printf("\" on console %s\n", console); waitfor(run(rc, arguments, console, 0)); + printf("done.\n"); } if ( 0 == create_swap) { @@ -392,10 +414,21 @@ Read the instructions in the install.html file. /* arguments[0] = tty_commands[0]; */ - pid1 = run(tty_commands[0], arguments, first_terminal, 0); + printf("running %s with args \"",tty_commands[0]); + for ( j = 0; j < argc; j++ ) { + printf("%s ", arguments[j]); + } + printf("\" on console %s\n", first_terminal); + pid1 = run(tty_commands[0], arguments, first_terminal, 1); } - if ( pid2 == 0 && tty_commands[1] ) + if ( pid2 == 0 && tty_commands[1] ) { + printf("running %s with args \"",tty_commands[0]); + for ( j = 0; j < argc; j++ ) { + printf("%s ", arguments[j]); + } + printf("\" on console %s\n", first_terminal); pid2 = run(tty_commands[1], arguments, second_terminal, 1); + } wpid = wait(&status); if ( wpid > 0 ) { /* DEBUGGING */ @@ -409,32 +442,3 @@ Read the instructions in the install.html file. } } -void -configure_terminals( int serial_cons ) -{ - //struct stat statbuf; - char *tty; - - switch (serial_cons) { - case 1: - strcpy( console, "/dev/ttyS0" ); - break; - case 2: - strcpy( console, "/dev/ttyS1" ); - break; - default: - tty = ttyname(0); - if (tty) { - strcpy( console, tty ); - if (!strncmp( tty, "/dev/ttyS", 9 )) - serial_cons=1; - } - else - /* falls back to /dev/tty1 if an error occurs */ - strcpy( console, default_console ); - } - if (!first_terminal) - first_terminal = console; - if (serial_cons && !strncmp(term_ptr,"TERM=linux",10)) - term_ptr = "TERM=vt100"; -} diff --git a/init/init.c b/init/init.c index 2860272f9..19cbec130 100644 --- a/init/init.c +++ b/init/init.c @@ -66,11 +66,8 @@ waitfor(int pid) } static int -run( - const char * program -,const char * const * arguments -,const char * terminal -,int get_enter) +run(const char* program, const char* const* arguments, + const char* terminal, int get_enter) { static const char control_characters[] = { '\003', @@ -137,7 +134,8 @@ run( * before the user wants it. This is critical if swap is not * enabled and the system has low memory. Generally this will * be run on the second virtual console, and the first will - * be allowed to start a shell or the installation system. + * be allowed to start a shell or whatever an init script + * specifies. */ char c; write(1, press_enter, sizeof(press_enter) - 1); @@ -246,26 +244,49 @@ exit_signal(int sig) } void -configure_terminals( int serial_cons ); +configure_terminals( int serial_cons ) +{ + //struct stat statbuf; + char *tty; + + switch (serial_cons) { + case 1: + strcpy( console, "/dev/ttyS0" ); + break; + case 2: + strcpy( console, "/dev/ttyS1" ); + break; + default: + tty = ttyname(0); + if (tty) { + strcpy( console, tty ); + if (!strncmp( tty, "/dev/ttyS", 9 )) + serial_cons=1; + } + else + /* falls back to /dev/tty1 if an error occurs */ + strcpy( console, default_console ); + } + if (!first_terminal) + first_terminal = console; + if (serial_cons && !strncmp(term_ptr,"TERM=linux",10)) + term_ptr = "TERM=vt100"; +} extern int init_main(int argc, char * * argv) { - static const char * const rc = "etc/rc"; - const char * arguments[100]; - int run_rc = 1; - int j; - int pid1 = 0; - int pid2 = 0; - int create_swap= -1; - struct stat statbuf; -#ifndef INCLUDE_DINSTALL - const char * tty_commands[2] = { "bin/sh", "bin/sh"}; -#else - const char * tty_commands[2] = { "sbin/dinstall", "bin/sh"}; -#endif - char swap[20]; - int serial_console = 0; + static const char* const rc = "etc/rc"; + const char * arguments[100]; + int run_rc = 1; + int j; + int pid1 = 0; + int pid2 = 0; + int create_swap= -1; + struct stat statbuf; + const char * tty_commands[2] = { "bin/sh", "bin/sh"}; + char swap[20]; + int serial_console = 0; /* * If I am started as /linuxrc instead of /sbin/init, I don't have the @@ -330,17 +351,13 @@ init_main(int argc, char * * argv) set_free_pages(); - if (mem_total() < 3500) { /* not enough memory for standard install */ + /* not enough memory to do anything useful*/ + if (mem_total() < 2000) { int retval; retval= stat("/etc/swappartition",&statbuf); if (retval) { - printf(" -You do not have enough RAM, hence you must boot using the Boot Disk -for Low Memory systems. - -Read the instructions in the install.html file. -"); - while (1) {;} + printf("You do not have enough RAM, sorry.\n"); + while (1) { sleep(1);} } else { /* everything OK */ FILE *f; @@ -371,8 +388,13 @@ Read the instructions in the install.html file. arguments[j] = 0; if ( run_rc ) { - printf("running %s\n",rc); + printf("running %s with args \"",rc); + for ( j = 0; j < argc; j++ ) { + printf("%s ", arguments[j]); + } + printf("\" on console %s\n", console); waitfor(run(rc, arguments, console, 0)); + printf("done.\n"); } if ( 0 == create_swap) { @@ -392,10 +414,21 @@ Read the instructions in the install.html file. /* arguments[0] = tty_commands[0]; */ - pid1 = run(tty_commands[0], arguments, first_terminal, 0); + printf("running %s with args \"",tty_commands[0]); + for ( j = 0; j < argc; j++ ) { + printf("%s ", arguments[j]); + } + printf("\" on console %s\n", first_terminal); + pid1 = run(tty_commands[0], arguments, first_terminal, 1); } - if ( pid2 == 0 && tty_commands[1] ) + if ( pid2 == 0 && tty_commands[1] ) { + printf("running %s with args \"",tty_commands[0]); + for ( j = 0; j < argc; j++ ) { + printf("%s ", arguments[j]); + } + printf("\" on console %s\n", first_terminal); pid2 = run(tty_commands[1], arguments, second_terminal, 1); + } wpid = wait(&status); if ( wpid > 0 ) { /* DEBUGGING */ @@ -409,32 +442,3 @@ Read the instructions in the install.html file. } } -void -configure_terminals( int serial_cons ) -{ - //struct stat statbuf; - char *tty; - - switch (serial_cons) { - case 1: - strcpy( console, "/dev/ttyS0" ); - break; - case 2: - strcpy( console, "/dev/ttyS1" ); - break; - default: - tty = ttyname(0); - if (tty) { - strcpy( console, tty ); - if (!strncmp( tty, "/dev/ttyS", 9 )) - serial_cons=1; - } - else - /* falls back to /dev/tty1 if an error occurs */ - strcpy( console, default_console ); - } - if (!first_terminal) - first_terminal = console; - if (serial_cons && !strncmp(term_ptr,"TERM=linux",10)) - term_ptr = "TERM=vt100"; -} diff --git a/ls.c b/ls.c index 7a1b0f3d0..50b983e24 100644 --- a/ls.c +++ b/ls.c @@ -179,15 +179,13 @@ int ls_main(int argc, char **argv) #define FEATURE_AUTOWIDTH /* calculate terminal & column widths */ #define FEATURE_FILETYPECHAR /* enable -p and -F */ -#undef OP_BUF_SIZE 1024 /* leave undefined for unbuffered output */ - #define TERMINAL_WIDTH 80 /* use 79 if your terminal has linefold bug */ #define COLUMN_WIDTH 14 /* default if AUTOWIDTH not defined */ #define COLUMN_GAP 2 /* includes the file type char, if present */ +#define HAS_REWINDDIR /************************************************************************/ -#define HAS_REWINDDIR #if 1 /* FIXME libc 6 */ # include diff --git a/mount.c b/mount.c index 4e5c0745b..d7b2682ce 100644 --- a/mount.c +++ b/mount.c @@ -190,7 +190,7 @@ extern int mount_main (int argc, char **argv) } endmntent (mountTable); } - return( TRUE); + exit( TRUE); } @@ -203,7 +203,7 @@ extern int mount_main (int argc, char **argv) case 'o': if (--i == 0) { fprintf (stderr, "%s\n", mount_usage); - return( FALSE); + exit( FALSE); } parse_mount_options (*(++argv), &flags, string_flags); --i; @@ -215,7 +215,7 @@ extern int mount_main (int argc, char **argv) case 't': if (--i == 0) { fprintf (stderr, "%s\n", mount_usage); - return( FALSE); + exit( FALSE); } filesystemType = *(++argv); --i; @@ -231,7 +231,7 @@ extern int mount_main (int argc, char **argv) case 'h': case '-': fprintf (stderr, "%s\n", mount_usage); - return( TRUE); + exit( TRUE); break; } } else { @@ -241,7 +241,7 @@ extern int mount_main (int argc, char **argv) directory=*argv; else { fprintf (stderr, "%s\n", mount_usage); - return( TRUE); + exit( TRUE); } } i--; @@ -254,7 +254,7 @@ extern int mount_main (int argc, char **argv) if (f == NULL) { perror("/etc/fstab"); - return( FALSE); + exit( FALSE); } while ((m = getmntent (f)) != NULL) { // If the file system isn't noauto, and isn't mounted on /, mount @@ -270,12 +270,12 @@ extern int mount_main (int argc, char **argv) endmntent (f); } else { if (device && directory) { - return (mount_one (device, directory, filesystemType, + exit (mount_one (device, directory, filesystemType, flags, string_flags)); } else { fprintf (stderr, "%s\n", mount_usage); - return( FALSE); + exit( FALSE); } } - return( TRUE); + exit( TRUE); } diff --git a/umount.c b/umount.c index 5274e2f6f..04cd8a080 100644 --- a/umount.c +++ b/umount.c @@ -69,7 +69,7 @@ umount_main(int argc, char * * argv) if (argc < 2) { fprintf(stderr, "Usage: %s", umount_usage); - return(FALSE); + exit(FALSE); } argc--; argv++; @@ -78,7 +78,7 @@ umount_main(int argc, char * * argv) while (**argv == '-') { while (*++(*argv)) switch (**argv) { case 'a': - return umount_all(); + exit ( umount_all() ); break; default: fprintf(stderr, "Usage: %s\n", umount_usage); @@ -86,10 +86,10 @@ umount_main(int argc, char * * argv) } } if ( umount(*argv) == 0 ) - return (TRUE); + exit (TRUE); else { perror("umount"); - return( FALSE); + exit( FALSE); } } diff --git a/util-linux/mount.c b/util-linux/mount.c index 4e5c0745b..d7b2682ce 100644 --- a/util-linux/mount.c +++ b/util-linux/mount.c @@ -190,7 +190,7 @@ extern int mount_main (int argc, char **argv) } endmntent (mountTable); } - return( TRUE); + exit( TRUE); } @@ -203,7 +203,7 @@ extern int mount_main (int argc, char **argv) case 'o': if (--i == 0) { fprintf (stderr, "%s\n", mount_usage); - return( FALSE); + exit( FALSE); } parse_mount_options (*(++argv), &flags, string_flags); --i; @@ -215,7 +215,7 @@ extern int mount_main (int argc, char **argv) case 't': if (--i == 0) { fprintf (stderr, "%s\n", mount_usage); - return( FALSE); + exit( FALSE); } filesystemType = *(++argv); --i; @@ -231,7 +231,7 @@ extern int mount_main (int argc, char **argv) case 'h': case '-': fprintf (stderr, "%s\n", mount_usage); - return( TRUE); + exit( TRUE); break; } } else { @@ -241,7 +241,7 @@ extern int mount_main (int argc, char **argv) directory=*argv; else { fprintf (stderr, "%s\n", mount_usage); - return( TRUE); + exit( TRUE); } } i--; @@ -254,7 +254,7 @@ extern int mount_main (int argc, char **argv) if (f == NULL) { perror("/etc/fstab"); - return( FALSE); + exit( FALSE); } while ((m = getmntent (f)) != NULL) { // If the file system isn't noauto, and isn't mounted on /, mount @@ -270,12 +270,12 @@ extern int mount_main (int argc, char **argv) endmntent (f); } else { if (device && directory) { - return (mount_one (device, directory, filesystemType, + exit (mount_one (device, directory, filesystemType, flags, string_flags)); } else { fprintf (stderr, "%s\n", mount_usage); - return( FALSE); + exit( FALSE); } } - return( TRUE); + exit( TRUE); } diff --git a/util-linux/umount.c b/util-linux/umount.c index 5274e2f6f..04cd8a080 100644 --- a/util-linux/umount.c +++ b/util-linux/umount.c @@ -69,7 +69,7 @@ umount_main(int argc, char * * argv) if (argc < 2) { fprintf(stderr, "Usage: %s", umount_usage); - return(FALSE); + exit(FALSE); } argc--; argv++; @@ -78,7 +78,7 @@ umount_main(int argc, char * * argv) while (**argv == '-') { while (*++(*argv)) switch (**argv) { case 'a': - return umount_all(); + exit ( umount_all() ); break; default: fprintf(stderr, "Usage: %s\n", umount_usage); @@ -86,10 +86,10 @@ umount_main(int argc, char * * argv) } } if ( umount(*argv) == 0 ) - return (TRUE); + exit (TRUE); else { perror("umount"); - return( FALSE); + exit( FALSE); } } diff --git a/utility.c b/utility.c index b2228f0cb..cf90f37d1 100644 --- a/utility.c +++ b/utility.c @@ -58,9 +58,8 @@ int isDirectory(const char *name) * be set.) */ int -copyFile( - const char *srcName, - const char *destName, int setModes, int followLinks) +copyFile( const char *srcName, const char *destName, + int setModes, int followLinks) { int rfd; int wfd; @@ -75,7 +74,6 @@ copyFile( result = stat(srcName, &srcStatBuf); else result = lstat(srcName, &srcStatBuf); - if (result < 0) { perror(srcName); return FALSE; @@ -115,7 +113,8 @@ copyFile( return (FALSE); } link_val[link_size] = '\0'; - if (symlink(link_val, destName)) { + link_size = symlink(link_val, destName); + if (link_size != 0) { perror(destName); return (FALSE); } @@ -179,7 +178,6 @@ copyFile( error_exit: - //fprintf(stderr, "choking on %s\n", destName); perror(destName); close(rfd); close(wfd); @@ -476,10 +474,11 @@ recursiveAction(const char *fileName, int recurse, int followLinks, struct stat statbuf; struct dirent *next; - if (followLinks) - status = lstat(fileName, &statbuf); - else + if (followLinks == FALSE) status = stat(fileName, &statbuf); + else + status = lstat(fileName, &statbuf); + if (status < 0) { perror(fileName); return (FALSE); @@ -487,16 +486,11 @@ recursiveAction(const char *fileName, int recurse, int followLinks, if (recurse == FALSE) { if (S_ISDIR(statbuf.st_mode)) { - if (dirAction == NULL) - return (TRUE); - else + if (dirAction != NULL) return (dirAction(fileName)); - } else { - if (fileAction == NULL) - return (TRUE); else - return (fileAction(fileName)); - } + return (TRUE); + } } if (S_ISDIR(statbuf.st_mode)) {