else if (!strncasecmp(str, "off", 3))
bit_prop_set(dev, prop, false);
else
- return -1;
+ return -EINVAL;
return 0;
}
/* accept both hex and decimal */
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx8 : "%" PRIu8;
if (sscanf(str, fmt, ptr) != 1)
- return -1;
+ return -EINVAL;
return 0;
}
/* accept both hex and decimal */
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx16 : "%" PRIu16;
if (sscanf(str, fmt, ptr) != 1)
- return -1;
+ return -EINVAL;
return 0;
}
/* accept both hex and decimal */
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx32 : "%" PRIu32;
if (sscanf(str, fmt, ptr) != 1)
- return -1;
+ return -EINVAL;
return 0;
}
int32_t *ptr = qdev_get_prop_ptr(dev, prop);
if (sscanf(str, "%" PRId32, ptr) != 1)
- return -1;
+ return -EINVAL;
return 0;
}
uint32_t *ptr = qdev_get_prop_ptr(dev, prop);
if (sscanf(str, "%" PRIx32, ptr) != 1)
- return -1;
+ return -EINVAL;
return 0;
}
/* accept both hex and decimal */
fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx64 : "%" PRIu64;
if (sscanf(str, fmt, ptr) != 1)
- return -1;
+ return -EINVAL;
return 0;
}
uint64_t *ptr = qdev_get_prop_ptr(dev, prop);
if (sscanf(str, "%" PRIx64, ptr) != 1)
- return -1;
+ return -EINVAL;
return 0;
}
*ptr = drive_get_by_id(str);
if (*ptr == NULL)
- return -1;
+ return -ENOENT;
return 0;
}
*ptr = qemu_chr_find(str);
if (*ptr == NULL)
- return -1;
+ return -ENOENT;
return 0;
}
*ptr = qemu_find_netdev(str);
if (*ptr == NULL)
- return -1;
+ return -ENOENT;
return 0;
}
int id;
if (sscanf(str, "%d", &id) != 1)
- return -1;
+ return -EINVAL;
*ptr = qemu_find_vlan(id, 1);
if (*ptr == NULL)
- return -1;
+ return -ENOENT;
return 0;
}
for (i = 0, pos = 0; i < 6; i++, pos += 3) {
if (!qemu_isxdigit(str[pos]))
- return -1;
+ return -EINVAL;
if (!qemu_isxdigit(str[pos+1]))
- return -1;
+ return -EINVAL;
if (i == 5) {
if (str[pos+2] != '\0')
- return -1;
+ return -EINVAL;
} else {
if (str[pos+2] != ':' && str[pos+2] != '-')
- return -1;
+ return -EINVAL;
}
mac->a[i] = strtol(str+pos, &p, 16);
}
if (sscanf(str, "%x.%x%n", &slot, &fn, &n) != 2) {
fn = 0;
if (sscanf(str, "%x%n", &slot, &n) != 1) {
- return -1;
+ return -EINVAL;
}
}
if (str[n] != '\0')
- return -1;
+ return -EINVAL;
if (fn > 7)
- return -1;
+ return -EINVAL;
*ptr = slot << 3 | fn;
return 0;
}
int qdev_prop_parse(DeviceState *dev, const char *name, const char *value)
{
Property *prop;
+ int ret;
prop = qdev_prop_find(dev, name);
if (!prop) {
dev->info->name, name);
return -1;
}
- if (prop->info->parse(dev, prop, value) != 0) {
- fprintf(stderr, "property \"%s.%s\": failed to parse \"%s\"\n",
- dev->info->name, name, value);
+ ret = prop->info->parse(dev, prop, value);
+ if (ret < 0) {
+ switch (ret) {
+ default:
+ case -EINVAL:
+ fprintf(stderr, "property \"%s.%s\": failed to parse \"%s\"\n",
+ dev->info->name, name, value);
+ break;
+ case -ENOENT:
+ fprintf(stderr, "property \"%s.%s\": could not find \"%s\"\n",
+ dev->info->name, name, value);
+ break;
+ }
return -1;
}
return 0;