From mboxrd@z Thu Jan 1 00:00:00 1970 From: Fernando Nasser To: Eli Zaretskii Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA] Remove OS-specific defines (was: _WIN32?) Date: Sun, 13 May 2001 07:09:00 -0000 Message-id: <3AFE9504.6C8819C9@redhat.com> References: <20010503211502.21716.qmail@web6401.mail.yahoo.com> <3AF1DAA0.3060702@cygnus.com> <200105071610.TAA24144@is.elta.co.il> <200105130831.LAA13751@is.elta.co.il> X-SW-Source: 2001-05/msg00280.html Eli Zaretskii wrote: > > > 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? > I looked at completer.c and cli-cmds.c. Approved. Thanks. Fernando > > 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); > > } > > -- Fernando Nasser Red Hat Canada Ltd. E-Mail: fnasser@redhat.com 2323 Yonge Street, Suite #300 Toronto, Ontario M4P 2C9