#include <stdio.h>
#include <string.h>
-blkid_partlist get_part_list(char *device_name) {
- blkid_probe pr = blkid_new_probe_from_filename(device_name);
+blkid_partlist get_part_list(char *device_name, blkid_probe *pr) {
+ *pr = blkid_new_probe_from_filename(device_name);
if (pr == NULL)
return NULL;
- blkid_partlist ls = blkid_probe_get_partitions(pr);
- blkid_free_probe(pr);
+ blkid_partlist ls = blkid_probe_get_partitions(*pr);
return ls;
}
#ifndef MAX_PARTNAME_LEN
#define MAX_PARTNAME_LEN 10000
#endif
-blkid_partlist get_part_list(char *device_name);
+blkid_partlist get_part_list(char *device_name, blkid_probe *pr);
int get_part_number_by_name(blkid_partlist ls, const char *part_name, const char *new_slot);
char blk_name[PATH_MAX];
char blk_name_previous[PATH_MAX];
blkid_partlist pr = NULL;
+ blkid_probe bp = NULL;
// new mode: use libblkid rather than reading partitions from
// part_table configuration file.
if (ua_slot_mode == 'a' || ua_slot_mode == 'b') {
char ua_slot_mode_previous = ua_slot_mode == 'a' ? 'b' : 'a';
- pr = get_part_list(blk_dev_arg);
+ pr = get_part_list(blk_dev_arg, &bp);
if (!pr) {
return -1;
}
LOG("failed to get_part_number_by_name for: %s, slot: %c, %c (%d %d)",
s_part_info[j].ua_parti_name, ua_slot_mode, ua_slot_mode_previous,
id, id_previous);
+ blkid_free_probe(bp);
return -1;
}
if (s_part_info[j].ua_blk_name) free(s_part_info[j].ua_blk_name);
s_part_info[j].ua_blk_name = strdup(blk_name);
s_part_info[j].ua_blk_name_previous = strdup(blk_name_previous);
}
+ blkid_free_probe(bp);
} else {
// legacy mode: get part numbers from file
memset((void*)part_tbl_path, 0x00, sizeof(part_tbl_path));