From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eli Zaretskii To: gdb-patches@sources.redhat.com Subject: Re: [RFA] Remove OS-specific defines (was: _WIN32?) Date: Sun, 13 May 2001 01:29:00 -0000 Message-id: <200105130831.LAA13751@is.elta.co.il> References: <20010503211502.21716.qmail@web6401.mail.yahoo.com> <3AF1DAA0.3060702@cygnus.com> <200105071610.TAA24144@is.elta.co.il> X-SW-Source: 2001-05/msg00278.html > Date: Mon, 7 May 2001 19:10:59 +0300 (IDT) > From: Eli Zaretskii > > I'm seeking approval for the following patches. They remove all the > DOS- and Windows-specific #ifdef's like "#ifdef _WIN32" and use the > portable macros from filenames.h instead. In addition, they convert > code which used macros private to GDB, such as SLASH_P and ROOTED_P, > to use the macros from filenames.h instead. Ping! I think I still need an approval for patches to source.c, completer.c and cli-cmds.c (see below). Did I missed some messages? > 2001-05-07 Eli Zaretskii > > * source.c (mod_path, openp): Use HAVE_DOS_BASED_FILE_SYSTEM > instead of system-specific define's like _WIN32 and __MSDOS__. > Use IS_DIR_SEPARATOR and IS_ABSOLUTE_PATH instead of SLASH_P and > ROOTED_P. > (top-level): #include "filenames.h". > > * solib.c (solib_open): Use IS_DIR_SEPARATOR and IS_ABSOLUTE_PATH > instead of SLASH_CHAR, ROOTED_P and SLASH_P. > (top-level): #include "filenames.h". > > * defs.h (SLASH_P, SLASH_CHAR, ROOTED_P): Remove definitions. > (SLASH_STRING): Define only for _WIN32. > > * completer.c: Use HAVE_DOS_BASED_FILE_SYSTEM instead of > __MSDOS_. > > * cli/cli-cmds.c (cd_command): Use IS_DIR_SEPARATOR and > IS_ABSOLUTE_PATH instead of SLASH_P and ROOTED_P. Replace > system-specific ifdefs with HAVE_DOS_BASED_FILE_SYSTEM. > (top-level): #include "filenames.h". > > > --- gdb/cli/cli-cmds.c~0 Thu Mar 29 01:42:22 2001 > +++ gdb/cli/cli-cmds.c Mon May 7 18:08:40 2001 > @@ -23,6 +23,7 @@ > #include "target.h" /* For baud_rate, remote_debug and remote_timeout */ > #include "gdb_wait.h" /* For shell escape implementation */ > #include "gnu-regex.h" /* Used by apropos_command */ > +#include "filenames.h" /* for DOSish file names */ > > #ifdef UI_OUT > #include "ui-out.h" > @@ -292,7 +293,7 @@ cd_command (char *dir, int from_tty) > if (chdir (dir) < 0) > perror_with_name (dir); > > -#if defined(_WIN32) || defined(__MSDOS__) > +#if HAVE_DOS_BASED_FILE_SYSTEM > /* There's too much mess with DOSish names like "d:", "d:.", > "d:./foo" etc. Instead of having lots of special #ifdef'ed code, > simply get the canonicalized name of the current directory. */ > @@ -300,24 +301,24 @@ cd_command (char *dir, int from_tty) > #endif > > len = strlen (dir); > - if (SLASH_P (dir[len - 1])) > + if (IS_DIR_SEPARATOR (dir[len - 1])) > { > /* Remove the trailing slash unless this is a root directory > (including a drive letter on non-Unix systems). */ > if (!(len == 1) /* "/" */ > -#if defined(_WIN32) || defined(__MSDOS__) > - && !(!SLASH_P (*dir) && ROOTED_P (dir) && len <= 3) /* "d:/" */ > +#if HAVE_DOS_BASED_FILE_SYSTEM > + && !(len == 3 && dir[1] == ':') /* "d:/" */ > #endif > ) > len--; > } > > dir = savestring (dir, len); > - if (ROOTED_P (dir)) > + if (IS_ABSOLUTE_PATH (dir)) > current_directory = dir; > else > { > - if (SLASH_P (current_directory[strlen (current_directory) - 1])) > + if (IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1])) > current_directory = concat (current_directory, dir, NULL); > else > current_directory = concat (current_directory, SLASH_STRING, dir, NULL); > @@ -329,17 +330,18 @@ cd_command (char *dir, int from_tty) > found_real_path = 0; > for (p = current_directory; *p;) > { > - if (SLASH_P (p[0]) && p[1] == '.' && (p[2] == 0 || SLASH_P (p[2]))) > + if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' > + && (p[2] == 0 || IS_DIR_SEPARATOR (p[2]))) > strcpy (p, p + 2); > - else if (SLASH_P (p[0]) && p[1] == '.' && p[2] == '.' > - && (p[3] == 0 || SLASH_P (p[3]))) > + else if (IS_DIR_SEPARATOR (p[0]) && p[1] == '.' && p[2] == '.' > + && (p[3] == 0 || IS_DIR_SEPARATOR (p[3]))) > { > if (found_real_path) > { > /* Search backwards for the directory just before the "/.." > and obliterate it and the "/..". */ > char *q = p; > - while (q != current_directory && !SLASH_P (q[-1])) > + while (q != current_directory && !IS_DIR_SEPARATOR (q[-1])) > --q; > > if (q == current_directory) > > --- gdb/completer.c~5 Sun May 6 13:10:30 2001 > +++ gdb/completer.c Mon May 7 17:21:02 2001 > @@ -66,7 +66,7 @@ static char *gdb_completer_command_word_ > break characters any characters that are commonly used in file > names, such as '-', '+', '~', etc. Otherwise, readline displays > incorrect completion candidates. */ > -#ifdef __MSDOS__ > +#if HAVE_DOS_BASED_FILE_SYSTEM > /* MS-DOS and MS-Windows use colon as part of the drive spec, and most > programs support @foo style response files. */ > static char *gdb_completer_file_name_break_characters = " \t\n*|\"';?><@"; > > --- gdb/defs.h~0 Sat Mar 24 02:00:36 2001 > +++ gdb/defs.h Mon May 7 18:08:48 2001 > @@ -1330,34 +1330,14 @@ extern int use_windows; > #define DIRNAME_SEPARATOR ':' > #endif > > -#ifndef SLASH_P > -#if defined(__GO32__)||defined(_WIN32) > -#define SLASH_P(X) ((X)=='\\') > -#else > -#define SLASH_P(X) ((X)=='/') > -#endif > -#endif > - > -#ifndef SLASH_CHAR > -#if defined(__GO32__)||defined(_WIN32) > -#define SLASH_CHAR '\\' > -#else > -#define SLASH_CHAR '/' > -#endif > -#endif > - > #ifndef SLASH_STRING > -#if defined(__GO32__)||defined(_WIN32) > +#ifdef _WIN32 > #define SLASH_STRING "\\" > #else > #define SLASH_STRING "/" > #endif > #endif > > -#ifndef ROOTED_P > -#define ROOTED_P(X) (SLASH_P((X)[0])) > -#endif > - > /* On some systems, PIDGET is defined to extract the inferior pid from > an internal pid that has the thread id and pid in seperate bit > fields. If not defined, then just use the entire internal pid as > > --- gdb/solib.c~0 Tue Mar 6 10:41:56 2001 > +++ gdb/solib.c Mon May 7 18:11:24 2001 > @@ -39,6 +39,7 @@ > #include "language.h" > #include "gdbcmd.h" > #include "completer.h" > +#include "filenames.h" /* for DOSish file names */ > > #include "solist.h" > > @@ -101,10 +102,14 @@ solib_open (char *in_pathname, char **fo > { > int found_file = -1; > char *temp_pathname = NULL; > + char *p = in_pathname; > > - if (strchr (in_pathname, SLASH_CHAR)) > + while (*p && !IS_DIR_SEPARATOR (*p)) > + p++; > + > + if (*p) > { > - if (! ROOTED_P (in_pathname) || solib_absolute_prefix == NULL) > + if (! IS_ABSOLUTE_PATH (in_pathname) || solib_absolute_prefix == NULL) > temp_pathname = in_pathname; > else > { > @@ -112,7 +117,7 @@ solib_open (char *in_pathname, char **fo > > /* Remove trailing slashes from absolute prefix. */ > while (prefix_len > 0 > - && SLASH_P (solib_absolute_prefix[prefix_len - 1])) > + && IS_DIR_SEPARATOR (solib_absolute_prefix[prefix_len - 1])) > prefix_len--; > > /* Cat the prefixed pathname together. */ > > --- gdb/source.c~0 Tue Mar 27 22:57:04 2001 > +++ gdb/source.c Mon May 7 18:26:20 2001 > @@ -40,6 +40,7 @@ > #include "annotate.h" > #include "gdbtypes.h" > #include "linespec.h" > +#include "filenames.h" /* for DOSish file names */ > #ifdef UI_OUT > #include "ui-out.h" > #endif > @@ -330,12 +331,12 @@ mod_path (char *dirname, char **which_pa > } > } > > - if (!(SLASH_P (*name) && p <= name + 1) /* "/" */ > -#if defined(_WIN32) || defined(__MSDOS__) > + if (!(IS_DIR_SEPARATOR (*name) && p <= name + 1) /* "/" */ > +#if HAVE_DOS_BASED_FILE_SYSTEM > /* On MS-DOS and MS-Windows, h:\ is different from h: */ > - && !(!SLASH_P (*name) && ROOTED_P (name) && p <= name + 3) /* d:/ */ > + && !(p == name + 3 && name[1] == ':') /* "d:/" */ > #endif > - && SLASH_P (p[-1])) > + && IS_DIR_SEPARATOR (p[-1])) > /* Sigh. "foo/" => "foo" */ > --p; > *p = '\0'; > @@ -348,7 +349,7 @@ mod_path (char *dirname, char **which_pa > name = current_directory; > goto append; > } > - else if (p > name + 1 && SLASH_P (p[-2])) > + else if (p > name + 1 && IS_DIR_SEPARATOR (p[-2])) > { > if (p - name == 2) > { > @@ -370,11 +371,11 @@ mod_path (char *dirname, char **which_pa > > if (name[0] == '~') > name = tilde_expand (name); > -#if defined(_WIN32) || defined(__MSDOS__) > - else if (ROOTED_P (name) && p == name + 2) /* "d:" => "d:." */ > +#if HAVE_DOS_BASED_FILE_SYSTEM > + else if (IS_ABSOLUTE_PATH (name) && p == name + 2) /* "d:" => "d:." */ > name = concat (name, ".", NULL); > #endif > - else if (!ROOTED_P (name) && name[0] != '$') > + else if (!IS_ABSOLUTE_PATH (name) && name[0] != '$') > name = concat (current_directory, SLASH_STRING, name, NULL); > else > name = savestring (name, p - name); > @@ -530,7 +531,7 @@ openp (char *path, int try_cwd_first, ch > mode |= O_BINARY; > #endif > > - if (try_cwd_first || ROOTED_P (string)) > + if (try_cwd_first || IS_ABSOLUTE_PATH (string)) > { > int i; > filename = string; > @@ -538,12 +539,12 @@ openp (char *path, int try_cwd_first, ch > if (fd >= 0) > goto done; > for (i = 0; string[i]; i++) > - if (SLASH_P (string[i])) > + if (IS_DIR_SEPARATOR (string[i])) > goto done; > } > > /* ./foo => foo */ > - while (string[0] == '.' && SLASH_P (string[1])) > + while (string[0] == '.' && IS_DIR_SEPARATOR (string[1])) > string += 2; > > alloclen = strlen (path) + strlen (string) + 2; > @@ -581,7 +582,7 @@ openp (char *path, int try_cwd_first, ch > } > > /* Remove trailing slashes */ > - while (len > 0 && SLASH_P (filename[len - 1])) > + while (len > 0 && IS_DIR_SEPARATOR (filename[len - 1])) > filename[--len] = 0; > > strcat (filename + len, SLASH_STRING); > @@ -597,14 +598,14 @@ done: > { > if (fd < 0) > *filename_opened = (char *) 0; > - else if (ROOTED_P (filename)) > + else if (IS_ABSOLUTE_PATH (filename)) > *filename_opened = savestring (filename, strlen (filename)); > else > { > /* Beware the // my son, the Emacs barfs, the botch that catch... */ > > *filename_opened = concat (current_directory, > - SLASH_P (current_directory[strlen (current_directory) - 1]) > + IS_DIR_SEPARATOR (current_directory[strlen (current_directory) - 1]) > ? "" : SLASH_STRING, > filename, NULL); > } >