@@ -52,7 +52,7 @@ static int get_mode(const char *path, int *mode)
52
52
}
53
53
54
54
static int queue_diff (struct diff_options * o ,
55
- const char * name1 , const char * name2 )
55
+ const char * name1 , const char * name2 )
56
56
{
57
57
int mode1 = 0 , mode2 = 0 ;
58
58
@@ -63,10 +63,11 @@ static int queue_diff(struct diff_options *o,
63
63
return error ("file/directory conflict: %s, %s" , name1 , name2 );
64
64
65
65
if (S_ISDIR (mode1 ) || S_ISDIR (mode2 )) {
66
- char buffer1 [PATH_MAX ], buffer2 [PATH_MAX ];
66
+ struct strbuf buffer1 = STRBUF_INIT ;
67
+ struct strbuf buffer2 = STRBUF_INIT ;
67
68
struct string_list p1 = STRING_LIST_INIT_DUP ;
68
69
struct string_list p2 = STRING_LIST_INIT_DUP ;
69
- int len1 = 0 , len2 = 0 , i1 , i2 , ret = 0 ;
70
+ int i1 , i2 , ret = 0 ;
70
71
71
72
if (name1 && read_directory (name1 , & p1 ))
72
73
return -1 ;
@@ -76,19 +77,15 @@ static int queue_diff(struct diff_options *o,
76
77
}
77
78
78
79
if (name1 ) {
79
- len1 = strlen (name1 );
80
- if (len1 > 0 && name1 [len1 - 1 ] == '/' )
81
- len1 -- ;
82
- memcpy (buffer1 , name1 , len1 );
83
- buffer1 [len1 ++ ] = '/' ;
80
+ strbuf_addstr (& buffer1 , name1 );
81
+ if (buffer1 .len && buffer1 .buf [buffer1 .len - 1 ] != '/' )
82
+ strbuf_addch (& buffer1 , '/' );
84
83
}
85
84
86
85
if (name2 ) {
87
- len2 = strlen (name2 );
88
- if (len2 > 0 && name2 [len2 - 1 ] == '/' )
89
- len2 -- ;
90
- memcpy (buffer2 , name2 , len2 );
91
- buffer2 [len2 ++ ] = '/' ;
86
+ strbuf_addstr (& buffer2 , name2 );
87
+ if (buffer2 .len && buffer2 .buf [buffer2 .len - 1 ] != '/' )
88
+ strbuf_addch (& buffer2 , '/' );
92
89
}
93
90
94
91
for (i1 = i2 = 0 ; !ret && (i1 < p1 .nr || i2 < p2 .nr ); ) {
@@ -100,29 +97,28 @@ static int queue_diff(struct diff_options *o,
100
97
else if (i2 == p2 .nr )
101
98
comp = -1 ;
102
99
else
103
- comp = strcmp (p1 .items [i1 ].string ,
104
- p2 .items [i2 ].string );
100
+ comp = strcmp (p1 .items [i1 ].string , p2 .items [i2 ].string );
105
101
106
102
if (comp > 0 )
107
103
n1 = NULL ;
108
104
else {
109
- n1 = buffer1 ;
110
- strncpy (buffer1 + len1 , p1 .items [i1 ++ ].string ,
111
- PATH_MAX - len1 );
105
+ strbuf_addstr (& buffer1 , p1 .items [i1 ++ ].string );
106
+ n1 = buffer1 .buf ;
112
107
}
113
108
114
109
if (comp < 0 )
115
110
n2 = NULL ;
116
111
else {
117
- n2 = buffer2 ;
118
- strncpy (buffer2 + len2 , p2 .items [i2 ++ ].string ,
119
- PATH_MAX - len2 );
112
+ strbuf_addstr (& buffer2 , p2 .items [i2 ++ ].string );
113
+ n2 = buffer2 .buf ;
120
114
}
121
115
122
116
ret = queue_diff (o , n1 , n2 );
123
117
}
124
118
string_list_clear (& p1 , 0 );
125
119
string_list_clear (& p2 , 0 );
120
+ strbuf_reset (& buffer1 );
121
+ strbuf_reset (& buffer2 );
126
122
127
123
return ret ;
128
124
} else {
0 commit comments