git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: Johannes Sixt <johannes.sixt@telecom.at>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: git@vger.kernel.org
Subject: Re: [PATCH 03/40] Add target architecture MinGW.
Date: Tue, 11 Mar 2008 22:30:56 +0100	[thread overview]
Message-ID: <200803112230.57004.johannes.sixt@telecom.at> (raw)
In-Reply-To: <200803052221.12495.johannes.sixt@telecom.at>

On Wednesday 05 March 2008 22:21, Johannes Sixt wrote:
> I've now created compat/mingw.h. Below is the interdiff. Of course, it
> mostly only moves code around. But you might want to look at at mkstemp,
> PATH_SEP, PRIuMAX, and has_dos_drive_prefix. Notice also that I include
> compat/mingw.h early in git-compat-util.h instead of late.

I must admit I was very sloppy with the previous round. I had to make 
has_dos_drive_prefix a macro; otherwise we would get numerous warnings 
about "undeclared function isalpha", because the declaration appears later in 
git-compat-util.h.

On the positive side, we can now reuse Michal's vsnprintf wrapper, which fixes 
snprintf, too, (which was not the case previously). Note that on Windows we 
have to adjust the size parameter.

There's also a change in the setup of stderr in start_command() that 
corresponds to ce2cf27adc. And I made is_dir_sep into a conditional macro 
similar to has_dos_drive_prefix to get rid of another #ifdef/#endif.

-- Hannes

Here's the interdiff:

diff --git a/Makefile b/Makefile
index 68d60e7..6619523 100644
--- a/Makefile
+++ b/Makefile
@@ -309,7 +309,7 @@ LIB_H = \
 	tree-walk.h log-tree.h dir.h path-list.h unpack-trees.h builtin.h \
 	utf8.h reflog-walk.h patch-ids.h attr.h decorate.h progress.h \
 	mailmap.h remote.h parse-options.h transport.h diffcore.h hash.h fsck.h \
-	pack-revindex.h
+	pack-revindex.h compat/mingw.h
 
 DIFF_OBJS = \
 	diff.o diff-lib.o diffcore-break.o diffcore-order.o \
@@ -549,10 +549,12 @@ ifneq (,$(findstring MINGW,$(uname_S)))
 	NO_C99_FORMAT = YesPlease
 	NO_STRTOUMAX = YesPlease
 	NO_MKDTEMP = YesPlease
+	SNPRINTF_RETURNS_BOGUS = YesPlease
 	NO_SVN_TESTS = YesPlease
 	NO_PERL_MAKEMAKER = YesPlease
 	NO_POSIX_ONLY_PROGRAMS = YesPlease
 	COMPAT_CFLAGS += -D__USE_MINGW_ACCESS -DNOGDI -Icompat
+	COMPAT_CFLAGS += -DSNPRINTF_SIZE_CORR=1
 	COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
 	COMPAT_OBJS += compat/mingw.o compat/fnmatch.o compat/regex.o
 	EXTLIBS += -lws2_32
diff --git a/compat/mingw.c b/compat/mingw.c
index 6733727..7c8fd0e 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -847,40 +847,6 @@ int mingw_rename(const char *pold, const char *pnew)
 	return -1;
 }
 
