Re: [RFA] Remove OS-specific defines (was: _WIN32?)

Fernando Nasser
2001-05-13T07:09:00Z

Eli Zaretskii wrote:
>
> > Date: Mon, 7 May 2001 19:10:59 +0300 (IDT)
> > From: Eli Zaretskii <eliz@is.elta.co.il>
> >
> > 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 <eliz@is.elta.co.il>
> >
> > * 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