X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=binutils%2Farsup.c;h=1e864793955ff9ce5dda92765a09f6bedebaf6e2;hb=8b53311e1054be6e53e1ccef58c3402b066b6f53;hp=d6809fc47497a652fcfaf6fade10a4a9ef32613e;hpb=dc9e099fc0eced486ae2b49455c9da113c11f4ff;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/arsup.c b/binutils/arsup.c index d6809fc474..1e86479395 100644 --- a/binutils/arsup.c +++ b/binutils/arsup.c @@ -1,5 +1,5 @@ /* arsup.c - Archive support for MRI compatibility - Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 1999 + Copyright 1992, 1994, 1995, 1996, 1997, 2000 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -31,6 +31,7 @@ style librarian command syntax + 1 word LIST #include "arsup.h" #include "libiberty.h" #include "bucomm.h" +#include "filenames.h" static void map_over_list PARAMS ((bfd *, void (*function) (bfd *, bfd *), struct list *)); @@ -76,7 +77,7 @@ map_over_list (arch, function, list) for (head = arch->next; head; head = head->next) { if (head->filename != NULL - && strcmp (ptr->name, head->filename) == 0) + && FILENAME_CMP (ptr->name, head->filename) == 0) { found = true; function (head, prev); @@ -159,8 +160,11 @@ DEFUN(ar_open,(name, t), { char *tname = (char *) xmalloc (strlen (name) + 10); + const char *bname = lbasename (name); real_name = name; - sprintf(tname, "%s-tmp", name); + /* Prepend tmp- to the beginning, to avoid file-name clashes after + truncation on filesystems with limited namespaces (DOS). */ + sprintf(tname, "%.*stmp-%s", (int) (bname - name), name, bname); obfd = bfd_openw(tname, NULL); if (!obfd) { @@ -289,7 +293,7 @@ DEFUN(ar_delete, (list), bfd **prev = &(obfd->archive_head); int found = 0; while (member) { - if (strcmp(member->filename, list->name) == 0) { + if (FILENAME_CMP(member->filename, list->name) == 0) { *prev = member->next; found = 1; } @@ -346,7 +350,7 @@ DEFUN(ar_replace, (list), int found = 0; while (member) { - if (strcmp(member->filename, list->name) == 0) + if (FILENAME_CMP(member->filename, list->name) == 0) { /* Found the one to replace */ bfd *abfd = bfd_openr(list->name, 0); @@ -437,7 +441,7 @@ DEFUN(ar_extract,(list), int found = 0; while (member && !found) { - if (strcmp(member->filename, list->name) == 0) + if (FILENAME_CMP(member->filename, list->name) == 0) { extract_file(member); found = 1;