-#undef vsnprintf
-/* Note that the size parameter specifies the available space, i.e.
- * includes the trailing NUL byte; but Windows's vsnprintf expects the
- * number of characters to write without the trailing NUL.
- */
-
-/* This is out of line because it uses alloca() behind the scenes,
- * which must not be called in a loop (alloca() reclaims the allocations
- * only at function exit).
- */
-static int try_vsnprintf(size_t size, const char *fmt, va_list args)
-{
-	char buf[size];	/* gcc-ism */
-	return vsnprintf(buf, size-1, fmt, args);
-}
-
-int mingw_vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
-{
-	int len;
-	if (size > 0) {
-		len = vsnprintf(buf, size-1, fmt, args);
-		if (len >= 0)
-			return len;
-	}
-	/* ouch, buffer too small; need to compute the size */
-	if (size < 250)
-		size = 250;
-	do {
-		size *= 4;
-		len = try_vsnprintf(size, fmt, args);
-	} while (len < 0);
-	return len;
-}
-
 struct passwd *getpwuid(int uid)
 {
 	static char user_name[100];
diff --git a/compat/mingw.h b/compat/mingw.h
index d92c631..c7db345 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -174,9 +174,6 @@ int mingw_fstat(int fd, struct mingw_stat *buf);
 static inline int mingw_stat(const char *file_name, struct mingw_stat *buf)
 { return mingw_lstat(file_name, buf); }
 
-int mingw_vsnprintf(char *buf, size_t size, const char *fmt, va_list args);
-#define vsnprintf mingw_vsnprintf
-
 pid_t mingw_spawnvpe(const char *cmd, const char **argv, char **env);
 void mingw_execvp(const char *cmd, char *const *argv);
 #define execvp mingw_execvp
@@ -192,12 +189,8 @@ sig_handler_t mingw_signal(int sig, sig_handler_t 
handler);
  * git specific compatibility
  */
 
-static inline int has_dos_drive_prefix(const char *path)
-{
-	return isalpha(*path) && path[1] == ':';
-}
-#define has_dos_drive_prefix has_dos_drive_prefix
-
+#define has_dos_drive_prefix(path) (isalpha(*(path)) && (path)[1] == ':')
+#define is_dir_sep(c) ((c) == '/' || (c) == '\\')
 #define PATH_SEP ';'
 #define PRIuMAX "I64u"
 
diff --git a/compat/snprintf.c b/compat/snprintf.c
index dbfc2d6..480b66f 100644
--- a/compat/snprintf.c
+++ b/compat/snprintf.c
@@ -1,12 +1,21 @@
 #include "../git-compat-util.h"
 
+/*
+ * The size parameter specifies the available space, i.e. includes
+ * the trailing NUL byte; but Windows's vsnprintf expects the
+ * number of characters to write without the trailing NUL.
+ */
+#ifndef SNPRINTF_SIZE_CORR
+#define SNPRINTF_SIZE_CORR 0
+#endif
+
 #undef vsnprintf
 int git_vsnprintf(char *str, size_t maxsize, const char *format, va_list ap)
 {
 	char *s;
 	int ret;
 
-	ret = vsnprintf(str, maxsize, format, ap);
+	ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap);
 	if (ret != -1)
 		return ret;
 
@@ -20,7 +29,7 @@ int git_vsnprintf(char *str, size_t maxsize, const char 
*format, va_list ap)
 		if (! str)
 			break;
 		s = str;
-		ret = vsnprintf(str, maxsize, format, ap);
+		ret = vsnprintf(str, maxsize-SNPRINTF_SIZE_CORR, format, ap);
 	}
 	free(s);
 	return ret;
diff --git a/git-compat-util.h b/git-compat-util.h
index 08f764e..2889146 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -117,6 +117,10 @@
 #define has_dos_drive_prefix(path) 0
 #endif
 
+#ifndef is_dir_sep
+#define is_dir_sep(c) ((c) == '/')
+#endif
+
 #ifdef __GNUC__
 #define NORETURN __attribute__((__noreturn__))
 #else
diff --git a/run-command.c b/run-command.c
index aba2bf2..2ce8c2b 100644
--- a/run-command.c
+++ b/run-command.c
@@ -132,6 +132,14 @@ int start_command(struct child_process *cmd)
 		dup2(cmd->in, 0);
 	}
 
+	if (cmd->no_stderr) {
+		s2 = dup(2);
+		dup_devnull(2);
+	} else if (need_err) {
+		s2 = dup(2);
+		dup2(fderr[1], 2);
+	}
+
 	if (cmd->no_stdout) {
 		s1 = dup(1);
 		dup_devnull(1);
@@ -146,14 +154,6 @@ int start_command(struct child_process *cmd)
 		dup2(cmd->out, 1);
 	}
 
