bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fwd: basename/dirname // patch resubmit


From: Jim Meyering
Subject: Re: Fwd: basename/dirname // patch resubmit
Date: Sun, 26 Mar 2006 16:08:26 +0200

Eric Blake <address@hidden> wrote:
> ChangeLog:
> 2006-03-11  Eric Blake  <address@hidden>
>
>       * tests/misc/dirname: New file.
>       * tests/basename/Makefile.am: Delete.
>       * tests/basename/basic: Move to...
>       * tests/misc/basename: ... this new file.  Add some tests,
>       including fixed behavior for //.
>       * tests/misc/Makefile.am (TESTS): Sort.  Add basename, dirname.
>       * tests/Makefile.am (SUBDIRS): Remove basename.
>       * configure.ac (AC_CONFIG_FILES): Remove tests/basename.
>
>       Improvements to dirname/basename handling on platforms like
>       cygwin with distinct // and with drive letters.
>       * NEWS: Document new behavior.
>       * src/basename.c (main): Don't strip suffix from file system
>       roots.
>       * src/cp.c (target_directory_operand): Use new last_component.
>       (ASSIGN_BASENAME_STRDUPA): Likewise.  Reduce time spent
>       traversing the string.
>       * src/dircolors.c (guess_shell_syntax): Use new last_component.
>       * src/install.c (target_directory_operand, install_file_in_dir):
>       Likewise.
>       * src/ln.c (target_directory_operand, main): Likewise.
>       * src/ls.c (basename_is_dot_or_dotdot): Likewise.
>       * src/mv.c (target_directory_operand, movefile): Likewise.
>       * src/remove.c (rm_1): Likewise.
>       * src/shred.c (wipename): Likewise.
>       * src/split.c (next_file_name): Likewise.
>       * src/su.c (log_su, run_shell): Likewise.
>
> doc/ChangeLog:
> 2006-03-11  Eric Blake  <address@hidden>
>
>       * coreutils.texi (basename invocation, dirname invocation):
>       Improve documentation to match recent // patches.
>
> m4/ChangeLog:
> 2006-03-11  Eric Blake  <address@hidden>
>
>       * double-slash-root.m4: New file, provides gl_DOUBLE_SLASH_ROOT.
>       * dirname.m4 (gl_DIRNAME): Use gl_DOUBLE_SLASH_ROOT.
>       * dos.m4 (FILE_SYSTEM_PREFIX_LEN): Move from here to dirname.h.
>       (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE): New define.
>
> lib/ChangeLog:
> 2006-03-11  Eric Blake  <address@hidden>
>
>       * backupfile.c (check_extension, numbered_backup): Adjust to
>       changed semantics in dirname module.
>       * filenamecat.c (file_name_concat): Ditto.
>       * same.c (same_name): Ditto.
>
> 2006-03-11  Eric Blake  <address@hidden>,
>           Paul Eggert  <address@hidden>
>
>       * dirname.h (FILE_SYSTEM_PREFIX_LEN): Move here from dos.m4.
>       [FILE_SYSTEM_ACCEPTS_DRIVE_LETTER_PREFIX]: Don't treat 1: as a
>       drive prefix.
>       (IS_ABSOLUTE_FILE_NAME): Treat all drive letters as absolute on
>       platforms like cygwin with FILE_SYSTEM_DRIVE_PREFIX_IS_ABSOLUTE.
>       (last_component): New method.
>       * dirname.c (dir_len): Determine when drive letters need a
>       subsequent slash.  Preserve // when it is special.
>       (dir_name): Don't append dot when drive letter is absolute.
>       [TEST_DIRNAME]: Move into a full-blown gnulib test.
>       * basename.c (base_name): New semantics - malloc the result.
>       Preserve // when it is special.  Preserve relative files that look
>       like drive letters.
>       (base_len): Preserve // when it is special.
>       (last_component): New method, similar to old base_name semantics.
>       * stripslash.c (strip_trailing_slashes): Use last_component, not
>       base_name.  Strip redundant slashes from ///.

I've applied that.  Thank you.

Some minor changes I made in the process:
  - spell `file names' with a space so `make check' passes.
  - use a macro to avoid duplicating the two paragraphs shared
      by the basename and dirname sections in coreutils.texi

Regarding your cp.c change, I've adjusted it to do what your
ChangeLog entry suggests you intended.
There's no point in traversing the entire File_name copy, when
all we want to do is remove any trailing slashes in the result:

--- cp.c~       2006-03-26 11:02:42.000000000 +0200
+++ cp.c        2006-03-26 12:01:23.000000000 +0200
@@ -43,7 +43,7 @@
       char *tmp_abns_;                                 \
       ASSIGN_STRDUPA (tmp_abns_, (File_name));         \
       Dest = last_component (tmp_abns_);               \
-      strip_trailing_slashes (tmp_abns_);              \
+      strip_trailing_slashes (Dest);                   \
     }                                                  \
   while (0)
 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]