@@ -52,7 +52,7 @@ static int get_mode(const char *path, int *mode)
5252}
5353
5454static int queue_diff (struct diff_options * o ,
55- const char * name1 , const char * name2 )
55+ const char * name1 , const char * name2 )
5656{
5757 int mode1 = 0 , mode2 = 0 ;
5858
@@ -63,10 +63,11 @@ static int queue_diff(struct diff_options *o,
6363 return error ("file/directory conflict: %s, %s" , name1 , name2 );
6464
6565 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 ;
6768 struct string_list p1 = STRING_LIST_INIT_DUP ;
6869 struct string_list p2 = STRING_LIST_INIT_DUP ;
69- int len1 = 0 , len2 = 0 , i1 , i2 , ret = 0 ;
70+ int i1 , i2 , ret = 0 ;
7071
7172 if (name1 && read_directory (name1 , & p1 ))
7273 return -1 ;
@@ -76,19 +77,15 @@ static int queue_diff(struct diff_options *o,
7677 }
7778
7879 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 , '/' );
8483 }
8584
8685 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 , '/' );
9289 }
9390
9491 for (i1 = i2 = 0 ; !ret && (i1 < p1 .nr || i2 < p2 .nr ); ) {
@@ -100,29 +97,28 @@ static int queue_diff(struct diff_options *o,
10097 else if (i2 == p2 .nr )
10198 comp = -1 ;
10299 else
103- comp = strcmp (p1 .items [i1 ].string ,
104- p2 .items [i2 ].string );
100+ comp = strcmp (p1 .items [i1 ].string , p2 .items [i2 ].string );
105101
106102 if (comp > 0 )
107103 n1 = NULL ;
108104 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 ;
112107 }
113108
114109 if (comp < 0 )
115110 n2 = NULL ;
116111 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 ;
120114 }
121115
122116 ret = queue_diff (o , n1 , n2 );
123117 }
124118 string_list_clear (& p1 , 0 );
125119 string_list_clear (& p2 , 0 );
120+ strbuf_reset (& buffer1 );
121+ strbuf_reset (& buffer2 );
126122
127123 return ret ;
128124 } else {
0 commit comments