-	if (cmd->no_stderr) {
-		s2 = dup(2);
-		dup_devnull(2);
-	} else if (need_err) {
-		s2 = dup(2);
-		dup2(fderr[1], 2);
-	}
-
 	if (cmd->dir)
 		die("chdir in start_command() not implemented");
 	if (cmd->env) {
diff --git a/setup.c b/setup.c
index d1a862e..eea1038 100644
--- a/setup.c
+++ b/setup.c
@@ -4,12 +4,6 @@
 static int inside_git_dir = -1;
 static int inside_work_tree = -1;
 
-#ifdef __MINGW32__
-static inline int is_dir_sep(char c) { return c == '/' || c == '\\'; }
-#else
-static inline int is_dir_sep(char c) { return c == '/'; }
-#endif
-
 static int sanitary_path_copy(char *dst, const char *src)
 {
 	char *dst0;

  parent reply	other threads:[~2008-03-11 21:31 UTC|newest]

Thread overview: 138+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-27 18:54 [PATCH 00/40] MinGW port Johannes Sixt
2008-02-27 18:54 ` [PATCH 01/40] Add compat/regex.[ch] and compat/fnmatch.[ch] Johannes Sixt
2008-02-27 23:43   ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 02/40] Compile some programs only conditionally Johannes Sixt
2008-02-28 11:57   ` Johannes Schindelin
2008-02-28 20:30     ` Johannes Sixt
2008-02-29  0:47       ` Johannes Schindelin
2008-02-29 20:58         ` Johannes Sixt
2008-02-29 21:53           ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 03/40] Add target architecture MinGW Johannes Sixt
2008-02-28 12:05   ` Johannes Schindelin
2008-02-28 12:57     ` Paolo Bonzini
2008-02-28 14:56       ` Johannes Schindelin
2008-02-28 20:40     ` Johannes Sixt
2008-02-29  1:07       ` Johannes Schindelin
2008-02-29 21:03         ` Johannes Sixt
2008-02-29 21:54           ` Johannes Schindelin
2008-03-05 21:21     ` Johannes Sixt
2008-03-05 22:18       ` Johannes Schindelin
2008-03-05 22:22         ` Junio C Hamano
2008-03-05 22:28           ` Johannes Schindelin
2008-03-05 22:51             ` Junio C Hamano
2008-03-06  0:11               ` Johannes Schindelin
2008-03-06  1:14             ` [PATCH 1/2] Add strbuf_initf() Johannes Schindelin
2008-03-06  6:33               ` Mike Hommey
2008-03-06  9:03                 ` Reece Dunn
2008-03-06 10:55                   ` Johannes Schindelin
2008-03-06 11:53                     ` Reece Dunn
2008-03-06 12:52                       ` Johannes Schindelin
2008-03-06 16:29                         ` [PATCH 1/2 v2] Add strbuf_vaddf(), use it in strbuf_addf(), and add strbuf_initf() Johannes Schindelin
2008-03-06 16:38                           ` Johannes Sixt
2008-03-06 16:47                             ` Johannes Sixt
2008-03-06 16:59                               ` Johannes Schindelin
2008-03-06 18:18                     ` [PATCH 1/2] Add strbuf_initf() Kristian Høgsberg
2008-03-06 18:26                       ` Johannes Schindelin
2008-03-06 18:35                         ` Kristian Høgsberg
2008-03-06 19:10                         ` Mike Hommey
2008-03-06 10:53                 ` Johannes Schindelin
2008-03-06 12:09                   ` Jeff King
2008-03-06  1:15             ` [PATCH 2/2] format-patch: add --reviewed-by=<ident> Johannes Schindelin
2008-03-06  2:40               ` Junio C Hamano
2008-03-06 10:40                 ` Johannes Schindelin
2008-03-06 20:38         ` [PATCH 03/40] Add target architecture MinGW Johannes Sixt
2008-03-11 21:30       ` Johannes Sixt [this message]
2008-03-11 23:28         ` Johannes Schindelin
2008-03-12 22:59           ` Johannes Sixt
2008-03-12 23:06             ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 04/40] Windows: Use the Windows style PATH separator ';' Johannes Sixt
2008-02-28  9:25   ` Paolo Bonzini
2008-02-28 20:43     ` Johannes Sixt
2008-02-29  1:09       ` Johannes Schindelin
2008-02-29  7:57       ` Paolo Bonzini
2008-02-29 12:19         ` Johannes Schindelin
2008-02-29 12:45           ` Paolo Bonzini
2008-02-29 12:59             ` Johannes Schindelin
2008-02-28 17:57   ` Junio C Hamano
2008-02-27 18:54 ` [PATCH 05/40] Windows: Strip ".exe" from the program name Johannes Sixt
2008-02-27 18:54 ` [PATCH 06/40] Windows: Implement a wrapper of the open() function Johannes Sixt
2008-02-27 18:54 ` [PATCH 07/40] Windows: A minimal implemention of getpwuid() Johannes Sixt
2008-02-27 18:54 ` [PATCH 08/40] Windows: always chmod(, 0666) before unlink() Johannes Sixt
2008-02-28 12:09   ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 09/40] Windows: Work around misbehaved rename() Johannes Sixt
2008-02-27 18:54 ` [PATCH 10/40] Windows: Treat Windows style path names Johannes Sixt
2008-02-28 12:18   ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 11/40] Windows: Handle absolute paths in safe_create_leading_directories() Johannes Sixt
2008-02-27 18:54 ` [PATCH 12/40] Windows: Implement gettimeofday() Johannes Sixt
2008-02-27 18:54 ` [PATCH 13/40] Windows: Fix PRIuMAX definition Johannes Sixt
2008-02-28 12:21   ` Johannes Schindelin
2008-02-28 20:45     ` Johannes Sixt
2008-02-27 18:54 ` [PATCH 14/40] Windows: Implement setitimer() and sigaction() Johannes Sixt
2008-02-27 18:54 ` [PATCH 15/40] Windows: A work-around for a misbehaved vsnprintf Johannes Sixt
2008-02-27 18:54 ` [PATCH 16/40] Windows: Wrap execve so that shell scripts can be invoked Johannes Sixt
2008-02-27 18:54 ` [PATCH 17/40] Windows: A pipe() replacement whose ends are not inherited to children Johannes Sixt
2008-02-27 18:54 ` [PATCH 18/40] Windows: Implement start_command() Johannes Sixt
2008-02-27 18:54 ` [PATCH 19/40] Windows: Change the name of hook scripts to make them not executable Johannes Sixt
2008-02-28 15:20   ` Johannes Schindelin
2008-02-28 20:48     ` Johannes Sixt
2008-02-29  1:11       ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 20/40] Windows: A rudimentary poll() emulation Johannes Sixt
2008-02-28  9:36   ` Paolo Bonzini
2008-02-28 20:49     ` Johannes Sixt
     [not found]       ` <5d46db230802282019o21f9ed9fo75fed8744625289e@mail.gmail.com>
     [not found]         ` <200802292216.25014.johannes.sixt@telecom.at>
