Skip to content

Commit

Permalink
sha1_to_hex() usage cleanup
Browse files Browse the repository at this point in the history
Somebody on the #git channel complained that the sha1_to_hex() thing uses
a static buffer which caused an error message to show the same hex output
twice instead of showing two different ones.

That's pretty easily rectified by making it uses a simple LRU of a few
buffers, which also allows some other users (that were aware of the buffer
re-use) to be written in a more straightforward manner.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Linus Torvalds authored and Junio C Hamano committed May 4, 2006
1 parent 935e714 commit dcb3450
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 10 deletions.
6 changes: 2 additions & 4 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -1018,14 +1018,12 @@ static void run_diff(struct diff_filepair *p, struct diff_options *o)
}

if (memcmp(one->sha1, two->sha1, 20)) {
char one_sha1[41];
int abbrev = o->full_index ? 40 : DEFAULT_ABBREV;
memcpy(one_sha1, sha1_to_hex(one->sha1), 41);

len += snprintf(msg + len, sizeof(msg) - len,
"index %.*s..%.*s",
abbrev, one_sha1, abbrev,
sha1_to_hex(two->sha1));
abbrev, sha1_to_hex(one->sha1),
abbrev, sha1_to_hex(two->sha1));
if (one->mode == two->mode)
len += snprintf(msg + len, sizeof(msg) - len,
" %06o", one->mode);
Expand Down
6 changes: 2 additions & 4 deletions merge-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,14 @@ static const char *sha1_to_hex_zero(const unsigned char *sha1)

static void resolve(const char *base, struct name_entry *branch1, struct name_entry *result)
{
char branch1_sha1[50];

/* If it's already branch1, don't bother showing it */
if (!branch1)
return;
memcpy(branch1_sha1, sha1_to_hex_zero(branch1->sha1), 41);

printf("0 %06o->%06o %s->%s %s%s\n",
branch1->mode, result->mode,
branch1_sha1, sha1_to_hex_zero(result->sha1),
sha1_to_hex_zero(branch1->sha1),
sha1_to_hex_zero(result->sha1),
base, result->path);
}

Expand Down
5 changes: 3 additions & 2 deletions sha1_file.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,10 @@ int safe_create_leading_directories(char *path)

char * sha1_to_hex(const unsigned char *sha1)
{
static char buffer[50];
static int bufno;
static char hexbuffer[4][50];
static const char hex[] = "0123456789abcdef";
char *buf = buffer;
char *buffer = hexbuffer[3 & ++bufno], *buf = buffer;
int i;

for (i = 0; i < 20; i++) {
Expand Down

0 comments on commit dcb3450

Please sign in to comment.