1 /* Handle different target file systems for GDB, the GNU Debugger. 2 3 Copyright (C) 2010-2013 Free Software Foundation, Inc. 4 5 This file is part of GDB. 6 7 This program is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3 of the License, or 10 (at your option) any later version. 11 12 This program is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20 #include "defs.h" 21 #include "filesystem.h" 22 #include "gdbarch.h" 23 #include "gdbcmd.h" 24 25 const char file_system_kind_auto[] = "auto"; 26 const char file_system_kind_unix[] = "unix"; 27 const char file_system_kind_dos_based[] = "dos-based"; 28 const char *const target_file_system_kinds[] = 29 { 30 file_system_kind_auto, 31 file_system_kind_unix, 32 file_system_kind_dos_based, 33 NULL 34 }; 35 const char *target_file_system_kind = file_system_kind_auto; 36 37 const char * 38 effective_target_file_system_kind (void) 39 { 40 if (target_file_system_kind == file_system_kind_auto) 41 { 42 if (gdbarch_has_dos_based_file_system (target_gdbarch ())) 43 return file_system_kind_dos_based; 44 else 45 return file_system_kind_unix; 46 } 47 else 48 return target_file_system_kind; 49 } 50 51 const char * 52 target_lbasename (const char *kind, const char *name) 53 { 54 if (kind == file_system_kind_dos_based) 55 return dos_lbasename (name); 56 else 57 return unix_lbasename (name); 58 } 59 60 static void 61 show_target_file_system_kind_command (struct ui_file *file, 62 int from_tty, 63 struct cmd_list_element *c, 64 const char *value) 65 { 66 if (target_file_system_kind == file_system_kind_auto) 67 fprintf_filtered (file, _("\ 68 The assumed file system kind for target reported file names \ 69 is \"%s\" (currently \"%s\").\n"), 70 value, 71 effective_target_file_system_kind ()); 72 else 73 fprintf_filtered (file, _("\ 74 The assumed file system kind for target reported file names \ 75 is \"%s\".\n"), 76 value); 77 } 78 79 /* Provide a prototype to silence -Wmissing-prototypes. */ 80 extern initialize_file_ftype _initialize_filesystem; 81 82 void 83 _initialize_filesystem (void) 84 { 85 add_setshow_enum_cmd ("target-file-system-kind", 86 class_files, 87 target_file_system_kinds, 88 &target_file_system_kind, _("\ 89 Set assumed file system kind for target reported file names"), _("\ 90 Show assumed file system kind for target reported file names"), 91 _("\ 92 If `unix', target file names (e.g., loaded shared library file names)\n\ 93 starting the forward slash (`/') character are considered absolute,\n\ 94 and the directory separator character is the forward slash (`/'). If\n\ 95 `dos-based', target file names starting with a drive letter followed\n\ 96 by a colon (e.g., `c:'), are also considered absolute, and the\n\ 97 backslash (`\\') is also considered a directory separator. Set to\n\ 98 `auto' (which is the default), to let GDB decide, based on its\n\ 99 knowledge of the target operating system."), 100 NULL, /* setfunc */ 101 show_target_file_system_kind_command, 102 &setlist, &showlist); 103 } 104