@@ -3359,31 +3359,42 @@ static int for_each_file_in_obj_subdir(int subdir_nr,
3359
3359
return r ;
3360
3360
}
3361
3361
3362
- int for_each_loose_file_in_objdir ( const char * path ,
3362
+ int for_each_loose_file_in_objdir_buf ( struct strbuf * path ,
3363
3363
each_loose_object_fn obj_cb ,
3364
3364
each_loose_cruft_fn cruft_cb ,
3365
3365
each_loose_subdir_fn subdir_cb ,
3366
3366
void * data )
3367
3367
{
3368
- struct strbuf buf = STRBUF_INIT ;
3369
- size_t baselen ;
3368
+ size_t baselen = path -> len ;
3370
3369
int r = 0 ;
3371
3370
int i ;
3372
3371
3373
- strbuf_addstr (& buf , path );
3374
- strbuf_addch (& buf , '/' );
3375
- baselen = buf .len ;
3376
-
3377
3372
for (i = 0 ; i < 256 ; i ++ ) {
3378
- strbuf_addf (& buf , "%02x" , i );
3379
- r = for_each_file_in_obj_subdir (i , & buf , obj_cb , cruft_cb ,
3373
+ strbuf_addf (path , "/ %02x" , i );
3374
+ r = for_each_file_in_obj_subdir (i , path , obj_cb , cruft_cb ,
3380
3375
subdir_cb , data );
3381
- strbuf_setlen (& buf , baselen );
3376
+ strbuf_setlen (path , baselen );
3382
3377
if (r )
3383
3378
break ;
3384
3379
}
3385
3380
3381
+ return r ;
3382
+ }
3383
+
3384
+ int for_each_loose_file_in_objdir (const char * path ,
3385
+ each_loose_object_fn obj_cb ,
3386
+ each_loose_cruft_fn cruft_cb ,
3387
+ each_loose_subdir_fn subdir_cb ,
3388
+ void * data )
3389
+ {
3390
+ struct strbuf buf = STRBUF_INIT ;
3391
+ int r ;
3392
+
3393
+ strbuf_addstr (& buf , path );
3394
+ r = for_each_loose_file_in_objdir_buf (& buf , obj_cb , cruft_cb ,
3395
+ subdir_cb , data );
3386
3396
strbuf_release (& buf );
3397
+
3387
3398
return r ;
3388
3399
}
3389
3400
@@ -3396,9 +3407,16 @@ static int loose_from_alt_odb(struct alternate_object_database *alt,
3396
3407
void * vdata )
3397
3408
{
3398
3409
struct loose_alt_odb_data * data = vdata ;
3399
- return for_each_loose_file_in_objdir (alt -> base ,
3400
- data -> cb , NULL , NULL ,
3401
- data -> data );
3410
+ struct strbuf buf = STRBUF_INIT ;
3411
+ int r ;
3412
+
3413
+ /* copy base not including trailing '/' */
3414
+ strbuf_add (& buf , alt -> base , alt -> name - alt -> base - 1 );
3415
+ r = for_each_loose_file_in_objdir_buf (& buf ,
3416
+ data -> cb , NULL , NULL ,
3417
+ data -> data );
3418
+ strbuf_release (& buf );
3419
+ return r ;
3402
3420
}
3403
3421
3404
3422
int for_each_loose_object (each_loose_object_fn cb , void * data )
0 commit comments