/* function to set UUIDs that are in suberblocks stored as strings */ int blkid_probe_strncpy_uuid(blkid_probe pr, unsigned char *str, size_t len) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; int rc = 0; if (str == NULL || *str == '\0') return -EINVAL; if (!len) len = strlen((char *) str); if ((chn->flags & BLKID_SUBLKS_UUIDRAW) && (rc = blkid_probe_set_value(pr, "UUID_RAW", str, len)) < 0) return rc; if (!(chn->flags & BLKID_SUBLKS_UUID)) return 0; v = blkid_probe_assign_value(pr, "UUID"); if (!v) rc= -ENOMEM; if (!rc) rc = blkid_probe_value_set_data(v, str, len); if (!rc) { v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len > 1) return 0; } blkid_probe_free_value(v); return rc; }
int blkid_probe_set_label(blkid_probe pr, unsigned char *label, size_t len) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; int rc = 0; if ((chn->flags & BLKID_SUBLKS_LABELRAW) && (rc = blkid_probe_set_value(pr, "LABEL_RAW", label, len)) < 0) return rc; if (!(chn->flags & BLKID_SUBLKS_LABEL)) return 0; v = blkid_probe_assign_value(pr, "LABEL"); if (!v) return -ENOMEM; rc = blkid_probe_value_set_data(v, label, len); if (!rc) { v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len > 1) return 0; } blkid_probe_free_value(v); return rc; }
int blkid_probe_set_utf8label(blkid_probe pr, unsigned char *label, size_t len, int enc) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; int rc = 0; if ((chn->flags & BLKID_SUBLKS_LABELRAW) && (rc = blkid_probe_set_value(pr, "LABEL_RAW", label, len)) < 0) return rc; if (!(chn->flags & BLKID_SUBLKS_LABEL)) return 0; v = blkid_probe_assign_value(pr, "LABEL"); if (!v) return -ENOMEM; v->data = blkid_encode_alloc(len, &v->len); if (!v->data) rc = -ENOMEM; if (!rc) { blkid_encode_to_utf8(enc, v->data, v->len, label, len); v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len > 1) return 0; } blkid_probe_free_value(v); return rc; }
int blkid_probe_set_id_label(blkid_probe pr, const char *name, unsigned char *data, size_t len) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; int rc = 0; if (!(chn->flags & BLKID_SUBLKS_LABEL)) return 0; v = blkid_probe_assign_value(pr, name); if (!v) return -ENOMEM; rc = blkid_probe_value_set_data(v, data, len); if (!rc) { /* remove white spaces */ v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len > 1) v->len = blkid_ltrim_whitespace(v->data) + 1; if (v->len > 1) return 0; } blkid_probe_free_value(v); return rc; }
int blkid_probe_set_utf8_id_label(blkid_probe pr, const char *name, unsigned char *data, size_t len, int enc) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; int rc = 0; if (!(chn->flags & BLKID_SUBLKS_LABEL)) return 0; v = blkid_probe_assign_value(pr, name); if (!v) return -ENOMEM; v->data = blkid_encode_alloc(len, &v->len); if (!v->data) rc = -ENOMEM; if (!rc) { blkid_encode_to_utf8(enc, v->data, v->len, data, len); v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len > 1) v->len = blkid_ltrim_whitespace(v->data) + 1; if (v->len > 1) return 0; } blkid_probe_free_value(v); return rc; }
/* function to set UUIDs that are in suberblocks stored as strings */ int blkid_probe_strncpy_uuid(blkid_probe pr, unsigned char *str, size_t len) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; if (str == NULL || *str == '\0') return -1; if (!len) len = strlen((char *) str); if (len > BLKID_PROBVAL_BUFSIZ) len = BLKID_PROBVAL_BUFSIZ; if ((chn->flags & BLKID_SUBLKS_UUIDRAW) && blkid_probe_set_value(pr, "UUID_RAW", str, len) < 0) return -1; if (!(chn->flags & BLKID_SUBLKS_UUID)) return 0; v = blkid_probe_assign_value(pr, "UUID"); if (v) { if (len == BLKID_PROBVAL_BUFSIZ) len--; /* make a space for \0 */ memcpy((char *) v->data, str, len); v->data[len] = '\0'; v->len = len + 1; return 0; } return -1; }
int blkid_probe_set_label(blkid_probe pr, unsigned char *label, size_t len) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; if (len > BLKID_PROBVAL_BUFSIZ) len = BLKID_PROBVAL_BUFSIZ; if ((chn->flags & BLKID_SUBLKS_LABELRAW) && blkid_probe_set_value(pr, "LABEL_RAW", label, len) < 0) return -1; if (!(chn->flags & BLKID_SUBLKS_LABEL)) return 0; v = blkid_probe_assign_value(pr, "LABEL"); if (!v) return -1; if (len == BLKID_PROBVAL_BUFSIZ) len--; /* make a space for \0 */ memcpy(v->data, label, len); v->data[len] = '\0'; v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len == 1) blkid_probe_reset_last_value(pr); return 0; }
int blkid_probe_set_id_label(blkid_probe pr, const char *name, unsigned char *data, size_t len) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; if (!(chn->flags & BLKID_SUBLKS_LABEL)) return 0; v = blkid_probe_assign_value(pr, name); if (!v) return -1; if (len >= BLKID_PROBVAL_BUFSIZ) len = BLKID_PROBVAL_BUFSIZ - 1; /* make a space for \0 */ memcpy(v->data, data, len); v->data[len] = '\0'; /* remove white spaces */ v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len > 1) v->len = blkid_ltrim_whitespace(v->data) + 1; if (v->len <= 1) blkid_probe_reset_last_value(pr); /* ignore empty */ return 0; }
/* default _set_uuid function to set DCE UUIDs */ int blkid_probe_set_uuid_as(blkid_probe pr, unsigned char *uuid, const char *name) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; int rc = 0; if (blkid_uuid_is_empty(uuid, 16)) return 0; if (!name) { if ((chn->flags & BLKID_SUBLKS_UUIDRAW) && (rc = blkid_probe_set_value(pr, "UUID_RAW", uuid, 16)) < 0) return rc; if (!(chn->flags & BLKID_SUBLKS_UUID)) return 0; v = blkid_probe_assign_value(pr, "UUID"); } else v = blkid_probe_assign_value(pr, name); if (!v) return -ENOMEM; v->len = 37; v->data = calloc(1, v->len); if (!v->data) rc = -ENOMEM; if (!rc) { blkid_unparse_uuid(uuid, (char *) v->data, v->len); return 0; } blkid_probe_free_value(v); return rc; }
/* default _set_uuid function to set DCE UUIDs */ int blkid_probe_set_uuid_as(blkid_probe pr, unsigned char *uuid, const char *name) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; if (blkid_uuid_is_empty(uuid, 16)) return 0; if (!name) { if ((chn->flags & BLKID_SUBLKS_UUIDRAW) && blkid_probe_set_value(pr, "UUID_RAW", uuid, 16) < 0) return -1; if (!(chn->flags & BLKID_SUBLKS_UUID)) return 0; v = blkid_probe_assign_value(pr, "UUID"); } else v = blkid_probe_assign_value(pr, name); blkid_unparse_uuid(uuid, (char *) v->data, sizeof(v->data)); v->len = 37; return 0; }
int blkid_probe_set_utf8label(blkid_probe pr, unsigned char *label, size_t len, int enc) { struct blkid_chain *chn = blkid_probe_get_chain(pr); struct blkid_prval *v; if ((chn->flags & BLKID_SUBLKS_LABELRAW) && blkid_probe_set_value(pr, "LABEL_RAW", label, len) < 0) return -1; if (!(chn->flags & BLKID_SUBLKS_LABEL)) return 0; v = blkid_probe_assign_value(pr, "LABEL"); if (!v) return -1; blkid_encode_to_utf8(enc, v->data, sizeof(v->data), label, len); v->len = blkid_rtrim_whitespace(v->data) + 1; if (v->len == 1) blkid_probe_reset_last_value(pr); return 0; }