From fe84ea5db28793a9ec7bc78962f0c67afab54c59 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sun, 12 Sep 1999 17:34:19 +0000 Subject: [PATCH] * 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. --- binutils/ChangeLog | 9 +++++++++ binutils/ar.1 | 18 +++++++++++++++--- binutils/ar.c | 14 +++++++++++++- binutils/binutils.texi | 8 ++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 1347578afec..ce2dede8710 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,12 @@ +1999-09-12 Ian Lance Taylor + + * 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 * binutils.texi: Add info dir entries for all programs described diff --git a/binutils/ar.1 b/binutils/ar.1 index e4e8cff8134..5a9a9d56d7e 100644 --- a/binutils/ar.1 +++ b/binutils/ar.1 @@ -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 @@ -384,6 +384,18 @@ program on some systems. If this is a concern, the 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 @@ -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 diff --git a/binutils/ar.c b/binutils/ar.c index 3e9dcefd92d..fa89f300c8a 100644 --- a/binutils/ar.c +++ b/binutils/ar.c @@ -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); diff --git a/binutils/binutils.texi b/binutils/binutils.texi index ddef7065bca..b2a31298257 100644 --- a/binutils/binutils.texi +++ b/binutils/binutils.texi @@ -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 -- 2.30.2