@@ -420,6 +420,7 @@ int git_config_set_multivar(const char* key, const char* value,
420
420
{
421
421
int i ;
422
422
int fd , in_fd ;
423
+ int ret ;
423
424
char * config_filename = strdup (git_path ("config" ));
424
425
char * lock_file = strdup (git_path ("config.lock" ));
425
426
const char * last_dot = strrchr (key , '.' );
@@ -429,9 +430,10 @@ int git_config_set_multivar(const char* key, const char* value,
429
430
* key name separated by a dot, we have to know where the dot is.
430
431
*/
431
432
432
- if (last_dot == NULL ) {
433
+ if (last_dot == NULL ) {
433
434
fprintf (stderr , "key does not contain a section: %s\n" , key );
434
- return 2 ;
435
+ ret = 2 ;
436
+ goto out_free ;
435
437
}
436
438
store .baselen = last_dot - key ;
437
439
@@ -447,7 +449,8 @@ int git_config_set_multivar(const char* key, const char* value,
447
449
(i == store .baselen + 1 && !isalpha (key [i ])))) {
448
450
fprintf (stderr , "invalid key: %s\n" , key );
449
451
free (store .key );
450
- return 1 ;
452
+ ret = 1 ;
453
+ goto out_free ;
451
454
} else
452
455
store .key [i ] = tolower (key [i ]);
453
456
store .key [i ] = 0 ;
@@ -460,7 +463,8 @@ int git_config_set_multivar(const char* key, const char* value,
460
463
if (fd < 0 ) {
461
464
fprintf (stderr , "could not lock config file\n" );
462
465
free (store .key );
463
- return -1 ;
466
+ ret = -1 ;
467
+ goto out_free ;
464
468
}
465
469
466
470
/*
@@ -475,13 +479,15 @@ int git_config_set_multivar(const char* key, const char* value,
475
479
strerror (errno ));
476
480
close (fd );
477
481
unlink (lock_file );
478
- return 3 ; /* same as "invalid config file" */
482
+ ret = 3 ; /* same as "invalid config file" */
483
+ goto out_free ;
479
484
}
480
485
/* if nothing to unset, error out */
481
486
if (value == NULL ) {
482
487
close (fd );
483
488
unlink (lock_file );
484
- return 5 ;
489
+ ret = 5 ;
490
+ goto out_free ;
485
491
}
486
492
487
493
store .key = (char * )key ;
@@ -507,7 +513,8 @@ int git_config_set_multivar(const char* key, const char* value,
507
513
fprintf (stderr , "Invalid pattern: %s\n" ,
508
514
value_regex );
509
515
free (store .value_regex );
510
- return 6 ;
516
+ ret = 6 ;
517
+ goto out_free ;
511
518
}
512
519
}
513
520
@@ -528,7 +535,8 @@ int git_config_set_multivar(const char* key, const char* value,
528
535
regfree (store .value_regex );
529
536
free (store .value_regex );
530
537
}
531
- return 3 ;
538
+ ret = 3 ;
539
+ goto out_free ;
532
540
}
533
541
534
542
free (store .key );
@@ -542,7 +550,8 @@ int git_config_set_multivar(const char* key, const char* value,
542
550
(store .seen > 1 && multi_replace == 0 )) {
543
551
close (fd );
544
552
unlink (lock_file );
545
- return 5 ;
553
+ ret = 5 ;
554
+ goto out_free ;
546
555
}
547
556
548
557
fstat (in_fd , & st );
@@ -593,10 +602,18 @@ int git_config_set_multivar(const char* key, const char* value,
593
602
594
603
if (rename (lock_file , config_filename ) < 0 ) {
595
604
fprintf (stderr , "Could not rename the lock file?\n" );
596
- return 4 ;
605
+ ret = 4 ;
606
+ goto out_free ;
597
607
}
598
608
599
- return 0 ;
609
+ ret = 0 ;
610
+
611
+ out_free :
612
+ if (config_filename )
613
+ free (config_filename );
614
+ if (lock_file )
615
+ free (lock_file );
616
+ return ret ;
600
617
}
601
618
602
619
0 commit comments