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

Re: [PATCH] Modify fsck_commit. Replace memcmp by skip_prefix

From
Eric Sunshine <sunshine@sunshineco.com>
Date
Mar 23, 2014, 08:40 UTC
Message-ID
<CAPig+cRL3zFWtBq_yJQqwGa7Wc6GsdBqA_jrGm8p5ZMJVmr-yw@mail.gmail.com>
In-Reply-To
<1395501132-12894-1-git-send-email-ajha.dev@gmail.com>
Thanks for the resubmission. Comments below...
On Sat, Mar 22, 2014 at 11:12 AM, Ashwin Jha <ajha.dev@gmail.com> wrote:
> Subject: [PATCH] Modify fsck_commit. Replace memcmp by skip_prefix

In his review, Tanay already mentioned indicating a resubmission via [PATCH vN]. Additionally, specify the module or function being modified, followed by a colon and space. On this project, it is customary to forego capitalization in the subject (and only the subject). So, you might write:

    Subject: [PATCH v2] fsck_commit: replace memcmp() by skip_prefix()
> Replace memcmp by skip_prefix as it serves the dual
> purpose of checking the string for a prefix as well
> as skipping that prefix.
Good.
> Signed-off-by: Ashwin Jha <ajha.dev@gmail.com>
> ---

Tanay mentioned this already: Below the "---" line under your sign-off is where you should, as a courtesy to reviewers, explain what changed since the previous attempt. Also, provide a link to the previous version, like this [1].

[1]: http://git.661346.n2.nabble.com/PATCH-GSoC-Miniproject-15-Rewrite-fsck-c-fsck-commit-td7606180.html
Show 21 quoted lines
>  fsck.c |   25 ++++++++++++++-----------
>  1 file changed, 14 insertions(+), 11 deletions(-)
>
> diff --git a/fsck.c b/fsck.c
> index 64bf279..021b3fc 100644
> --- a/fsck.c
> +++ b/fsck.c
> @@ -6,6 +6,7 @@
>  #include "commit.h"
>  #include "tag.h"
>  #include "fsck.h"
> +#include "git-compat-util.h"
>
>  static int fsck_walk_tree(struct tree *tree, fsck_walk_func walk, void *data)
>  {
> @@ -284,21 +285,23 @@ static int fsck_ident(char **ident, struct object *obj, fsck_error error_func)
>
>  static int fsck_commit(struct commit *commit, fsck_error error_func)
>  {
> -       char *buffer = commit->buffer;
> +       char *next_parent, *buffer = commit->buffer;

The name 'next_parent' doesn't seem correct. After invoking skip_prefix(), this variable will point at the hex representation of the parent's SHA1, so a better name might be 'parent_id'.

Show 7 quoted lines
>         unsigned char tree_sha1[20], sha1[20];
>         struct commit_graft *graft;
>         int parents = 0;
>         int err;
>
> -       if (memcmp(buffer, "tree ", 5))
> +       buffer = (char *)skip_prefix(buffer, "tree ");
These casts are ugly. It should be possible to get rid of all of them.
Hint: Does this function modify the memory referenced by 'buffer'?
(The answer is very slightly involved, though not difficult. A proper
fix would involve turning this submission into a 2-patch series: one a
preparatory patch, and the other this patch without the casts.)
> +       if (buffer == NULL)

On this project, it is customary to say !buffer. Ditto for the remaining instances.

Show 9 quoted lines
>                 return error_func(&commit->object, FSCK_ERROR, "invalid format - expected 'tree' line");
> -       if (get_sha1_hex(buffer+5, tree_sha1) || buffer[45] != '\n')
> +       if (get_sha1_hex(buffer, tree_sha1) || buffer[40] != '\n')
>                 return error_func(&commit->object, FSCK_ERROR, "invalid 'tree' line format - bad sha1");
> -       buffer += 46;
> -       while (!memcmp(buffer, "parent ", 7)) {
> -               if (get_sha1_hex(buffer+7, sha1) || buffer[47] != '\n')
> +       buffer += 41;
> +       while ((next_parent = (char *)skip_prefix(buffer, "parent ")) != NULL) {
Likewise, on this project, it is customary to omit the '!= NULL'.
Show 28 quoted lines
> +               buffer = next_parent;
> +               if (get_sha1_hex(buffer, sha1) || buffer[40] != '\n')
>                         return error_func(&commit->object, FSCK_ERROR, "invalid 'parent' line format - bad sha1");
> -               buffer += 48;
> +               buffer += 41;
>                 parents++;
>         }
>         graft = lookup_commit_graft(commit->object.sha1);
> @@ -322,15 +325,15 @@ static int fsck_commit(struct commit *commit, fsck_error error_func)
>                 if (p || parents)
>                         return error_func(&commit->object, FSCK_ERROR, "parent objects missing");
>         }
> -       if (memcmp(buffer, "author ", 7))
> +       buffer = (char *)skip_prefix(buffer, "author ");
> +       if (buffer == NULL)
>                 return error_func(&commit->object, FSCK_ERROR, "invalid format - expected 'author' line");
> -       buffer += 7;
>         err = fsck_ident(&buffer, &commit->object, error_func);
>         if (err)
>                 return err;
> -       if (memcmp(buffer, "committer ", strlen("committer ")))
> +       buffer = (char *)skip_prefix(buffer, "committer ");
> +       if (buffer == NULL)
>                 return error_func(&commit->object, FSCK_ERROR, "invalid format - expected 'committer' line");
> -       buffer += strlen("committer ");
>         err = fsck_ident(&buffer, &commit->object, error_func);
>         if (err)
>                 return err;
Other than the minor points mentioned above, the patch looks good. Thanks.
> --
> 1.7.9.5
Previous: Tanay AbhraNext: Ashwin Jha
Message 3 of 5 in “Modify fsck_commit. Replace memcmp by skip_prefix”
  1. Modify fsck_commit. Replace memcmp by skip_prefixAshwin Jha, Mar 22, 2014
  2. Tanay AbhraMar 23, 2014
  3. Eric SunshineMar 23, 2014
  4. Ashwin JhaMar 23, 2014
  5. Eric SunshineMar 24, 2014

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.