@@ -227,6 +227,11 @@ xmalloc (size_t size) {
227227 return t ;
228228}
229229
230+ static void cleanup_charp (char * * p )
231+ {
232+ free (* p );
233+ }
234+
230235int
231236main (int argc , char * * argv ){
232237 int i , j , m , n , op , off , arg , c , d , ro = 0 ;
@@ -237,10 +242,11 @@ main(int argc, char **argv){
237242 char * type , * diskdevice , * device , * progname ;
238243 int verbose = 0 ;
239244 char partname [PARTNAME_SIZE ], params [PARTNAME_SIZE + 16 ];
240- char * loopdev = NULL ;
241- char * delim = NULL ;
242- char * uuid = NULL ;
243- char * mapname = NULL ;
245+ char * loopdev __attribute__((cleanup (cleanup_charp ))) = NULL ;
246+ char * delim __attribute__((cleanup (cleanup_charp ))) = NULL ;
247+ char * uuid __attribute__((cleanup (cleanup_charp ))) = NULL ;
248+ char * _mapname __attribute__((cleanup (cleanup_charp ))) = NULL ;
249+ char * mapname ;
244250 int hotplug = 0 ;
245251 int loopcreated = 0 ;
246252 struct stat buf ;
@@ -292,7 +298,9 @@ main(int argc, char **argv){
292298 verbose = 1 ;
293299 break ;
294300 case 'p' :
295- delim = optarg ;
301+ delim = strdup (optarg );
302+ if (!delim )
303+ exit (1 );
296304 break ;
297305 case 'l' :
298306 what = LIST ;
@@ -381,22 +389,26 @@ main(int argc, char **argv){
381389 off = find_devname_offset (device );
382390
383391 if (!loopdev ) {
384- mapname = dm_mapname (major (buf .st_rdev ), minor (buf .st_rdev ));
385- if (mapname )
386- uuid = dm_mapuuid (mapname );
392+ _mapname = dm_mapname (major (buf .st_rdev ), minor (buf .st_rdev ));
393+ if (_mapname )
394+ uuid = dm_mapuuid (_mapname );
387395 }
388396
397+ mapname = _mapname ;
398+ if (!mapname )
399+ mapname = device + off ;
400+
389401 /*
390402 * We are called for a non-DM device.
391403 * Make up a fake UUID for the device, unless "-d -f" is given.
392404 * This allows deletion of partitions created with older kpartx
393405 * versions which didn't use the fake UUID during creation.
394406 */
395- if (!uuid && !(what == DELETE && force_devmap ))
407+ if (!uuid && !(what == DELETE && force_devmap )) {
396408 uuid = nondm_create_uuid (buf .st_rdev );
397-
398- if (! mapname )
399- mapname = device + off ;
409+ if (! uuid )
410+ exit ( 1 );
411+ }
400412
401413 if (delim == NULL ) {
402414 delim = xmalloc (DELIM_SIZE );
@@ -674,7 +686,6 @@ main(int argc, char **argv){
674686 if (verbose )
675687 fprintf (stderr , "loop deleted : %s\n" , device );
676688 }
677-
678689end :
679690 dm_lib_exit ();
680691
0 commit comments