Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
diff --no-index: use strbuf for temporary pathnames
author
Junio C Hamano
<gitster@pobox.com>
Wed, 25 Apr 2012 19:37:38 +0000
(12:37 -0700)
committer
Junio C Hamano
<gitster@pobox.com>
Thu, 26 Apr 2012 16:13:29 +0000
(09:13 -0700)
Instead of using limited-length buffers and risking of pathname
truncation, we should be taking advantage of strbuf API nowadays.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff-no-index.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
48e510b
)
diff --git
a/diff-no-index.c
b/diff-no-index.c
index 5cd3ff5848c1ad913c7802a157c61df42a0e9269..b44473e3c1fd5c2bdc4dce3af7aabc86fd37eb08 100644
(file)
--- a/
diff-no-index.c
+++ b/
diff-no-index.c
@@
-52,7
+52,7
@@
static int get_mode(const char *path, int *mode)
}
static int queue_diff(struct diff_options *o,
}
static int queue_diff(struct diff_options *o,
- const char *name1, const char *name2)
+
const char *name1, const char *name2)
{
int mode1 = 0, mode2 = 0;
{
int mode1 = 0, mode2 = 0;
@@
-63,10
+63,11
@@
static int queue_diff(struct diff_options *o,
return error("file/directory conflict: %s, %s", name1, name2);
if (S_ISDIR(mode1) || S_ISDIR(mode2)) {
return error("file/directory conflict: %s, %s", name1, name2);
if (S_ISDIR(mode1) || S_ISDIR(mode2)) {
- char buffer1[PATH_MAX], buffer2[PATH_MAX];
+ struct strbuf buffer1 = STRBUF_INIT;
+ struct strbuf buffer2 = STRBUF_INIT;
struct string_list p1 = STRING_LIST_INIT_DUP;
struct string_list p2 = STRING_LIST_INIT_DUP;
struct string_list p1 = STRING_LIST_INIT_DUP;
struct string_list p2 = STRING_LIST_INIT_DUP;
- int
len1 = 0, len2 = 0,
i1, i2, ret = 0;
+ int i1, i2, ret = 0;
if (name1 && read_directory(name1, &p1))
return -1;
if (name1 && read_directory(name1, &p1))
return -1;
@@
-76,19
+77,15
@@
static int queue_diff(struct diff_options *o,
}
if (name1) {
}
if (name1) {
- len1 = strlen(name1);
- if (len1 > 0 && name1[len1 - 1] == '/')
- len1--;
- memcpy(buffer1, name1, len1);
- buffer1[len1++] = '/';
+ strbuf_addstr(&buffer1, name1);
+ if (buffer1.len && buffer1.buf[buffer1.len - 1] != '/')
+ strbuf_addch(&buffer1, '/');
}
if (name2) {
}
if (name2) {
- len2 = strlen(name2);
- if (len2 > 0 && name2[len2 - 1] == '/')
- len2--;
- memcpy(buffer2, name2, len2);
- buffer2[len2++] = '/';
+ strbuf_addstr(&buffer2, name2);
+ if (buffer2.len && buffer2.buf[buffer2.len - 1] != '/')
+ strbuf_addch(&buffer2, '/');
}
for (i1 = i2 = 0; !ret && (i1 < p1.nr || i2 < p2.nr); ) {
}
for (i1 = i2 = 0; !ret && (i1 < p1.nr || i2 < p2.nr); ) {
@@
-100,31
+97,28
@@
static int queue_diff(struct diff_options *o,
else if (i2 == p2.nr)
comp = -1;
else
else if (i2 == p2.nr)
comp = -1;
else
- comp = strcmp(p1.items[i1].string,
- p2.items[i2].string);
+ comp = strcmp(p1.items[i1].string, p2.items[i2].string);
if (comp > 0)
n1 = NULL;
else {
if (comp > 0)
n1 = NULL;
else {
- n1 = buffer1;
- strncpy(buffer1 + len1, p1.items[i1++].string,
- PATH_MAX - len1);
- buffer1[PATH_MAX-1] = 0;
+ strbuf_addstr(&buffer1, p1.items[i1++].string);
+ n1 = buffer1.buf;
}
if (comp < 0)
n2 = NULL;
else {
}
if (comp < 0)
n2 = NULL;
else {
- n2 = buffer2;
- strncpy(buffer2 + len2, p2.items[i2++].string,
- PATH_MAX - len2);
- buffer2[PATH_MAX-1] = 0;
+ strbuf_addstr(&buffer2, p2.items[i2++].string);
+ n2 = buffer2.buf;
}
ret = queue_diff(o, n1, n2);
}
string_list_clear(&p1, 0);
string_list_clear(&p2, 0);
}
ret = queue_diff(o, n1, n2);
}
string_list_clear(&p1, 0);
string_list_clear(&p2, 0);
+ strbuf_reset(&buffer1);
+ strbuf_reset(&buffer2);
return ret;
} else {
return ret;
} else {