git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/4] cleanup: use internal memory allocation wrapper functions everywhere

From
Erik Faye-Lund <kusmabite@gmail.com>
Date
Oct 6, 2011, 16:52 UTC
Message-ID
<CABPQNSaQFFj0vP1+wuoL2=GyHZPRgCXLxXqD+5WX3Le_PyuH4w@mail.gmail.com>
In-Reply-To
<CABPQNSak_jDbNQhzMoSN=NdWmyby3xJRwED54Ck5H1Y12HoGCQ@mail.gmail.com>
On Thu, Oct 6, 2011 at 6:50 PM, Erik Faye-Lund <kusmabite@gmail.com> wrote:
Show 64 quoted lines
> On Thu, Oct 6, 2011 at 6:14 PM, Brandon Casey <drafnel@gmail.com> wrote:
>> Ah.  Yes, you're right.  x-wrappers should not be used in syslog.c and
>> the use of strbuf's should be replaced.
>
> Good point. The patch for this looks something like this:
>
> diff --git a/compat/win32/syslog.c b/compat/win32/syslog.c
> index 42b95a9..243538c 100644
> --- a/compat/win32/syslog.c
> +++ b/compat/win32/syslog.c
> @@ -1,5 +1,4 @@
>  #include "../../git-compat-util.h"
> -#include "../../strbuf.h"
>
>  static HANDLE ms_eventlog;
>
> @@ -16,13 +15,8 @@ void openlog(const char *ident, int logopt, int facility)
>
>  void syslog(int priority, const char *fmt, ...)
>  {
> -       struct strbuf sb = STRBUF_INIT;
> -       struct strbuf_expand_dict_entry dict[] = {
> -               {"1", "% 1"},
> -               {NULL, NULL}
> -       };
>        WORD logtype;
> -       char *str;
> +       char *str, *pos;
>        int str_len;
>        va_list ap;
>
> @@ -39,11 +33,20 @@ void syslog(int priority, const char *fmt, ...)
>        }
>
>        str = malloc(str_len + 1);
> +       if (!str)
> +               return; /* no chance to report error */
> +
>        va_start(ap, fmt);
>        vsnprintf(str, str_len + 1, fmt, ap);
>        va_end(ap);
> -       strbuf_expand(&sb, str, strbuf_expand_dict_cb, &dict);
> -       free(str);
> +
> +       while ((pos = strstr(str, "%1")) != NULL) {
> +               str = realloc(str, ++str_len + 1);
> +               if (!str)
> +                       return;
> +               memmove(pos + 2, pos + 1, strlen(pos));
> +               pos[1] = ' ';
> +       }
>
>        switch (priority) {
>        case LOG_EMERG:
> @@ -66,7 +69,5 @@ void syslog(int priority, const char *fmt, ...)
>        }
>
>        ReportEventA(ms_eventlog, logtype, 0, 0, NULL, 1, 0,
> -           (const char **)&sb.buf, NULL);
> -
> -       strbuf_release(&sb);
> +           (const char **)&str, NULL);
>  }
>
...aaand this on top to avoid a leak, of course:
diff --git a/compat/win32/syslog.c b/compat/win32/syslog.c
index 243538c..3b8e2b7 100644
--- a/compat/win32/syslog.c
+++ b/compat/win32/syslog.c
@@ -70,4 +70,5 @@ void syslog(int priority, const char *fmt, ...)

 	ReportEventA(ms_eventlog, logtype, 0, 0, NULL, 1, 0,
 	    (const char **)&str, NULL);
+	free(str);
 }
Previous: Erik Faye-LundNext: Brandon Casey
Message 18 of 19 in “Honor core.ignorecase for attribute patterns”
  1. 0/4 Honor core.ignorecase for attribute patternsBrandon Casey, Sep 15, 2011
  2. 1/4 attr.c: avoid inappropriate access to strbuf "buf" memberBrandon Casey, Sep 15, 2011
  3. 2/4 cleanup: use internal memory allocation wrapper functions everywhereBrandon Casey, Sep 15, 2011
  4. Johannes SixtSep 15, 2011
  5. Brandon CaseySep 15, 2011
  6. 3/4 builtin/mv.c: plug miniscule memory leakBrandon Casey, Sep 15, 2011
  7. 4/4 attr.c: respect core.ignorecase when matching attribute patternsBrandon Casey, Sep 15, 2011
  8. Junio C HamanoSep 15, 2011
  9. Junio C HamanoSep 15, 2011
  10. Brandon CaseySep 15, 2011
  11. Jeff KingSep 15, 2011
  12. Brandon CaseySep 15, 2011
  13. Brandon CaseyOct 6, 2011
  14. Johannes SixtOct 6, 2011
  15. Alexey ShumkinOct 6, 2011
  16. Brandon CaseyOct 6, 2011
  17. Erik Faye-LundOct 6, 2011
  18. Erik Faye-LundOct 6, 2011
  19. Brandon CaseyOct 6, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.