* ar.c (full_pathname): New static variable.
authorIan Lance Taylor <ian@airs.com>
Sun, 12 Sep 1999 17:34:19 +0000 (17:34 +0000)
committerIan Lance Taylor <ian@airs.com>
Sun, 12 Sep 1999 17:34:19 +0000 (17:34 +0000)
(map_over_members): Call normalize on command line parameter.
(usage): Mention P modifier.
(normalize): If full_pathname is true, don't do anything.
(main): Accept P modifier.
* binutils.texi, ar.1: Document P modifier.

binutils/ChangeLog
binutils/ar.1
binutils/ar.c
binutils/binutils.texi

index 1347578..ce2dede 100644 (file)
@@ -1,3 +1,12 @@
+1999-09-12  Ian Lance Taylor  <ian@zembu.com>
+
+       * ar.c (full_pathname): New static variable.
+       (map_over_members): Call normalize on command line parameter.
+       (usage): Mention P modifier.
+       (normalize): If full_pathname is true, don't do anything.
+       (main): Accept P modifier.
+       * binutils.texi, ar.1: Document P modifier.
+
 1999-09-09  Andreas Schwab  <schwab@suse.de>
 
        * binutils.texi: Add info dir entries for all programs described
index e4e8cff..5a9a9d5 100644 (file)
@@ -1,6 +1,6 @@
-.\" Copyright (c) 1991 Free Software Foundation
+.\" Copyright (c) 1991, 1992, 1993, 1995, 1998, 1999 Free Software Foundation
 .\" See section COPYING for conditions for redistribution
-.TH ar 1 "5 November 1991" "cygnus support" "GNU Development Tools"
+.TH ar 1 "1999" "Cygnus Solutions" "GNU Development Tools"
 .de BP
 .sp
 .ti \-.2i
@@ -385,6 +385,18 @@ modifier may be used to truncate file names when putting them in the
 archive.
 
 .TP
+.B P
+Use the full path name when matching names in the archive.
+.B ar
+can not create an archive with a full path name (such archives are not
+POSIX complaint), but other archive creators can.  This option will
+cause
+.B ar
+to match file names using a complete path name, which can be
+convenient when extracting a single file from an archive created by
+another tool.
+
+.TP
 .B i
 Insert new files \c
 .I before\c
@@ -491,7 +503,7 @@ The GNU Binary Utilities\c
 \&.
 
 .SH COPYING
-Copyright (c) 1991 Free Software Foundation, Inc.
+Copyright (c) 1991, 1992, 1993, 1995, 1998, 1999 Free Software Foundation, Inc.
 .PP
 Permission is granted to make and distribute verbatim copies of
 this manual provided the copyright notice and this permission notice
index 3e9dcef..fa89f30 100644 (file)
@@ -150,6 +150,11 @@ get_pos_bfd PARAMS ((bfd **, enum pos, const char *));
 /* Whether to truncate names of files stored in the archive.  */
 static boolean ar_truncate = false;
 
+/* Whether to use a full file name match when searching an archive.
+   This is convenient for archives created by the Microsoft lib
+   program.  */
+static boolean full_pathname = false;
+
 int interactive = 0;
 
 static void
@@ -202,7 +207,7 @@ map_over_members (arch, function, files, count)
              bfd_stat_arch_elt (head, &buf);
            }
          if ((head->filename != NULL) &&
-             (!strcmp (*files, head->filename)))
+             (!strcmp (normalize (*files, arch), head->filename)))
            {
              found = true;
              function (head);
@@ -242,6 +247,7 @@ usage (help)
       fprintf (s, _("  [a]          - put file(s) after [member-name]\n"));
       fprintf (s, _("  [b]          - put file(s) before [member-name] (same as [i])\n"));
       fprintf (s, _("  [f]          - truncate inserted file names\n"));
+      fprintf (s, _("  [P]          - use full path names when matching\n"));
       fprintf (s, _("  [o]          - preserve original dates\n"));
       fprintf (s, _("  [u]          - only replace files that are newer than current archive contents\n"));
       fprintf (s, _(" generic modifiers:\n"));
@@ -273,6 +279,9 @@ normalize (file, abfd)
 {
   const char *filename;
 
+  if (full_pathname)
+    return filename;
+
   filename = strrchr (file, '/');
   if (filename != (char *) NULL)
     filename++;
@@ -501,6 +510,9 @@ main (argc, argv)
        case 'f':
          ar_truncate = true;
          break;
+       case 'P':
+         full_pathname = true;
+         break;
        default:
          /* xgettext:c-format */
          fprintf (stderr, _("%s: illegal option -- %c\n"), program_name, c);
index ddef706..b2a3129 100644 (file)
@@ -387,6 +387,14 @@ not compatible with the native @code{ar} program on some systems.  If
 this is a concern, the @samp{f} modifier may be used to truncate file
 names when putting them in the archive.
 
+@item P
+Use the full path name when matching names in the archive.  @sc{gnu}
+@code{ar} can not create an archive with a full path name (such archives
+are not POSIX complaint), but other archive creators can.  This option
+will cause @sc{gnu} @code{ar} to match file names using a complete path
+name, which can be convenient when extracting a single file from an
+archive created by another tool.
+
 @item i
 Insert new files @emph{before} an existing member of the
 archive.  If you use the modifier @samp{i}, the name of an existing archive