2008-02-29 21:47           ` Govind Salinas
2008-02-29 22:16             ` Johannes Sixt
2008-02-29 23:17             ` Brian Dessent
2008-03-01 15:48       ` Robin Rosenberg
2008-03-01 19:24         ` Johannes Sixt
2008-02-27 18:54 ` [PATCH 21/40] Windows: Disambiguate DOS style paths from SSH URLs Johannes Sixt
2008-02-28 15:22   ` Johannes Schindelin
2008-02-28 20:51     ` Johannes Sixt
2008-02-27 18:54 ` [PATCH 22/40] Windows: Implement asynchronous functions as threads Johannes Sixt
2008-02-28 15:28   ` Johannes Schindelin
2008-02-28 17:48     ` Paul Franz
2008-02-29  1:27       ` Johannes Schindelin
2008-02-29  1:46         ` Paul Franz
2008-02-29  1:54           ` Johannes Schindelin
2008-02-29  3:08             ` Paul Franz
2008-02-29  7:51               ` Junio C Hamano
2008-02-29 11:45                 ` Paul Franz
2008-02-29 10:26               ` Johannes Schindelin
2008-02-28 21:01     ` Johannes Sixt
2008-02-29  1:17       ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 23/40] Windows: Local clone must use the drive letter in absolute paths Johannes Sixt
2008-02-28 15:31   ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 24/40] Windows: Work around incompatible sort and find Johannes Sixt
2008-02-27 18:54 ` [PATCH 25/40] Windows: Implement a cpio emulation in git-clone.sh Johannes Sixt
2008-02-27 18:54 ` [PATCH 26/40] Windows: Implement wrappers for gethostbyname(), socket(), and connect() Johannes Sixt
2008-02-27 18:54 ` [PATCH 27/40] Windows: Implement a custom spawnve() Johannes Sixt
2008-02-28 15:36   ` Johannes Schindelin
2008-02-28 21:04     ` Johannes Sixt
2008-02-29  1:18       ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 28/40] Windows: Add a new lstat and fstat implementation based on Win32 API Johannes Sixt
2008-02-27 18:54 ` [PATCH 29/40] Windows: Use a customized struct stat that also has the st_blocks member Johannes Sixt
2008-02-27 18:54 ` [PATCH 30/40] Turn builtin_exec_path into a function Johannes Sixt
2008-02-27 18:54 ` [PATCH 31/40] Compute the ultimate fallback for exec_path from the program invocation Johannes Sixt
2008-02-27 18:54 ` [PATCH 32/40] Windows: Use a relative default template_dir and ETC_GITCONFIG Johannes Sixt
2008-02-27 18:54 ` [PATCH 33/40] When installing, be prepared that template_dir may be relative Johannes Sixt
2008-02-28  9:49   ` Paolo Bonzini
2008-02-28 15:45   ` Johannes Schindelin
2008-02-28 15:57     ` Paolo Bonzini
2008-02-28 21:12     ` Johannes Sixt
2008-02-29  1:21       ` Johannes Schindelin
2008-02-27 18:54 ` [PATCH 34/40] Windows: Make the pager work Johannes Sixt
2008-02-27 18:54 ` [PATCH 35/40] Windows: Work around an oddity when a pipe with no reader is written to Johannes Sixt
2008-02-27 18:54 ` [PATCH 36/40] Avoid the "dup dance" in wt_status_print_verbose() when possible Johannes Sixt
2008-02-28 15:48   ` Johannes Schindelin
2008-02-27 18:55 ` [PATCH 37/40] Windows: Make 'git help -a' work Johannes Sixt
2008-02-28  9:52   ` Paolo Bonzini
2008-02-27 18:55 ` [PATCH 38/40] Windows: TMP and TEMP environment variables specify a temporary directory Johannes Sixt
2008-02-27 18:55 ` [PATCH 39/40] Windows: Fix ntohl() related warnings about printf formatting Johannes Sixt
2008-02-27 18:55 ` [PATCH 40/40] compat/pread.c: Add foward decl to fix warning Johannes Sixt
2008-02-28 15:51   ` Johannes Schindelin
2008-02-27 22:01 ` [PATCH 00/40] MinGW port Marius Storm-Olsen
2008-02-27 23:34   ` Martin Langhoff
2008-02-28  3:38     ` Nguyen Thai Ngoc Duy
2008-02-27 23:58 ` Johannes Schindelin
2008-03-02 21:20 ` Johannes Sixt
2008-03-02 22:07   ` Johannes Schindelin
2008-03-03 18:34     ` Johannes Sixt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200803112230.57004.johannes.sixt@telecom.at \
    --to=johannes.sixt@telecom.at \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).