]> xenbits.xensource.com Git - libvirt.git/commitdiff
util: typedparam: Separate code to assign value to typed parameter
authorPeter Krempa <pkrempa@redhat.com>
Wed, 14 Aug 2019 11:00:13 +0000 (13:00 +0200)
committerPeter Krempa <pkrempa@redhat.com>
Wed, 25 Sep 2019 11:02:48 +0000 (13:02 +0200)
The code will be reused in other function.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/util/virtypedparam.c

index d9f8203796c1b3af6f51c6ad6791aaeb2589f7eb..756242d96ffc15a5beaca9eb4ee6573a00597f1e 100644 (file)
@@ -205,24 +205,12 @@ virTypedParameterToString(virTypedParameterPtr param)
     return value;
 }
 
-/* Assign name, type, and the appropriately typed arg to param; in the
- * case of a string, the caller is assumed to have malloc'd a string,
- * or can pass NULL to have this function malloc an empty string.
- * Return 0 on success, -1 after an error message on failure.  */
-int
-virTypedParameterAssign(virTypedParameterPtr param, const char *name,
-                        int type, ...)
-{
-    va_list ap;
-    int ret = -1;
-
-    va_start(ap, type);
 
-    if (virStrcpyStatic(param->field, name) < 0) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"),
-                       name);
-        goto cleanup;
-    }
+static int
+virTypedParameterAssignValueVArgs(virTypedParameterPtr param,
+                                  int type,
+                                  va_list ap)
+{
     param->type = type;
     switch (type) {
     case VIR_TYPED_PARAM_INT:
@@ -246,17 +234,40 @@ virTypedParameterAssign(virTypedParameterPtr param, const char *name,
     case VIR_TYPED_PARAM_STRING:
         param->value.s = va_arg(ap, char *);
         if (!param->value.s && VIR_STRDUP(param->value.s, "") < 0)
-            goto cleanup;
+            return -1;
         break;
     default:
         virReportError(VIR_ERR_INTERNAL_ERROR,
-                       _("unexpected type %d for field %s"), type, name);
-        goto cleanup;
+                       _("unexpected type %d for field %s"), type,
+                       NULLSTR(param->field));
+        return -1;
     }
 
-    ret = 0;
- cleanup:
+    return 0;
+}
+
+
+/* Assign name, type, and the appropriately typed arg to param; in the
+ * case of a string, the caller is assumed to have malloc'd a string,
+ * or can pass NULL to have this function malloc an empty string.
+ * Return 0 on success, -1 after an error message on failure.  */
+int
+virTypedParameterAssign(virTypedParameterPtr param, const char *name,
+                        int type, ...)
+{
+    va_list ap;
+    int ret = -1;
+
+    if (virStrcpyStatic(param->field, name) < 0) {
+        virReportError(VIR_ERR_INTERNAL_ERROR, _("Field name '%s' too long"),
+                       name);
+        return -1;
+    }
+
+    va_start(ap, type);
+    ret = virTypedParameterAssignValueVArgs(param, type, ap);
     va_end(ap);
+
     return ret;
 }