struct fdisk_parttype *res = NULL;
unsigned int code = 0;
- if (!lb->nparttypes)
+ if (!lb || lb->nparttypes)
return NULL;
DBG(LABEL, ul_debugobj(lb, "parsing '%s' (%s) type", str, lb->name));
} else if (!strncasecmp(p, "type=", 5) ||
!strncasecmp(p, "Id=", 3)) { /* backward compatibility */
- char *type;
+ char *type = NULL;
p += ((*p == 'I' || *p == 'i') ? 3 : 5); /* "Id=", "type=" */
if (rc)
break;
+ fdisk_unref_parttype(pa->type);
pa->type = fdisk_label_advparse_parttype(script_get_label(dp),
type, FDISK_SCRIPT_PARTTYPE_PARSE_FLAGS);
free(type);
-
- if (!pa->type) {
+ if (!pa->type)
rc = -EINVAL;
- break;
- }
} else {
DBG(SCRIPT, ul_debugobj(dp, "script parse error: unknown field '%s'", p));
rc = -EINVAL;
if (rc)
break;
+ fdisk_unref_parttype(pa->type);
pa->type = fdisk_label_advparse_parttype(script_get_label(dp),
str, FDISK_SCRIPT_PARTTYPE_PARSE_FLAGS);
free(str);
-
if (!pa->type)
rc = -EINVAL;
break;