Index: gdb/breakpoint.c =================================================================== --- gdb.orig/breakpoint.c 2011-03-01 09:03:20.000000000 +0100 +++ gdb/breakpoint.c 2011-03-02 12:12:40.027913000 +0100 @@ -39,6 +39,7 @@ #include "language.h" #include "gdb_string.h" #include "demangle.h" +#include "filenames.h" #include "annotate.h" #include "symfile.h" #include "objfiles.h" @@ -9510,8 +9511,8 @@ clear_command (char *arg, int from_tty) && b->source_file != NULL && sal.symtab != NULL && sal.pspace == loc->pspace - && strcmp (b->source_file, - sal.symtab->filename) == 0 + && filename_cmp (b->source_file, + sal.symtab->filename) == 0 && b->line_number == sal.line); if (pc_match || line_match) { Index: gdb/bsd-kvm.c =================================================================== --- gdb.orig/bsd-kvm.c 2011-01-07 20:36:15.000000000 +0100 +++ gdb/bsd-kvm.c 2011-03-03 10:48:54.750280700 +0100 @@ -36,6 +36,7 @@ #endif #include #include "readline/readline.h" +#include "filenames.h" #include #include #include @@ -77,7 +78,7 @@ bsd_kvm_open (char *filename, int from_t char *temp; filename = tilde_expand (filename); - if (filename[0] != '/') + if (!IS_ABSOLUTE_PATH (filename)) { temp = concat (current_directory, "/", filename, (char *)NULL); xfree (filename); @@ -151,7 +152,7 @@ bsd_kvm_xfer_partial (struct target_ops static void bsd_kvm_files_info (struct target_ops *ops) { - if (bsd_kvm_corefile && strcmp (bsd_kvm_corefile, _PATH_MEM) != 0) + if (bsd_kvm_corefile && filename_cmp (bsd_kvm_corefile, _PATH_MEM) != 0) printf_filtered (_("\tUsing the kernel crash dump %s.\n"), bsd_kvm_corefile); else Index: gdb/buildsym.c =================================================================== --- gdb.orig/buildsym.c 2011-01-05 23:22:47.000000000 +0100 +++ gdb/buildsym.c 2011-03-03 10:45:56.543151200 +0100 @@ -643,7 +643,7 @@ void patch_subfile_names (struct subfile *subfile, char *name) { if (subfile != NULL && subfile->dirname == NULL && subfile->name != NULL - && subfile->name[strlen (subfile->name) - 1] == '/') + && IS_DIR_SEPARATOR (subfile->name[strlen (subfile->name) - 1])) { subfile->dirname = subfile->name; subfile->name = xstrdup (name); @@ -878,7 +878,7 @@ watch_main_source_file_lossage (void) subfile->next; subfile = subfile->next) { - if (strcmp (lbasename (subfile->name), mainbase) == 0) + if (filename_cmp (lbasename (subfile->name), mainbase) == 0) { ++nr_matches; mainsub_alias = subfile; Index: gdb/dbxread.c =================================================================== --- gdb.orig/dbxread.c 2011-03-01 09:03:20.000000000 +0100 +++ gdb/dbxread.c 2011-03-03 10:56:14.497121400 +0100 @@ -47,6 +47,7 @@ #include "target.h" #include "gdbcore.h" /* for bfd stuff */ #include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */ +#include "filenames.h" #include "objfiles.h" #include "buildsym.h" #include "stabsread.h" @@ -346,7 +347,7 @@ add_old_header_file (char *name, int ins int i; for (i = 0; i < N_HEADER_FILES (current_objfile); i++) - if (strcmp (p[i].name, name) == 0 && instance == p[i].instance) + if (filename_cmp (p[i].name, name) == 0 && instance == p[i].instance) { add_this_object_header_file (i); return; @@ -1531,6 +1532,13 @@ read_dbx_symtab (struct objfile *objfile we assume the previous N_SO was a directory name. */ p = strrchr (namestring, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *p2 = strrchr (namestring, '\\'); + if (!p || (p2 && p2 > p)) + p = p2; + } +#endif if (p && *(p + 1) == '\000') { /* Save the directory name SOs locally, then save it into @@ -1620,13 +1628,13 @@ read_dbx_symtab (struct objfile *objfile things like "break c-exp.y:435" need to work (I suppose the psymtab_include_list could be hashed or put in a binary tree, if profiling shows this is a major hog). */ - if (pst && strcmp (namestring, pst->filename) == 0) + if (pst && filename_cmp (namestring, pst->filename) == 0) continue; { int i; for (i = 0; i < includes_used; i++) - if (strcmp (namestring, psymtab_include_list[i]) == 0) + if (filename_cmp (namestring, psymtab_include_list[i]) == 0) { i = -1; break; Index: gdb/elfread.c =================================================================== --- gdb.orig/elfread.c 2011-01-07 20:36:16.000000000 +0100 +++ gdb/elfread.c 2011-03-03 11:08:58.354118900 +0100 @@ -37,6 +37,7 @@ #include "complaints.h" #include "demangle.h" #include "psympriv.h" +#include "filenames.h" extern void _initialize_elfread (void); @@ -704,7 +705,8 @@ find_separate_debug_file_by_buildid (str build_id_name = build_id_to_debug_filename (build_id); xfree (build_id); /* Prevent looping on a stripped .debug file. */ - if (build_id_name != NULL && strcmp (build_id_name, objfile->name) == 0) + if (build_id_name != NULL + && filename_cmp (build_id_name, objfile->name) == 0) { warning (_("\"%s\": separate debug info file has no debug info"), build_id_name); @@ -1005,7 +1007,15 @@ elfstab_offset_sections (struct objfile /* The ELF symbol info doesn't include path names, so strip the path (if any) from the psymtab filename. */ - while (0 != (p = strchr (filename, '/'))) + p = strrchr (filename, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *p2 = strrchr (filename, '\\'); + if (!p || (p2 && p2 > p)) + p = p2; + } +#endif + if (p) filename = p + 1; /* FIXME: This linear search could speed up significantly @@ -1014,7 +1024,7 @@ elfstab_offset_sections (struct objfile for (; maybe; maybe = maybe->next) { if (filename[0] == maybe->filename[0] - && strcmp (filename, maybe->filename) == 0) + && filename_cmp (filename, maybe->filename) == 0) { /* We found a match. But there might be several source files (from different directories) with the same name. */ Index: gdb/exec.c =================================================================== --- gdb.orig/exec.c 2011-02-17 22:19:31.000000000 +0100 +++ gdb/exec.c 2011-03-02 12:16:52.525976200 +0100 @@ -25,6 +25,7 @@ #include "target.h" #include "gdbcmd.h" #include "language.h" +#include "filenames.h" #include "symfile.h" #include "objfiles.h" #include "completer.h" @@ -845,7 +846,7 @@ exec_set_section_address (const char *fi table = current_target_sections; for (p = table->sections; p < table->sections_end; p++) { - if (strcmp (filename, p->bfd->filename) == 0 + if (filename_cmp (filename, p->bfd->filename) == 0 && index == p->the_bfd_section->index) { p->endaddr += address - p->addr; Index: gdb/macrotab.c =================================================================== --- gdb.orig/macrotab.c 2011-01-09 04:20:33.000000000 +0100 +++ gdb/macrotab.c 2011-03-03 10:41:58.796961300 +0100 @@ -21,6 +21,7 @@ #include "defs.h" #include "gdb_obstack.h" #include "splay-tree.h" +#include "filenames.h" #include "symtab.h" #include "symfile.h" #include "objfiles.h" @@ -500,7 +501,7 @@ struct macro_source_file * macro_lookup_inclusion (struct macro_source_file *source, const char *name) { /* Is SOURCE itself named NAME? */ - if (strcmp (name, source->filename) == 0) + if (filename_cmp (name, source->filename) == 0) return source; /* The filename in the source structure is probably a full path, but @@ -510,11 +511,12 @@ macro_lookup_inclusion (struct macro_sou int src_name_len = strlen (source->filename); /* We do mean < here, and not <=; if the lengths are the same, - then the strcmp above should have triggered, and we need to + then the filename_cmp above should have triggered, and we need to check for a slash here. */ if (name_len < src_name_len - && source->filename[src_name_len - name_len - 1] == '/' - && strcmp (name, source->filename + src_name_len - name_len) == 0) + && IS_DIR_SEPARATOR (source->filename[src_name_len - name_len - 1]) + && filename_cmp (name, + source->filename + src_name_len - name_len) == 0) return source; } Index: gdb/mdebugread.c =================================================================== --- gdb.orig/mdebugread.c 2011-03-01 09:03:21.000000000 +0100 +++ gdb/mdebugread.c 2011-03-03 11:45:18.109912800 +0100 @@ -45,6 +45,7 @@ #include "symtab.h" #include "gdbtypes.h" #include "gdbcore.h" +#include "filenames.h" #include "objfiles.h" #include "gdb_obstack.h" #include "buildsym.h" @@ -3014,6 +3015,13 @@ parse_partial_symbols (struct objfile *o the previous N_SO was a directory name. */ p = strrchr (namestring, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *p2 = strrchr (namestring, '\\'); + if (!p || (p2 && p2 > p)) + p = p2; + } +#endif if (p && *(p + 1) == '\000') continue; /* Simply ignore directory name SOs. */ @@ -3065,15 +3073,15 @@ parse_partial_symbols (struct objfile *o work (I suppose the psymtab_include_list could be hashed or put in a binary tree, if profiling shows this is a major hog). */ - if (pst && strcmp (namestring, pst->filename) == 0) + if (pst && filename_cmp (namestring, pst->filename) == 0) continue; { int i; for (i = 0; i < includes_used; i++) - if (strcmp (namestring, - psymtab_include_list[i]) == 0) + if (filename_cmp (namestring, + psymtab_include_list[i]) == 0) { i = -1; break; Index: gdb/minsyms.c =================================================================== --- gdb.orig/minsyms.c 2011-01-09 04:20:33.000000000 +0100 +++ gdb/minsyms.c 2011-03-03 10:37:55.989628700 +0100 @@ -43,6 +43,7 @@ #include "gdb_string.h" #include "symtab.h" #include "bfd.h" +#include "filenames.h" #include "symfile.h" #include "objfiles.h" #include "demangle.h" @@ -200,6 +201,13 @@ lookup_minimal_symbol (const char *name, if (sfile != NULL) { char *p = strrchr (sfile, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *p2 = strrchr (sfile, '\\'); + if (!p || (p2 && p2 > p)) + p = p2; + } +#endif if (p != NULL) sfile = p + 1; @@ -260,7 +268,7 @@ lookup_minimal_symbol (const char *name, case mst_file_data: case mst_file_bss: if (sfile == NULL - || strcmp (msymbol->filename, sfile) == 0) + || filename_cmp (msymbol->filename, sfile) == 0) found_file_symbol = msymbol; break; Index: gdb/nto-procfs.c =================================================================== --- gdb.orig/nto-procfs.c 2011-01-11 16:10:01.000000000 +0100 +++ gdb/nto-procfs.c 2011-03-03 10:35:52.861993500 +0100 @@ -37,6 +37,7 @@ #include "gdbcore.h" #include "inferior.h" #include "target.h" +#include "filenames.h" #include "objfiles.h" #include "gdbthread.h" #include "nto-tdep.h" @@ -149,7 +150,7 @@ procfs_open (char *arg, int from_tty) } else if (*endstr) { - if (*(endstr - 1) == '/') + if (IS_DIR_SEPARATOR (*(endstr - 1))) *(endstr - 1) = 0; else *endstr = 0; @@ -545,7 +546,7 @@ procfs_meminfo (char *args, int from_tty if (err != EOK) continue; - if (strcmp (map.info.path, printme.name)) + if (filename_cmp (map.info.path, printme.name)) continue; /* Lower debug_vaddr is always text, if nessessary, swap. */ Index: gdb/psymtab.c =================================================================== --- gdb.orig/psymtab.c 2011-03-01 09:03:21.000000000 +0100 +++ gdb/psymtab.c 2011-03-02 11:02:58.109876900 +0100 @@ -946,7 +946,7 @@ read_psymtabs_with_filename (struct objf ALL_OBJFILE_PSYMTABS (objfile, p) { - if (strcmp (filename, p->filename) == 0) + if (filename_cmp (filename, p->filename) == 0) PSYMTAB_TO_SYMTAB (p); } } @@ -1614,7 +1614,7 @@ print-psymbols takes an output file name immediate_quit++; ALL_PSYMTABS (objfile, ps) - if (symname == NULL || strcmp (symname, ps->filename) == 0) + if (symname == NULL || filename_cmp (symname, ps->filename) == 0) dump_psymtab (objfile, ps, outfile); immediate_quit--; do_cleanups (cleanups); Index: gdb/remote-fileio.c =================================================================== --- gdb.orig/remote-fileio.c 2011-02-17 22:19:31.000000000 +0100 +++ gdb/remote-fileio.c 2011-03-03 10:24:24.441575200 +0100 @@ -31,6 +31,7 @@ #include "remote-fileio.h" #include "event-loop.h" #include "target.h" +#include "filenames.h" #include #include @@ -378,6 +379,15 @@ remote_fileio_extract_ptr_w_len (char ** if (!buf || !*buf || !**buf || !ptrval || !length) return -1; c = strchr (*buf, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *c2 = strchr (*buf, '\\'); + if (!c) + c = c2; + else if (c2 && c2 < c) + c = c2; + } +#endif if (!c) return -1; *c++ = '\0'; @@ -1020,8 +1030,8 @@ remote_fileio_func_rename (char *buf) cygwin_conv_path (CCP_WIN_A_TO_POSIX, newpath, newfullpath, PATH_MAX); len = strlen (oldfullpath); - if (newfullpath[len] == '/' - && !strncmp (oldfullpath, newfullpath, len)) + if (IS_DIR_SEPARATOR (newfullpath[len]) + && !filename_ncmp (oldfullpath, newfullpath, len)) errno = EINVAL; else errno = EEXIST; Index: gdb/rs6000-nat.c =================================================================== --- gdb.orig/rs6000-nat.c 2011-01-11 16:10:01.000000000 +0100 +++ gdb/rs6000-nat.c 2011-03-03 12:04:39.160347400 +0100 @@ -24,6 +24,7 @@ #include "target.h" #include "gdbcore.h" #include "xcoffsolib.h" +#include "filenames.h" #include "symfile.h" #include "objfiles.h" #include "libbfd.h" /* For bfd_default_set_arch_mach (FIXME) */ @@ -769,7 +770,7 @@ add_vmap (LdInfo *ldi) last = 0; /* FIXME??? am I tossing BFDs? bfd? */ while ((last = bfd_openr_next_archived_file (abfd, last))) - if (strcmp (mem, last->filename) == 0) + if (filename_cmp (mem, last->filename) == 0) break; if (!last) @@ -853,8 +854,8 @@ vmap_ldinfo (LdInfo *ldi) /* The filenames are not always sufficient to match on. */ - if ((name[0] == '/' && strcmp (name, vp->name) != 0) - || (memb[0] && strcmp (memb, vp->member) != 0)) + if ((name[0] == '/' && filename_cmp (name, vp->name) != 0) + || (memb[0] && filename_cmp (memb, vp->member) != 0)) continue; /* See if we are referring to the same file. Index: gdb/solib-som.c =================================================================== --- gdb.orig/solib-som.c 2011-01-14 19:39:31.000000000 +0100 +++ gdb/solib-som.c 2011-03-03 12:05:28.243580200 +0100 @@ -21,6 +21,7 @@ #include "defs.h" #include "symtab.h" #include "bfd.h" +#include "filenames.h" #include "symfile.h" #include "objfiles.h" #include "gdbcore.h" @@ -568,7 +569,7 @@ link_map_start (void) static int match_main (const char *name) { - return strcmp (name, symfile_objfile->name) == 0; + return filename_cmp (name, symfile_objfile->name) == 0; } static struct so_list * Index: gdb/solib.c =================================================================== --- gdb.orig/solib.c 2011-02-17 22:19:32.000000000 +0100 +++ gdb/solib.c 2011-03-02 11:06:29.717747700 +0100 @@ -638,7 +638,7 @@ solib_read_symbols (struct so_list *so, /* Have we already loaded this shared object? */ ALL_OBJFILES (so->objfile) { - if (strcmp (so->objfile->name, so->so_name) == 0 + if (filename_cmp (so->objfile->name, so->so_name) == 0 && so->objfile->addr_low == so->addr_low) break; } @@ -762,7 +762,7 @@ update_solib_list (int from_tty, struct } else { - if (! strcmp (gdb->so_original_name, i->so_original_name)) + if (! filename_cmp (gdb->so_original_name, i->so_original_name)) break; } @@ -1338,7 +1338,7 @@ reload_shared_libraries_1 (int from_tty) symbol file, close that. */ if ((found_pathname == NULL && was_loaded) || (found_pathname != NULL - && strcmp (found_pathname, so->so_name) != 0)) + && filename_cmp (found_pathname, so->so_name) != 0)) { if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED)) free_objfile (so->objfile); @@ -1350,7 +1350,7 @@ reload_shared_libraries_1 (int from_tty) file, open it. */ if (found_pathname != NULL && (!was_loaded - || strcmp (found_pathname, so->so_name) != 0)) + || filename_cmp (found_pathname, so->so_name) != 0)) { volatile struct gdb_exception e; Index: gdb/source.c =================================================================== --- gdb.orig/source.c 2011-01-11 22:53:24.000000000 +0100 +++ gdb/source.c 2011-03-02 11:08:29.324935900 +0100 @@ -569,15 +569,10 @@ add_path (char *dirname, char **which_pa p = *which_path; while (1) { - /* FIXME: strncmp loses in interesting ways on MS-DOS and - MS-Windows because of case-insensitivity and two different - but functionally identical slash characters. We need a - special filesystem-dependent file-name comparison function. - - Actually, even on Unix I would use realpath() or its work- + /* Actually, even on Unix I would use realpath() or its work- alike before comparing. Then all the code above which removes excess slashes and dots could simply go away. */ - if (!strncmp (p, name, len) + if (!filename_ncmp (p, name, len) && (p[len] == '\0' || p[len] == DIRNAME_SEPARATOR)) { /* Found it in the search path, remove old copy. */ Index: gdb/symfile.c =================================================================== --- gdb.orig/symfile.c 2011-03-01 09:03:22.000000000 +0100 +++ gdb/symfile.c 2011-03-02 09:40:42.156590400 +0100 @@ -1317,7 +1317,7 @@ separate_debug_file_exists (const char * ".debug" suffix as "/usr/lib/debug/path/to/file" is a separate tree where the separate debug infos with the same basename can exist. */ - if (strcmp (name, parent_objfile->name) == 0) + if (filename_cmp (name, parent_objfile->name) == 0) return 0; abfd = bfd_open_maybe_remote (name); @@ -1325,7 +1325,7 @@ separate_debug_file_exists (const char * if (!abfd) return 0; - /* Verify symlinks were not the cause of strcmp name difference above. + /* Verify symlinks were not the cause of filename_cmp name difference above. Some operating systems, e.g. Windows, do not provide a meaningful st_ino; they always set it to zero. (Windows does provide a @@ -1463,7 +1463,8 @@ find_separate_debug_file_by_debuglink (s /* If the file is in the sysroot, try using its base path in the global debugfile directory. */ if (canon_name - && strncmp (canon_name, gdb_sysroot, strlen (gdb_sysroot)) == 0 + && filename_ncmp (canon_name, gdb_sysroot, + strlen (gdb_sysroot)) == 0 && IS_DIR_SEPARATOR (canon_name[strlen (gdb_sysroot)])) { memcpy (debugfile, debugdir, debugdir_end - debugdir); @@ -2367,8 +2368,9 @@ reread_symbols (void) /* We need to do this whenever any symbols go away. */ make_cleanup (clear_symtab_users_cleanup, 0 /*ignore*/); - if (exec_bfd != NULL && strcmp (bfd_get_filename (objfile->obfd), - bfd_get_filename (exec_bfd)) == 0) + if (exec_bfd != NULL + && filename_cmp (bfd_get_filename (objfile->obfd), + bfd_get_filename (exec_bfd)) == 0) { /* Reload EXEC_BFD without asking anything. */ Index: gdb/symmisc.c =================================================================== --- gdb.orig/symmisc.c 2011-01-11 22:53:24.000000000 +0100 +++ gdb/symmisc.c 2011-03-02 12:14:21.768332400 +0100 @@ -23,6 +23,7 @@ #include "symtab.h" #include "gdbtypes.h" #include "bfd.h" +#include "filenames.h" #include "symfile.h" #include "objfiles.h" #include "breakpoint.h" @@ -475,7 +476,7 @@ maintenance_print_symbols (char *args, i immediate_quit++; ALL_SYMTABS (objfile, s) - if (symname == NULL || strcmp (symname, s->filename) == 0) + if (symname == NULL || filename_cmp (symname, s->filename) == 0) dump_symtab (objfile, s, outfile); immediate_quit--; do_cleanups (cleanups); Index: gdb/symtab.c =================================================================== --- gdb.orig/symtab.c 2011-03-01 09:03:22.000000000 +0100 +++ gdb/symtab.c 2011-03-02 09:48:00.137707000 +0100 @@ -2761,7 +2761,7 @@ filename_seen (const char *file, int add /* Is FILE in tab? */ for (p = tab; p < tab + tab_cur_size; p++) - if (strcmp (*p, file) == 0) + if (filename_cmp (*p, file) == 0) return 1; /* No; maybe add it to tab. */ @@ -2862,7 +2862,7 @@ file_matches (const char *file, char *fi { for (i = 0; i < nfiles; i++) { - if (strcmp (files[i], lbasename (file)) == 0) + if (filename_cmp (files[i], lbasename (file)) == 0) return 1; } } @@ -3260,7 +3260,7 @@ static void print_symbol_info (domain_enum kind, struct symtab *s, struct symbol *sym, int block, char *last) { - if (last == NULL || strcmp (last, s->filename) != 0) + if (last == NULL || filename_cmp (last, s->filename) != 0) { fputs_filtered ("\nFile ", gdb_stdout); fputs_filtered (s->filename, gdb_stdout); @@ -4073,7 +4073,7 @@ not_interesting_fname (const char *fname for (i = 0; illegal_aliens[i]; i++) { - if (strcmp (fname, illegal_aliens[i]) == 0) + if (filename_cmp (fname, illegal_aliens[i]) == 0) return 1; } return 0; @@ -4102,12 +4102,7 @@ maybe_add_partial_symtab_filename (const if (not_interesting_fname (filename)) return; if (!filename_seen (filename, 1, data->first) -#if HAVE_DOS_BASED_FILE_SYSTEM - && strncasecmp (filename, data->text, data->text_len) == 0 -#else - && strncmp (filename, data->text, data->text_len) == 0 -#endif - ) + && filename_ncmp (filename, data->text, data->text_len) == 0) { /* This file matches for a completion; add it to the current list of matches. */ @@ -4120,12 +4115,7 @@ maybe_add_partial_symtab_filename (const if (base_name != filename && !filename_seen (base_name, 1, data->first) -#if HAVE_DOS_BASED_FILE_SYSTEM - && strncasecmp (base_name, data->text, data->text_len) == 0 -#else - && strncmp (base_name, data->text, data->text_len) == 0 -#endif - ) + && filename_ncmp (base_name, data->text, data->text_len) == 0) add_filename_to_list (base_name, data->text, data->word, data->list, data->list_used, data->list_alloced); } @@ -4159,12 +4149,7 @@ make_source_files_completion_list (char if (not_interesting_fname (s->filename)) continue; if (!filename_seen (s->filename, 1, &first) -#if HAVE_DOS_BASED_FILE_SYSTEM - && strncasecmp (s->filename, text, text_len) == 0 -#else - && strncmp (s->filename, text, text_len) == 0 -#endif - ) + && filename_ncmp (s->filename, text, text_len) == 0) { /* This file matches for a completion; add it to the current list of matches. */ @@ -4180,12 +4165,7 @@ make_source_files_completion_list (char base_name = lbasename (s->filename); if (base_name != s->filename && !filename_seen (base_name, 1, &first) -#if HAVE_DOS_BASED_FILE_SYSTEM - && strncasecmp (base_name, text, text_len) == 0 -#else - && strncmp (base_name, text, text_len) == 0 -#endif - ) + && filename_ncmp (base_name, text, text_len) == 0) add_filename_to_list (base_name, text, word, &list, &list_used, &list_alloced); } Index: gdb/xcoffread.c =================================================================== --- gdb.orig/xcoffread.c 2011-01-12 02:23:29.000000000 +0100 +++ gdb/xcoffread.c 2011-03-03 12:06:39.938184300 +0100 @@ -41,6 +41,7 @@ #include "coff/rs6000.h" #include "xcoffread.h" +#include "filenames.h" #include "symtab.h" #include "gdbtypes.h" /* FIXME: ezannoni/2004-02-13 Verify if the include below is really needed. */ @@ -609,7 +610,7 @@ process_linenos (CORE_ADDR start, CORE_A start, 0, &main_source_baseline); } - if (strcmp (inclTable[ii].name, last_source_file) == 0) + if (filename_cmp (inclTable[ii].name, last_source_file) == 0) { /* The entry in the include table refers to the main source file. Add the lines to the main subfile. */ @@ -2575,14 +2576,14 @@ scan_xcoff_symtab (struct objfile *objfi things like "break c-exp.y:435" need to work (I suppose the psymtab_include_list could be hashed or put in a binary tree, if profiling shows this is a major hog). */ - if (pst && strcmp (namestring, pst->filename) == 0) + if (pst && filename_cmp (namestring, pst->filename) == 0) continue; { int i; for (i = 0; i < includes_used; i++) - if (strcmp (namestring, psymtab_include_list[i]) == 0) + if (filename_cmp (namestring, psymtab_include_list[i]) == 0) { i = -1; break; Index: gdb/xml-support.c =================================================================== --- gdb.orig/xml-support.c 2011-02-17 22:19:32.000000000 +0100 +++ gdb/xml-support.c 2011-03-02 09:51:06.587883100 +0100 @@ -25,6 +25,7 @@ #include "gdb_string.h" #include "safe-ctype.h" +#include "filenames.h" /* Debugging flag. */ static int debug_xml; @@ -946,7 +947,7 @@ fetch_xml_builtin (const char *filename) const char *(*p)[2]; for (p = xml_builtin; (*p)[0]; p++) - if (strcmp ((*p)[0], filename) == 0) + if (filename_cmp ((*p)[0], filename) == 0) return (*p)[1]; return NULL; Index: gdb/xml-syscall.c =================================================================== --- gdb.orig/xml-syscall.c 2011-02-17 22:19:32.000000000 +0100 +++ gdb/xml-syscall.c 2011-03-02 11:16:02.371965500 +0100 @@ -280,7 +280,7 @@ static void init_sysinfo (void) { /* Should we re-read the XML info for this target? */ - if (my_gdb_datadir && strcmp (my_gdb_datadir, gdb_datadir) != 0) + if (my_gdb_datadir && filename_cmp (my_gdb_datadir, gdb_datadir) != 0) { /* The data-directory changed from the last time we used it. It means that we have to re-read the XML info. */ Index: gdb/coffread.c =================================================================== --- gdb.orig/coffread.c 2011-03-01 09:03:20.000000000 +0100 +++ gdb/coffread.c 2011-03-03 10:53:53.676239400 +0100 @@ -33,6 +33,7 @@ #include "coff/internal.h" /* Internal format of COFF symbols in BFD */ #include "libcoff.h" /* FIXME secret internal data from BFD */ +#include "filenames.h" #include "objfiles.h" #include "buildsym.h" #include "gdb-stabs.h" @@ -1331,8 +1332,18 @@ coff_getfilename (union internal_auxent /* FIXME: We should not be throwing away the information about what directory. It should go into dirname of the symtab, or some such place. */ - if ((temp = strrchr (result, '/')) != NULL) + temp = strrchr (result, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *p2 = strrchr (result, '\\'); + + if (!temp || (p2 && p2 > temp)) + temp = p2; + } +#endif + if (temp != NULL) result = temp + 1; + return (result); } Index: gdb/dwarf2read.c =================================================================== --- gdb.orig/dwarf2read.c 2011-03-01 09:03:21.000000000 +0100 +++ gdb/dwarf2read.c 2011-03-03 11:04:13.022886500 +0100 @@ -5207,7 +5207,8 @@ find_file_and_directory (struct die_info directory, get rid of it. */ char *cp = strchr (*comp_dir, ':'); - if (cp && cp != *comp_dir && cp[-1] == '.' && cp[1] == '/') + if (cp && cp != *comp_dir && cp[-1] == '.' + && IS_ABSOLUTE_PATH (&cp[1])) *comp_dir = cp + 1; } Index: gdb/fbsd-nat.c =================================================================== --- gdb.orig/fbsd-nat.c 2011-03-01 09:03:21.000000000 +0100 +++ gdb/fbsd-nat.c 2011-03-03 11:13:47.130288800 +0100 @@ -24,6 +24,7 @@ #include "regcache.h" #include "regset.h" #include "gdbthread.h" +#include "filenames.h" #include "gdb_assert.h" #include "gdb_string.h" @@ -202,8 +203,16 @@ fbsd_make_corefile_notes (bfd *obfd, int if (get_exec_file (0)) { - char *fname = strrchr (get_exec_file (0), '/') + 1; - char *psargs = xstrdup (fname); + char *fname = strrchr (get_exec_file (0), '/'); + char *psargs; +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + char *fname2 = strrchr (get_exec_file (0), '\\'); + + if (!fname || (fname2 && fname2 > fname)) + fname = fname2; +#endif + ++fname; + psargs = xstrdup (fname); if (get_inferior_args ()) psargs = reconcat (psargs, psargs, " ", get_inferior_args (), Index: gdb/linux-fork.c =================================================================== --- gdb.orig/linux-fork.c 2011-01-09 04:08:57.000000000 +0100 +++ gdb/linux-fork.c 2011-03-03 11:16:49.096395600 +0100 @@ -24,6 +24,7 @@ #include "regcache.h" #include "gdbcmd.h" #include "infcall.h" +#include "filenames.h" #include "objfiles.h" #include "gdb_assert.h" #include "gdb_string.h" @@ -586,7 +587,12 @@ info_checkpoints_command (char *arg, int if (sal.symtab) { char *tmp = strrchr (sal.symtab->filename, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + char *tmp2 = strrchr (sal_symtab->filename, '\\'); + if (!tmp || (tmp2 && tmp2 > tmp)) + tmp = tmp2; +#endif if (tmp) printf_filtered (_(", file %s"), tmp + 1); else Index: gdb/linux-nat.c =================================================================== --- gdb.orig/linux-nat.c 2011-03-01 09:03:21.000000000 +0100 +++ gdb/linux-nat.c 2011-03-03 11:20:00.738231000 +0100 @@ -56,6 +56,7 @@ #include "terminal.h" #include #include "solib.h" +#include "filenames.h" #ifndef SPUFS_MAGIC #define SPUFS_MAGIC 0x23c9b64e @@ -4491,7 +4492,14 @@ linux_nat_make_corefile_notes (bfd *obfd if (get_exec_file (0)) { - strncpy (fname, strrchr (get_exec_file (0), '/') + 1, sizeof (fname)); + char *tmp = strrchr (get_exec_file (0), '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + char *tmp2 = strrchr (get_exec_file (0), '\\'); + + if (!tmp || (tmp2 && tmp2 > tmp)) + tmp = tmp2; +#endif + strncpy (fname, tmp + 1, sizeof (fname)); strncpy (psargs, get_exec_file (0), sizeof (psargs)); if (get_inferior_args ()) { Index: gdb/linux-thread-db.c =================================================================== --- gdb.orig/linux-thread-db.c 2011-03-01 09:03:21.000000000 +0100 +++ gdb/linux-thread-db.c 2011-03-03 11:24:28.584743200 +0100 @@ -31,6 +31,7 @@ #include "gdbcmd.h" #include "gdbthread.h" #include "inferior.h" +#include "filenames.h" #include "symfile.h" #include "objfiles.h" #include "target.h" @@ -777,7 +778,11 @@ try_thread_db_load (const char *library) return 0; } - if (libthread_db_debug && strchr (library, '/') == NULL) + if (libthread_db_debug && strchr (library, '/') == NULL +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + && strchr (library, '\\') == NULL +#endif + ) { void *td_init; @@ -901,7 +906,14 @@ thread_db_load (void) gdb_assert (strlen (obj->name) < sizeof (path)); strcpy (path, obj->name); cp = strrchr (path, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *cp2 = strrchr (path, '\\'); + if (!cp || (cp2 && cp2 > cp)) + cp = cp2; + } +#endif if (cp == NULL) { warning (_("Expected absolute pathname for libpthread in the" Index: gdb/nto-tdep.c =================================================================== --- gdb.orig/nto-tdep.c 2011-01-10 21:38:49.000000000 +0100 +++ gdb/nto-tdep.c 2011-03-03 10:33:39.791595700 +0100 @@ -33,6 +33,7 @@ #include "elf-bfd.h" #include "solib-svr4.h" #include "gdbcore.h" +#include "filenames.h" #include "objfiles.h" #include @@ -129,6 +130,13 @@ nto_find_and_open_solib (char *solib, un /* Don't assume basename() isn't destructive. */ base = strrchr (solib, '/'); +#ifdef HAVE_DOS_BASED_FILE_SYSTEM + { + char *base2 = strrchr (solib, '\\'); + if (!base || (base2 && base2 > base)) + base = base2; + } +#endif if (!base) base = solib; else Index: gdb/windows-nat.c =================================================================== --- gdb.orig/windows-nat.c 2011-01-12 02:23:29.000000000 +0100 +++ gdb/windows-nat.c 2011-03-03 10:12:52.749241400 +0100 @@ -46,6 +46,7 @@ #include #include "buildsym.h" +#include "filenames.h" #include "symfile.h" #include "objfiles.h" #include "gdb_obstack.h" @@ -2586,7 +2587,7 @@ _initialize_check_for_gdb_ini (void) sizeof ("/gdb.ini")); strcpy (oldini, homedir); p = strchr (oldini, '\0'); - if (p > oldini && p[-1] != '/') + if (p > oldini && !IS_DIR_SEPARATOR (p[-1])) *p++ = '/'; strcpy (p, "gdb.ini"); if (access (oldini, 0) == 0)