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

Eli Zaretskii
2001-05-13T01:29:00Z

> 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?

> 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);
> }
>