From e54dfb428420943a73e3b2098dc5c694c4fdf58d Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Wed, 10 Oct 2007 04:32:15 +0000 Subject: [PATCH] Some Windows fixes to allow builds to succeed. --- ChangeLog | 12 ++++++++++++ build_w32.bat | 5 +++++ dir.c | 31 +++++++++++++++++-------------- make.h | 2 +- 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index fa6847d2..c9d3eb16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-10-10 Eli Zaretskii + + * dir.c (find_directory) [WINDOWS32]: Remove trailing slashes from + pathnames, with const strings. + * build_w32.bat [WINDOWS32]: If no config.h.W32 exists, create one + from the template (used for building from CVS, not a dist). + +2007-10-10 Paul Smith + + * make.h: Add a prototype for w32_kill() (change suggested by + Yongwei Wu ). + 2007-08-15 Paul Smith * doc/make.texi (GNU Free Documentation License): The fdl.texi diff --git a/build_w32.bat b/build_w32.bat index 7d10e61c..38c9e806 100644 --- a/build_w32.bat +++ b/build_w32.bat @@ -16,6 +16,11 @@ rem rem You should have received a copy of the GNU General Public License along rem with this program. If not, see . +if exist config.h.W32 GoTo NotCVS +sed -n "s/^AC_INIT(\[GNU make\],\[\([^]]\+\)\].*/s,%%VERSION%%,\1,g/p" configure.in > config.h.W32.sed +echo s,%%PACKAGE%%,make,g >> config.h.W32.sed +sed -f config.h.W32.sed config.h.W32.template > config.h.W32 +:NotCVS if not exist config.h copy config.h.W32 config.h cd w32\subproc echo "Creating the subproc library" diff --git a/dir.c b/dir.c index 7a3cdba5..4f3732a1 100644 --- a/dir.c +++ b/dir.c @@ -454,26 +454,29 @@ find_directory (const char *name) /* The directory is not in the name hash table. Find its device and inode numbers, and look it up by them. */ -#ifdef WINDOWS32 - /* Remove any trailing '\'. Windows32 stat fails even on valid - directories if they end in '\'. */ - if (p[-1] == '\\') - p[-1] = '\0'; -#endif - #ifdef VMS r = vmsstat_dir (name, &st); +#elif defined(WINDOWS32) + { + char tem[MAXPATHLEN], *tstart, *tend; + + /* Remove any trailing slashes. Windows32 stat fails even on + valid directories if they end in a slash. */ + memcpy (tem, name, p - name + 1); + tstart = tem; + if (tstart[1] == ':') + tstart += 2; + for (tend = tem + (p - name - 1); + tend > tstart && (*tend == '/' || *tend == '\\'); + tend--) + *tend = '\0'; + + r = stat (tem, &st); + } #else EINTRLOOP (r, stat (name, &st)); #endif -#ifdef WINDOWS32 - /* Put back the trailing '\'. If we don't, we're permanently - truncating the value! */ - if (p[-1] == '\0') - p[-1] = '\\'; -#endif - if (r < 0) { /* Couldn't stat the directory. Mark this by diff --git a/make.h b/make.h index b379ff60..6cdcfb96 100644 --- a/make.h +++ b/make.h @@ -329,7 +329,7 @@ char *strsignal (int signum); # define kill(_pid,_sig) w32_kill((_pid),(_sig)) void sync_Path_environment (void); -int kill (int pid, int sig); +int w32_kill (int pid, int sig); char *end_of_token_w32 (const char *s, char stopchar); int find_and_set_default_shell (const char *token);