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

Re: [PATCH] Make git prune remove temporary packs that look like write failures

From
DTDavid Tweed <david.tweed@gmail.com>
Date
Feb 6, 2008, 19:57 UTC
Message-ID
<e1dab3980802061157r36dfa8b9uab49af013cb8e963@mail.gmail.com>
In-Reply-To
<47AA0D60.60504@nrlssc.navy.mil>
On Feb 6, 2008 7:41 PM, Brandon Casey <casey@nrlssc.navy.mil> wrote:
Show 5 quoted lines
> They use sprintf for the "%02x" part, but they use memcpy to copy the return
> of get_object_directory() into a fixed string and then append onto that,
> rather than repeatedly writing the same string over and over. Ok, there is one
> instance in builtin-prune.c that repeatedly writes path, but builtin-prune-packed.c
> does the memcpy thing.

Given I'm the only person (AFAICS from the list archives) who's ever talked about failed temporary packs, I assume that almost everyone using git is using filesystems with sufficient space that they don't get write errors, so the path building will generally be done 0 times per --prune. (Using a USB disk that's almost full, along with occasionally filling up my /home with experiment output, is the occasions I get them.) So I don't think efficiency is an issue. So the big (genuine) question is: is a properly checked snprintf more or less readable/canonical git style than doing more complicated strlcpy things? (I know I need to really think about what the below is doing, and what the correctness conditions are.)

Show 24 quoted lines
> Something like:
>
>         char pathname[PATH_MAX];
>         ...
>
>         /* check length of dirname not too long */
>
>         memcpy(pathname, dirname, len);
>
>         if (len && pathname[len-1] != '/')
>                 pathname[len++] = '/';
>
>         ...
>
>         while ((de = readdir(dir)...) {
>                 if (!prefixcmp(...
>                         if (strlcpy(pathname + len, de->d_name, PATH_MAX - len)
>                             >= PATH_MAX - len) {
>                                 warning("too long path encountered: %s%s",
>                                         pathname, de->d_name);
>                                 continue;
>                         }
>
>                         ...
-- 
cheers, dave tweed__________________________
david.tweed@gmail.com
Rm 124, School of Systems Engineering, University of Reading.
"while having code so boring anyone can maintain it, use Python." --
attempted insult seen on slashdot
Previous: Brandon CaseyNext: Nicolas Pitre
Message 12 of 20 in “Make git prune remove temporary packs that look like write failures”
  1. Make git prune remove temporary packs that look like write failuresDavid Steven Tweed, Feb 5, 2008
  2. Nicolas PitreFeb 5, 2008
  3. prune: heed --expire for stale packs, add a testJohannes Schindelin, Feb 5, 2008
  4. Nicolas PitreFeb 5, 2008
  5. Junio C HamanoFeb 6, 2008
  6. Johannes SchindelinFeb 6, 2008
  7. Nicolas PitreFeb 6, 2008
  8. Junio C HamanoFeb 6, 2008
  9. Brandon CaseyFeb 6, 2008
  10. David TweedFeb 6, 2008
  11. Brandon CaseyFeb 6, 2008
  12. David TweedFeb 6, 2008
  13. Nicolas PitreFeb 6, 2008
  14. Brandon CaseyFeb 6, 2008
  15. David TweedFeb 6, 2008
  16. Nicolas PitreFeb 6, 2008
  17. David TweedFeb 6, 2008
  18. Nicolas PitreFeb 6, 2008
  19. David TweedFeb 6, 2008
  20. Junio C HamanoFeb 6, 2008

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.