diff options
author | 2000-09-12 19:10:55 +0000 | |
---|---|---|
committer | 2000-09-12 19:10:55 +0000 | |
commit | b305b0f1cb8417acb9d6ca66ca17b05cf1dc8fc9 (patch) | |
tree | 37a8ca7fd873738d323b065cd95ae8891146635c /gnu/usr.bin/binutils/gprof/source.c | |
parent | o add missing getsid() prototype (diff) | |
download | wireguard-openbsd-b305b0f1cb8417acb9d6ca66ca17b05cf1dc8fc9.tar.xz wireguard-openbsd-b305b0f1cb8417acb9d6ca66ca17b05cf1dc8fc9.zip |
Help stupid cvs fixing basic conflicts.
Diffstat (limited to 'gnu/usr.bin/binutils/gprof/source.c')
-rw-r--r-- | gnu/usr.bin/binutils/gprof/source.c | 52 |
1 files changed, 47 insertions, 5 deletions
diff --git a/gnu/usr.bin/binutils/gprof/source.c b/gnu/usr.bin/binutils/gprof/source.c index 4421e3f757e..039e8760138 100644 --- a/gnu/usr.bin/binutils/gprof/source.c +++ b/gnu/usr.bin/binutils/gprof/source.c @@ -3,6 +3,7 @@ */ #include "gprof.h" #include "libiberty.h" +#include "filenames.h" #include "search_list.h" #include "source.h" @@ -25,7 +26,7 @@ DEFUN (source_file_lookup_path, (path), const char *path) for (sf = first_src_file; sf; sf = sf->next) { - if (strcmp (path, sf->name) == 0) + if (FILENAME_CMP (path, sf->name) == 0) { break; } @@ -66,7 +67,7 @@ DEFUN (source_file_lookup_name, (filename), const char *filename) { fname = sf->name; } - if (strcmp (filename, fname) == 0) + if (FILENAME_CMP (filename, fname) == 0) { break; } @@ -95,7 +96,7 @@ DEFUN (annotate_source, (sf, max_width, annote, arg), * open succeeds or reaching end of list: */ strcpy (fname, sf->name); - if (sf->name[0] == '/') + if (IS_ABSOLUTE_PATH (sf->name)) { sle = 0; /* don't use search list for absolute paths */ } @@ -112,6 +113,15 @@ DEFUN (annotate_source, (sf, max_width, annote, arg), if (!sle && !name_only) { name_only = strrchr (sf->name, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *bslash = strrchr (sf->name, '\\'); + if (bslash > name_only) + name_only = bslash; + if (name_only == NULL && sf->name[0] != '\0' && sf->name[1] == ':') + name_only = (char *)sf->name + 1; + } +#endif if (name_only) { /* try search-list again, but this time with name only: */ @@ -122,6 +132,11 @@ DEFUN (annotate_source, (sf, max_width, annote, arg), if (sle) { strcpy (fname, sle->path); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + /* d:foo is not the same thing as d:/foo! */ + if (fname[strlen (fname) - 1] == ':') + strcat (fname, "."); +#endif strcat (fname, "/"); if (name_only) { @@ -137,7 +152,7 @@ DEFUN (annotate_source, (sf, max_width, annote, arg), { if (errno == ENOENT) { - fprintf (stderr, "%s: could not locate `%s'\n", + fprintf (stderr, _("%s: could not locate `%s'\n"), whoami, sf->name); } else @@ -156,6 +171,15 @@ DEFUN (annotate_source, (sf, max_width, annote, arg), /* create annotation files in the current working directory: */ filename = strrchr (sf->name, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *bslash = strrchr (sf->name, '\\'); + if (bslash > filename) + filename = bslash; + if (filename == NULL && sf->name[0] != '\0' && sf->name[1] == ':') + filename = sf->name + 1; + } +#endif if (filename) { ++filename; @@ -167,6 +191,24 @@ DEFUN (annotate_source, (sf, max_width, annote, arg), strcpy (fname, filename); strcat (fname, EXT_ANNO); +#ifdef __MSDOS__ + { + /* foo.cpp-ann can overwrite foo.cpp due to silent truncation of + file names on 8+3 filesystems. Their `stat' better be good... */ + struct stat buf1, buf2; + + if (stat (filename, &buf1) == 0 + && stat (fname, &buf2) == 0 + && buf1.st_ino == buf2.st_ino) + { + char *dot = strrchr (fname, '.'); + + if (dot) + *dot = '\0'; + strcat (fname, ".ann"); + } + } +#endif ofp = fopen (fname, "w"); if (!ofp) { @@ -197,7 +239,7 @@ DEFUN (annotate_source, (sf, max_width, annote, arg), { fprintf (ofp, "\f\n"); } - fprintf (ofp, "*** File %s:\n", sf->name); + fprintf (ofp, _("*** File %s:\n"), sf->name); } annotation = xmalloc (max_width + 1); |