### Function

# GObject TypeValueLCopyFunc

since: 2.78

#### Declaration

    gchar*
    (* GTypeValueLCopyFunc) (
      const GValue* value,
      guint n_collect_values,
      GTypeCValue* collect_values,
      guint collect_flags
    )

#### Description [src]

This function is responsible for storing the `value` contents into arguments passed through a variadic argument list which got collected into `collect_values` according to `lcopy_format`.

The `n_collect_values` argument equals the string length of `lcopy_format`, and `collect_flags` may contain `G_VALUE_NOCOPY_CONTENTS`.

In contrast to `GTypeValueCollectFunc`, this function is obliged to always properly support `G_VALUE_NOCOPY_CONTENTS`.

Similar to `GTypeValueCollectFunc` the function may prematurely abort by returning a newly allocated string describing an error condition. To complete the string example:

    gchar **string_p = collect_values[0].v_pointer;
    g_return_val_if_fail (string_p != NULL,
      g_strdup ("string location passed as NULL"));

    if (collect_flags & G_VALUE_NOCOPY_CONTENTS)
      *string_p = value->data[0].v_pointer;
    else
      *string_p = g_strdup (value->data[0].v_pointer);

And an illustrative version of this function for reference-counted types:

    GObject **object_p = collect_values[0].v_pointer;
    g_return_val_if_fail (object_p != NULL,
      g_strdup ("object location passed as NULL"));

    if (value->data[0].v_pointer == NULL)
      *object_p = NULL;
    else if (collect_flags & G_VALUE_NOCOPY_CONTENTS) // always honour
      *object_p = value->data[0].v_pointer;
    else
      *object_p = g_object_ref (value->data[0].v_pointer);

    return NULL;

Available since: 2.78

#### Parameters

`value`

  Type: `GValue`

  The value to lcopy.

  The data is owned by the caller of the function.

`n_collect_values`

  Type: `guint`

  The number of collected values.

`collect_values`

  Type: An array of `GTypeCValue`

  The collected locations for storage.

  The length of the array is specified in the `n_collect_values` argument.
  The data is owned by the caller of the function.

`collect_flags`

  Type: `guint`

  Optional flags.

#### Return value

Type: `gchar*`

`NULL` on success, otherwise a newly allocated error string on failure.

The caller of the function takes ownership of the data, and is responsible for freeing it.
The return value can be `NULL`.
The value is a NUL terminated UTF-8 string.