Fixed cp -[aR] and some other stuf.
authorEric Andersen <andersen@codepoet.org>
Thu, 14 Oct 1999 22:16:57 +0000 (22:16 -0000)
committerEric Andersen <andersen@codepoet.org>
Thu, 14 Oct 1999 22:16:57 +0000 (22:16 -0000)
12 files changed:
Makefile
coreutils/cp.c
coreutils/ls.c
cp.c
init.c
init/init.c
ls.c
mount.c
umount.c
util-linux/mount.c
util-linux/umount.c
utility.c

index 59d648512d088317616fd9318ce4366a4a8cb0ab..3069c0711c07092522f3a533c78cbd98f6276a9b 100644 (file)
--- 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/'`
index 94b4ab024010ff324e6fa7a8ec6f94cfaa586f89..6ca66e642c8a14a75b50c021c2f442299f803d3b 100644 (file)
@@ -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);
 }
index 7a1b0f3d09db190bc1f8b83a9b84ac18ce936b99..50b983e240040564635149cd3d97a16d79a15192 100644 (file)
@@ -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> 
diff --git a/cp.c b/cp.c
index 94b4ab024010ff324e6fa7a8ec6f94cfaa586f89..6ca66e642c8a14a75b50c021c2f442299f803d3b 100644 (file)
--- 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 2860272f9c6e8e7251175d487afee635dba005c4..19cbec1307eef3a7adaad9147018b1815c875291 100644 (file)
--- 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";
-}
index 2860272f9c6e8e7251175d487afee635dba005c4..19cbec1307eef3a7adaad9147018b1815c875291 100644 (file)
@@ -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 7a1b0f3d09db190bc1f8b83a9b84ac18ce936b99..50b983e240040564635149cd3d97a16d79a15192 100644 (file)
--- 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 <linux/types.h> 
diff --git a/mount.c b/mount.c
index 4e5c0745bab8ace66c6c579896c5b492c2310a0d..d7b2682ced75076eb1fe71b58774e59ad367ba90 100644 (file)
--- 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);
 }
index 5274e2f6fc84de40a3aafba75f8402600f03bc48..04cd8a080815e9a80b3e3bd3031068656d0ecedd 100644 (file)
--- 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);
     }
 }
 
index 4e5c0745bab8ace66c6c579896c5b492c2310a0d..d7b2682ced75076eb1fe71b58774e59ad367ba90 100644 (file)
@@ -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);
 }
index 5274e2f6fc84de40a3aafba75f8402600f03bc48..04cd8a080815e9a80b3e3bd3031068656d0ecedd 100644 (file)
@@ -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);
     }
 }
 
index b2228f0cb37422ab4517e5a9b265e2dd1b825661..cf90f37d17cb178b04657969b44a86fab63472f3 100644 (file)
--- 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)) {