diff -urN fileutils-4.1.old/src/rm.c fileutils-4.1/src/rm.c --- fileutils-4.1.old/src/rm.c Sun Nov 24 15:46:40 2002 +++ fileutils-4.1/src/rm.c Sun Nov 24 15:46:07 2002 @@ -60,7 +60,21 @@ #define AUTHORS \ "Paul Rubin, David MacKenzie, Richard Stallman, and Jim Meyering" -void strip_trailing_slashes (); +char * +strip_trailing_slashes (char * name) { + int origlen = sizeof (name); + int newlen = origlen; + while ((name [newlen-1] == '/') + || ((name [newlen-1] == '.') && (name [newlen-2] == '/'))) { + if (name [newlen-1] == '.') + newlen--; + newlen--; + } + if (newlen != origlen) { + name [newlen] = '\0' + } + return name; +} /* Name this program was run with. */ char *program_name; @@ -131,6 +145,7 @@ struct rm_options x; int fail = 0; int c; + char * name; program_name = argv[0]; setlocale (LC_ALL, ""); @@ -192,12 +207,16 @@ /* Stripping slashes is harmless for rmdir; if the arg is not a directory, it will fail with ENOTDIR. */ - strip_trailing_slashes (argv[optind]); - fspec_init_file (&fs, argv[optind]); - status = rm (&fs, 1, &x); - assert (VALID_STATUS (status)); - if (status == RM_ERROR) - fail = 1; + name = strip_trailing_slashes (argv[optind]); + if (name == NULL) + fail = 1; + else { + fspec_init_file (&fs, name); + status = rm (&fs, 1, &x); + assert (VALID_STATUS (status)); + if (status == RM_ERROR) + fail = 1; + } } remove_fini ();