]> git.ipfire.org Git - thirdparty/git.git/commitdiff
compat/win32: fix const-correctness with string constants
authorPatrick Steinhardt <ps@pks.im>
Fri, 7 Jun 2024 06:38:44 +0000 (08:38 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2024 17:30:52 +0000 (10:30 -0700)
Adjust various places in our Win32 compatibility layer where we are not
assigning string constants to `const char *` variables.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
compat/basename.c
compat/mingw.c
compat/winansi.c

index 96bd9533b448e56176a335a41e32f9bb2dd24d03..c33579ef612d9540bf188f09168fbd29adda8b8c 100644 (file)
@@ -10,7 +10,13 @@ char *gitbasename (char *path)
                skip_dos_drive_prefix(&path);
 
        if (!path || !*path)
-               return ".";
+               /*
+                * basename(3P) is mis-specified because it returns a
+                * non-constant pointer even though it is specified to return a
+                * pointer to internal memory at times. The cast is a result of
+                * that.
+                */
+               return (char *) ".";
 
        for (base = path; *path; path++) {
                if (!is_dir_sep(*path))
@@ -34,7 +40,13 @@ char *gitdirname(char *path)
        int dos_drive_prefix;
 
        if (!p)
-               return ".";
+               /*
+                * dirname(3P) is mis-specified because it returns a
+                * non-constant pointer even though it is specified to return a
+                * pointer to internal memory at times. The cast is a result of
+                * that.
+                */
+               return (char *) ".";
 
        if ((dos_drive_prefix = skip_dos_drive_prefix(&p)) && !*p)
                goto dot;
index 6b06ea540fdb7ac5d425ba46eac5abbce2fc46e3..d378cd04cbe64ad31cc7669332ff11aac686dd8f 100644 (file)
@@ -2279,7 +2279,11 @@ struct passwd *getpwuid(int uid)
        p->pw_name = user_name;
        p->pw_gecos = get_extended_user_info(NameDisplay);
        if (!p->pw_gecos)
-               p->pw_gecos = "unknown";
+               /*
+                * Data returned by getpwuid(3P) is treated as internal and
+                * must never be written to or freed.
+                */
+               p->pw_gecos = (char *) "unknown";
        p->pw_dir = NULL;
 
        initialized = 1;
@@ -2800,16 +2804,16 @@ int is_path_owned_by_current_sid(const char *path, struct strbuf *report)
                        strbuf_addf(report, "'%s' is on a file system that does "
                                    "not record ownership\n", path);
                } else if (report) {
-                       LPSTR str1, str2, str3, str4, to_free1 = NULL,
-                           to_free3 = NULL, to_local_free2 = NULL,
-                           to_local_free4 = NULL;
+                       PCSTR str1, str2, str3, str4;
+                       LPSTR to_free1 = NULL, to_free3 = NULL,
+                           to_local_free2 = NULL, to_local_free4 = NULL;
 
-                       if (user_sid_to_user_name(sid, &str1))
-                               to_free1 = str1;
+                       if (user_sid_to_user_name(sid, &to_free1))
+                               str1 = to_free1;
                        else
                                str1 = "(inconvertible)";
-                       if (ConvertSidToStringSidA(sid, &str2))
-                               to_local_free2 = str2;
+                       if (ConvertSidToStringSidA(sid, &to_local_free2))
+                               str2 = to_local_free2;
                        else
                                str2 = "(inconvertible)";
 
@@ -2822,13 +2826,13 @@ int is_path_owned_by_current_sid(const char *path, struct strbuf *report)
                                str4 = "(invalid)";
                        } else {
                                if (user_sid_to_user_name(current_user_sid,
-                                                         &str3))
-                                       to_free3 = str3;
+                                                         &to_free3))
+                                       str3 = to_free3;
                                else
                                        str3 = "(inconvertible)";
                                if (ConvertSidToStringSidA(current_user_sid,
-                                                          &str4))
-                                       to_local_free4 = str4;
+                                                          &to_local_free4))
+                                       str4 = to_local_free4;
                                else
                                        str4 = "(inconvertible)";
                        }
index f83610f684d031f8660542b108a940207cad89df..575813bde8e806523d7a6ce839357911699e7ec9 100644 (file)
@@ -139,7 +139,7 @@ static void write_console(unsigned char *str, size_t len)
        /* convert utf-8 to utf-16 */
        int wlen = xutftowcsn(wbuf, (char*) str, ARRAY_SIZE(wbuf), len);
        if (wlen < 0) {
-               wchar_t *err = L"[invalid]";
+               const wchar_t *err = L"[invalid]";
                WriteConsoleW(console, err, wcslen(err), &dummy, NULL);
                return;
        }