]> git.ipfire.org Git - thirdparty/git.git/commitdiff
mingw.c: Fix complier warnings for a 64 bit msvc
authorSören Krecker <soekkle@freenet.de>
Thu, 17 Oct 2024 17:18:20 +0000 (19:18 +0200)
committerTaylor Blau <me@ttaylorr.com>
Thu, 17 Oct 2024 18:42:27 +0000 (14:42 -0400)
Remove some complier warnings from msvc in compat/mingw.c for value
truncation from 64 bit to 32 bit integers.

Compiling compat/mingw.c under a 64 bit version of msvc produces
warnings. An "int" is 32 bit, and ssize_t or size_t should be 64 bit
long. Prepare compat/vcbuild/include/unistd.h to have a 64 bit type
_ssize_t, when _WIN64 is defined and 32 bit otherwise.

Further down in this include file, as before, ssize_t is defined as
_ssize_t, if needed.

Use size_t instead of int for all variables that hold the result of
strlen() or wcslen() (which cannot be negative).

Use ssize_t to hold the return value of read().

Signed-off-by: Sören Krecker <soekkle@freenet.de>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
compat/compiler.h
compat/mingw.c
compat/vcbuild/include/unistd.h

index e9ad9db84f22797e745d7a6c4e77021c3cf1814c..e12e426404ab0c299175aba335041b44aca2cc7b 100644 (file)
@@ -9,7 +9,7 @@
 
 static inline void get_compiler_info(struct strbuf *info)
 {
-       int len = info->len;
+       size_t len = info->len;
 #ifdef __clang__
        strbuf_addf(info, "clang: %s\n", __clang_version__);
 #elif defined(__GNUC__)
@@ -27,7 +27,7 @@ static inline void get_compiler_info(struct strbuf *info)
 
 static inline void get_libc_info(struct strbuf *info)
 {
-       int len = info->len;
+       size_t len = info->len;
 
 #ifdef __GLIBC__
        strbuf_addf(info, "glibc: %s\n", gnu_get_libc_version());
index 0e851ecae29b90347bde8c40c6c0bb9b3c1d5597..0ff550cef3e673de98a34e896046a0807e9f089e 100644 (file)
@@ -782,7 +782,7 @@ static inline void filetime_to_timespec(const FILETIME *ft, struct timespec *ts)
  */
 static int has_valid_directory_prefix(wchar_t *wfilename)
 {
-       int n = wcslen(wfilename);
+       size_t n = wcslen(wfilename);
 
        while (n > 0) {
                wchar_t c = wfilename[--n];
@@ -891,7 +891,7 @@ static int do_lstat(int follow, const char *file_name, struct stat *buf)
  */
 static int do_stat_internal(int follow, const char *file_name, struct stat *buf)
 {
-       int namelen;
+       size_t namelen;
        char alt_name[PATH_MAX];
 
        if (!do_lstat(follow, file_name, buf))
@@ -1274,7 +1274,8 @@ static const char *parse_interpreter(const char *cmd)
 {
        static char buf[100];
        char *p, *opt;
-       int n, fd;
+       ssize_t n; /* read() can return negative values */
+       int fd;
 
        /* don't even try a .exe */
        n = strlen(cmd);
@@ -1339,7 +1340,7 @@ static char *path_lookup(const char *cmd, int exe_only)
 {
        const char *path;
        char *prog = NULL;
-       int len = strlen(cmd);
+       size_t len = strlen(cmd);
        int isexe = len >= 4 && !strcasecmp(cmd+len-4, ".exe");
 
        if (strpbrk(cmd, "/\\"))
@@ -1956,7 +1957,7 @@ char *mingw_getenv(const char *name)
 #define GETENV_MAX_RETAIN 64
        static char *values[GETENV_MAX_RETAIN];
        static int value_counter;
-       int len_key, len_value;
+       size_t len_key, len_value;
        wchar_t *w_key;
        char *value;
        wchar_t w_value[32768];
@@ -1968,7 +1969,8 @@ char *mingw_getenv(const char *name)
        /* We cannot use xcalloc() here because that uses getenv() itself */
        w_key = calloc(len_key, sizeof(wchar_t));
        if (!w_key)
-               die("Out of memory, (tried to allocate %u wchar_t's)", len_key);
+               die("Out of memory, (tried to allocate %"PRIuMAX" wchar_t's)",
+                       (uintmax_t)len_key);
        xutftowcs(w_key, name, len_key);
        /* GetEnvironmentVariableW() only sets the last error upon failure */
        SetLastError(ERROR_SUCCESS);
@@ -1983,7 +1985,8 @@ char *mingw_getenv(const char *name)
        /* We cannot use xcalloc() here because that uses getenv() itself */
        value = calloc(len_value, sizeof(char));
        if (!value)
-               die("Out of memory, (tried to allocate %u bytes)", len_value);
+               die("Out of memory, (tried to allocate %"PRIuMAX" bytes)",
+                       (uintmax_t)len_value);
        xwcstoutf(value, w_value, len_value);
 
        /*
@@ -2001,7 +2004,7 @@ char *mingw_getenv(const char *name)
 
 int mingw_putenv(const char *namevalue)
 {
-       int size;
+       size_t size;
        wchar_t *wide, *equal;
        BOOL result;
 
@@ -2011,7 +2014,8 @@ int mingw_putenv(const char *namevalue)
        size = strlen(namevalue) * 2 + 1;
        wide = calloc(size, sizeof(wchar_t));
        if (!wide)
-               die("Out of memory, (tried to allocate %u wchar_t's)", size);
+               die("Out of memory, (tried to allocate %" PRIuMAX " wchar_t's)",
+                   (uintmax_t)size);
        xutftowcs(wide, namevalue, size);
        equal = wcschr(wide, L'=');
        if (!equal)
@@ -3085,7 +3089,8 @@ static void maybe_redirect_std_handles(void)
  */
 int wmain(int argc, const wchar_t **wargv)
 {
-       int i, maxlen, exit_status;
+       int i, exit_status;
+       size_t maxlen;
        char *buffer, **save;
        const char **argv;
 
index 3a959d124ca794446800653e9c033b883d8d7b8f..a261a925b7f8507c1cc8d6e0d13cd1b995cdb280 100644 (file)
@@ -14,7 +14,11 @@ typedef _mode_t      mode_t;
 
 #ifndef _SSIZE_T_
 #define _SSIZE_T_
+#ifdef _WIN64
+typedef __int64 _ssize_t;
+#else
 typedef long _ssize_t;
+#endif /* _WIN64 */
 
 #ifndef        _OFF_T_
 #define        _OFF_T_