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@xxxxxx> --- compat/basename.c | 15 +++++++++++++-- compat/mingw.c | 25 +++++++++++++------------ compat/winansi.c | 2 +- 3 files changed, 27 insertions(+), 15 deletions(-) diff --git a/compat/basename.c b/compat/basename.c index 96bd9533b4..c3c9d65fac 100644 --- a/compat/basename.c +++ b/compat/basename.c @@ -1,6 +1,13 @@ #include "../git-compat-util.h" #include "../strbuf.h" +/* + * Both basename(3P) and dirname(3P) are mis-specified because they return a + * non-constant pointer even though it is specified that they may return a + * pointer to internal memory. This variable here is a result of that. + */ +static char current_directory[] = "."; + /* Adapted from libiberty's basename.c. */ char *gitbasename (char *path) { @@ -10,7 +17,7 @@ char *gitbasename (char *path) skip_dos_drive_prefix(&path); if (!path || !*path) - return "."; + return current_directory; for (base = path; *path; path++) { if (!is_dir_sep(*path)) @@ -33,8 +40,12 @@ char *gitdirname(char *path) char *p = path, *slash = NULL, c; int dos_drive_prefix; + /* + * Same here, dirname(3P) is broken because it returns a non-constant + * pointer that may point to internal memory. + */ if (!p) - return "."; + return current_directory; if ((dos_drive_prefix = skip_dos_drive_prefix(&p)) && !*p) goto dot; diff --git a/compat/mingw.c b/compat/mingw.c index 6b06ea540f..60f0986f76 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -2257,6 +2257,7 @@ struct passwd *getpwuid(int uid) { static unsigned initialized; static char user_name[100]; + static char unknown[] = "unknown"; static struct passwd *p; wchar_t buf[100]; DWORD len; @@ -2279,7 +2280,7 @@ 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"; + p->pw_gecos = unknown; p->pw_dir = NULL; initialized = 1; @@ -2800,16 +2801,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 +2823,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)"; } diff --git a/compat/winansi.c b/compat/winansi.c index f83610f684..575813bde8 100644 --- a/compat/winansi.c +++ b/compat/winansi.c @@ -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; } -- 2.45.1.313.g3a57aa566a.dirty
Attachment:
signature.asc
Description: PGP signature