{"thread":{"id":"28609","subject":"[PATCH v2] mingw: avoid using strbuf in syslog","startedAt":"2011-10-06T17:52:48Z","lastAt":"2011-10-06T17:52:48Z","messageCount":1,"participants":["Erik Faye-Lund"],"isPatch":true,"patchVersion":2,"patchTotal":null},"messages":[{"id":"177077","messageId":"1317923568-9040-1-git-send-email-kusmabite@gmail.com","threadId":"28609","inReplyTo":null,"subject":"[PATCH v2] mingw: avoid using strbuf in syslog","fromName":"Erik Faye-Lund","fromEmail":"kusmabite@gmail.com","sentAt":"2011-10-06T17:52:48Z","receivedAt":"2011-10-06T17:52:48Z","isPatch":true,"sender":{"key":"kusmabite@gmail.com","avatar":"https://avatars.githubusercontent.com/u/47073?v=4"},"body":"strbuf can call die, which again can call syslog from git-daemon.\n\nEndless recursion is no fun; fix it by hand-rolling the logic. As\na side-effect malloc/realloc errors are changed into non-fatal\nwarnings; this is probably an improvement anyway.\n\nSigned-off-by: Erik Faye-Lund <kusmabite@gmail.com>\nNoticed-by: Johannes Sixt <j.sixt@viscovery.net>\n---\n compat/win32/syslog.c |   30 ++++++++++++++++++------------\n 1 files changed, 18 insertions(+), 12 deletions(-)\n\ndiff --git a/compat/win32/syslog.c b/compat/win32/syslog.c\nindex 42b95a9..d015e43 100644\n--- a/compat/win32/syslog.c\n+++ b/compat/win32/syslog.c\n@@ -1,5 +1,4 @@\n #include \"../../git-compat-util.h\"\n-#include \"../../strbuf.h\"\n \n static HANDLE ms_eventlog;\n \n@@ -16,13 +15,8 @@ void openlog(const char *ident, int logopt, int facility)\n \n void syslog(int priority, const char *fmt, ...)\n {\n-\tstruct strbuf sb = STRBUF_INIT;\n-\tstruct strbuf_expand_dict_entry dict[] = {\n-\t\t{\"1\", \"% 1\"},\n-\t\t{NULL, NULL}\n-\t};\n \tWORD logtype;\n-\tchar *str;\n+\tchar *str, *pos;\n \tint str_len;\n \tva_list ap;\n \n@@ -39,11 +33,24 @@ void syslog(int priority, const char *fmt, ...)\n \t}\n \n \tstr = malloc(str_len + 1);\n+\tif (!str) {\n+\t\twarning(\"malloc failed: '%s'\", strerror(errno));\n+\t\treturn;\n+\t}\n+\n \tva_start(ap, fmt);\n \tvsnprintf(str, str_len + 1, fmt, ap);\n \tva_end(ap);\n-\tstrbuf_expand(&sb, str, strbuf_expand_dict_cb, &dict);\n-\tfree(str);\n+\n+\twhile ((pos = strstr(str, \"%1\")) != NULL) {\n+\t\tstr = realloc(str, ++str_len + 1);\n+\t\tif (!str) {\n+\t\t\twarning(\"realloc failed: '%s'\", strerror(errno));\n+\t\t\treturn;\n+\t\t}\n+\t\tmemmove(pos + 2, pos + 1, strlen(pos));\n+\t\tpos[1] = ' ';\n+\t}\n \n \tswitch (priority) {\n \tcase LOG_EMERG:\n@@ -66,7 +73,6 @@ void syslog(int priority, const char *fmt, ...)\n \t}\n \n \tReportEventA(ms_eventlog, logtype, 0, 0, NULL, 1, 0,\n-\t    (const char **)&sb.buf, NULL);\n-\n-\tstrbuf_release(&sb);\n+\t    (const char **)&str, NULL);\n+\tfree(str);\n }\n-- \n1.7.6.msysgit.0.579.ga3d6f\n"}]}