* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
@ 2001-05-07 11:36 David Taylor
2001-05-08 0:12 ` Eli Zaretskii
0 siblings, 1 reply; 12+ messages in thread
From: David Taylor @ 2001-05-07 11:36 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: ac131313, danny_r_smith_2001, gdb, mingw-users, gdb-patches
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.
I was surprised that you sent this to gdb rather than gdb-patches. I
added gdb-patches to the cc list.
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.
The defs.h part of this patch is approved.
* 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".
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
2001-05-07 11:36 [RFA] Remove OS-specific defines (was: _WIN32?) David Taylor
@ 2001-05-08 0:12 ` Eli Zaretskii
0 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2001-05-08 0:12 UTC (permalink / raw)
To: David Taylor; +Cc: ac131313, danny_r_smith_2001, mingw-users, gdb-patches
On Mon, 7 May 2001, David Taylor wrote:
> I was surprised that you sent this to gdb rather than gdb-patches.
My bad, sorry.
> * defs.h (SLASH_P, SLASH_CHAR, ROOTED_P): Remove definitions.
> (SLASH_STRING): Define only for _WIN32.
>
> The defs.h part of this patch is approved.
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
2001-06-12 17:14 ` Christopher Faylor
@ 2001-06-13 2:08 ` Eli Zaretskii
0 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2001-06-13 2:08 UTC (permalink / raw)
To: Christopher Faylor; +Cc: kevinb, gdb-patches
On Tue, 12 Jun 2001, Christopher Faylor wrote:
> On Sun, Jun 10, 2001 at 04:29:46PM +0300, Eli Zaretskii wrote:
> >This time is now. Chris, is the patch below okay with you?
>
> Looks ok to me.
Committed.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
2001-06-10 6:28 ` Eli Zaretskii
@ 2001-06-12 17:14 ` Christopher Faylor
2001-06-13 2:08 ` Eli Zaretskii
0 siblings, 1 reply; 12+ messages in thread
From: Christopher Faylor @ 2001-06-12 17:14 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: kevinb, gdb-patches
On Sun, Jun 10, 2001 at 04:29:46PM +0300, Eli Zaretskii wrote:
>This time is now. Chris, is the patch below okay with you?
Looks ok to me.
cgf
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
[not found] ` <1010507173855.ZM18890@ocotillo.lan>
2001-05-07 11:24 ` Eli Zaretskii
@ 2001-06-10 6:28 ` Eli Zaretskii
2001-06-12 17:14 ` Christopher Faylor
1 sibling, 1 reply; 12+ messages in thread
From: Eli Zaretskii @ 2001-06-10 6:28 UTC (permalink / raw)
To: kevinb; +Cc: gdb-patches, Christopher Faylor
> Date: Mon, 7 May 2001 10:38:55 -0700
> From: Kevin Buettner <kevinb@cygnus.com>
>
> On May 7, 7:10pm, Eli Zaretskii wrote:
>
> > * 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".
>
> Your changes to solib.c are approved. (FWIW, I glanced over your
> changes to the other files and they look good too.)
>
> > * defs.h (SLASH_P, SLASH_CHAR, ROOTED_P): Remove definitions.
> > (SLASH_STRING): Define only for _WIN32.
>
> Once your changes to the other .c files are approved, I think this
> one can be regarded as an obvious change.
>
> Don't forget to also remove the definitions of SLASH_P, SLASH_CHAR, and
> ROOTED_P in config/i386/xm-cygwin.h and config/i386/xm-go32.h.
This time is now. Chris, is the patch below okay with you?
2001-06-10 Eli Zaretskii <eliz@is.elta.co.il>
* config/i386/xm-go32.h (SLASH_P, ROOTED_P, SLASH_CHAR)
(SLASH_STRING): Remove unised definitions
* config/i386/xm-go32.h: Likewise.
--- gdb/config/i386/xm-go32.h~0 Mon Apr 3 17:44:56 2000
+++ gdb/config/i386/xm-go32.h Sun Jun 10 15:50:42 2001
@@ -24,13 +24,6 @@
#define GDBINIT_FILENAME "gdb.ini"
-#define SLASH_P(X) ((X)=='\\' || (X) == '/')
-
-#define ROOTED_P(X) ((SLASH_P((X)[0])) || ((X)[0] && (X)[1] ==':'))
-
-#define SLASH_CHAR '/'
-#define SLASH_STRING "/"
-
#define CRLF_SOURCE_FILES
#define DIRNAME_SEPARATOR ';'
--- gdb/config/i386/xm-cygwin.h~0 Fri Mar 2 05:14:48 2001
+++ gdb/config/i386/xm-cygwin.h Sun Jun 10 16:00:46 2001
@@ -24,11 +24,6 @@
#define GDBINIT_FILENAME "gdb.ini"
-#define SLASH_P(X) ((X)=='\\' || (X) == '/')
-#define ROOTED_P(X) ((SLASH_P((X)[0]))|| ((X)[1] ==':'))
-#define SLASH_CHAR '/'
-#define SLASH_STRING "/"
-
/* Define this if source files use \r\n rather than just \n. */
#define CRLF_SOURCE_FILES
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
2001-05-14 13:18 ` Andrew Cagney
@ 2001-06-04 0:46 ` Eli Zaretskii
0 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2001-06-04 0:46 UTC (permalink / raw)
To: Andrew Cagney; +Cc: fnasser, gdb-patches
On Mon, 14 May 2001, Andrew Cagney wrote:
> > I looked at completer.c and cli-cmds.c. Approved.
> >
> >
> > Thanks!
> >
> > Who is the responsible maintainer of source.c? I cannot figure that
> > out from MAINTAINERS.
>
>
> FYI, I've been working on the assumption that everyone has decided this
> change is obvious.
Commited (sorry for a long delay).
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
2001-05-13 23:34 ` Eli Zaretskii
@ 2001-05-14 13:18 ` Andrew Cagney
2001-06-04 0:46 ` Eli Zaretskii
0 siblings, 1 reply; 12+ messages in thread
From: Andrew Cagney @ 2001-05-14 13:18 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: fnasser, gdb-patches
> I looked at completer.c and cli-cmds.c. Approved.
>
>
> Thanks!
>
> Who is the responsible maintainer of source.c? I cannot figure that
> out from MAINTAINERS.
FYI, I've been working on the assumption that everyone has decided this
change is obvious.
enjoy, and thanks for cleaning these out.
Andrew
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
2001-05-13 7:09 ` Fernando Nasser
@ 2001-05-13 23:34 ` Eli Zaretskii
2001-05-14 13:18 ` Andrew Cagney
0 siblings, 1 reply; 12+ messages in thread
From: Eli Zaretskii @ 2001-05-13 23:34 UTC (permalink / raw)
To: fnasser; +Cc: gdb-patches
> Date: Sun, 13 May 2001 10:07:00 -0400
> From: Fernando Nasser <fnasser@redhat.com>
>
> 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!
Who is the responsible maintainer of source.c? I cannot figure that
out from MAINTAINERS.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
2001-05-13 1:29 ` Eli Zaretskii
@ 2001-05-13 7:09 ` Fernando Nasser
2001-05-13 23:34 ` Eli Zaretskii
0 siblings, 1 reply; 12+ messages in thread
From: Fernando Nasser @ 2001-05-13 7:09 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: gdb-patches
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
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
[not found] ` <200105071610.TAA24144@is.elta.co.il>
[not found] ` <1010507173855.ZM18890@ocotillo.lan>
@ 2001-05-13 1:29 ` Eli Zaretskii
2001-05-13 7:09 ` Fernando Nasser
1 sibling, 1 reply; 12+ messages in thread
From: Eli Zaretskii @ 2001-05-13 1:29 UTC (permalink / raw)
To: gdb-patches
> 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);
> }
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
[not found] <3AF6EB58.1020904@cygnus.com>
@ 2001-05-10 3:31 ` Eli Zaretskii
0 siblings, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2001-05-10 3:31 UTC (permalink / raw)
To: Andrew Cagney; +Cc: kevinb, gdb-patches
On Mon, 7 May 2001, Andrew Cagney wrote:
> > Btw, is it perhaps a good idea to add to gdbint.texinfo some
> > guidelines about writing portable code which handles file names,
> > including the list of these macros? Andrew?
>
> Yes, and yes.
I committed the following patch:
--- gdb/doc/gdbint.t~0 Sun Apr 1 11:27:48 2001
+++ gdb/doc/gdbint.texinfo Tue May 8 16:24:42 2001
@@ -4133,7 +4133,7 @@
All static functions must be declared in a block near the top of the
source file.
-@subsection Clean Design
+@subsection Clean Design and Portable Implementation
@cindex design
In addition to getting the syntax right, there's the little question of
@@ -4219,6 +4219,67 @@
duplicated code. Other times, duplicating a few lines of code here or
there is much cleaner than introducing a large number of small hooks.
+@cindex portable file name handling
+@cindex file names, portability
+One particularly notorious area where system dependencies tend to
+creep in is handling of file names. The mainline @value{GDBN} code
+assumes Posix semantics of file names: absolute file names begin with
+a forward slash @file{/}, slashes are used to separate leading
+directories, case-sensitive file names. These assumptions are not
+necessarily true on non-Posix systems such as MS-Windows. To avoid
+system-dependent code where you need to take apart or construct a file
+name, use the following portable macros:
+
+@table @code
+@findex HAVE_DOS_BASED_FILE_SYSTEM
+@item HAVE_DOS_BASED_FILE_SYSTEM
+This preprocessing symbol is defined to a non-zero value on hosts
+whose filesystems belong to the MS-DOS/MS-Windows family. Use this
+symbol to write conditional code which should only be compiled for
+such hosts.
+
+@findex IS_DIR_SEPARATOR
+@item IS_DIR_SEPARATOR (@var{c}
+Evaluates to a non-zero value if @var{c} is a directory separator
+character. On Unix and GNU/Linux systems, only a slash @file{/} is
+such a character, but on Windows, both @file{/} and @file{\} will
+pass.
+
+@findex IS_ABSOLUTE_PATH
+@item IS_ABSOLUTE_PATH (@var{file})
+Evaluates to a non-zero value if @var{file} is an absolute file name.
+For Unix and GNU/Linux hosts, a name which begins with a slash
+@file{/} is absolute. On DOS and Windows, @file{d:/foo} and
+@file{x:\bar} are also absolute file names.
+
+@findex FILENAME_CMP
+@item FILENAME_CMP (@var{f1}, @var{f2})
+Calls a function which compares file names @var{f1} and @var{f2} as
+appropriate for the underlying host filesystem. For Posix systems,
+this simply calls @code{strcmp}; on case-insensitive filesystems it
+will call @code{strcasecmp} instead.
+
+@findex DIRNAME_SEPARATOR
+@item DIRNAME_SEPARATOR
+Evaluates to a character which separates directories in
+@code{PATH}-style lists, typically held in environment variables.
+This character is @samp{:} on Unix, @samp{;} on DOS and Windows.
+
+@findex SLASH_STRING
+@item SLASH_STRING
+This evaluates to a constant string you should use to produce an
+absolute filename from leading directories and the file's basename.
+@code{SLASH_STRING} is @code{"/"} on most systems, but might be
+@code{"\\"} for some Windows-based ports.
+@end table
+
+In addition to using these macros, be sure to use portable library
+functions whenever possible. For example, to extract a directory or a
+basename part from a file name, use the @code{dirname} and
+@code{basename} library functions (available in @code{libiberty} for
+platforms which don't provide them), instead of searching for a slash
+with @code{strrchr}.
+
Another way to generalize @value{GDBN} along a particular interface is with an
attribute struct. For example, @value{GDBN} has been generalized to handle
multiple kinds of remote interfaces---not by @code{#ifdef}s everywhere, but
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFA] Remove OS-specific defines (was: _WIN32?)
[not found] ` <1010507173855.ZM18890@ocotillo.lan>
@ 2001-05-07 11:24 ` Eli Zaretskii
2001-06-10 6:28 ` Eli Zaretskii
1 sibling, 0 replies; 12+ messages in thread
From: Eli Zaretskii @ 2001-05-07 11:24 UTC (permalink / raw)
To: gdb-patches
I see that I sent the original RFA to a wrong address. Sorry, I will
resend.
Here's my reply to Kevin's approval:
> Date: Mon, 7 May 2001 10:38:55 -0700
> From: Kevin Buettner <kevinb@cygnus.com>
>
> On May 7, 7:10pm, Eli Zaretskii wrote:
>
> > * 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".
>
> Your changes to solib.c are approved. (FWIW, I glanced over your
> changes to the other files and they look good too.)
Thanks for reviewing them so soon.
> Don't forget to also remove the definitions of SLASH_P, SLASH_CHAR, and
> ROOTED_P in config/i386/xm-cygwin.h and config/i386/xm-go32.h.
Yes, it's in the pipeline ;-) I just wanted to hear from Chris, at
the very least, before futzing with his files.
Btw, is it perhaps a good idea to add to gdbint.texinfo some
guidelines about writing portable code which handles file names,
including the list of these macros? Andrew?
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2001-06-13 2:08 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-05-07 11:36 [RFA] Remove OS-specific defines (was: _WIN32?) David Taylor
2001-05-08 0:12 ` Eli Zaretskii
[not found] <3AF6EB58.1020904@cygnus.com>
2001-05-10 3:31 ` Eli Zaretskii
[not found] <20010503211502.21716.qmail@web6401.mail.yahoo.com>
[not found] ` <3AF1DAA0.3060702@cygnus.com>
[not found] ` <200105071610.TAA24144@is.elta.co.il>
[not found] ` <1010507173855.ZM18890@ocotillo.lan>
2001-05-07 11:24 ` Eli Zaretskii
2001-06-10 6:28 ` Eli Zaretskii
2001-06-12 17:14 ` Christopher Faylor
2001-06-13 2:08 ` Eli Zaretskii
2001-05-13 1:29 ` Eli Zaretskii
2001-05-13 7:09 ` Fernando Nasser
2001-05-13 23:34 ` Eli Zaretskii
2001-05-14 13:18 ` Andrew Cagney
2001-06-04 0:46 ` Eli Zaretskii
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox