Fixed cp -[aR] and some other stuf.
No binary (build failed)
—
(log yok)
| @@ -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/'` | |
| @@ -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); | |
| } | |
| @@ -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 <linux/types.h> | |
| @@ -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); | |
| } | |
| @@ -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"; |
| - | } |
| @@ -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"; |
| - | } |
| @@ -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 <linux/types.h> | |
| @@ -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); |
| } | |
| @@ -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); |
| } | |
| } | |
| @@ -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); |
| } | |
| @@ -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); |
| } | |
| } | |
| @@ -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)) { | |