summaryrefslogtreecommitdiff
path: root/extras/volume_id
diff options
context:
space:
mode:
Diffstat (limited to 'extras/volume_id')
-rw-r--r--extras/volume_id/lib/Makefile2
-rw-r--r--extras/volume_id/lib/exported_symbols9
-rw-r--r--extras/volume_id/lib/libvolume_id.h15
-rw-r--r--extras/volume_id/lib/util.h4
-rw-r--r--extras/volume_id/lib/volume_id.c99
5 files changed, 121 insertions, 8 deletions
diff --git a/extras/volume_id/lib/Makefile b/extras/volume_id/lib/Makefile
index 41b7ecb7af..fafcc52794 100644
--- a/extras/volume_id/lib/Makefile
+++ b/extras/volume_id/lib/Makefile
@@ -13,7 +13,7 @@ INSTALL_DATA = ${INSTALL} -m 644
INSTALL_LIB = ${INSTALL} -m 755
SHLIB_CUR = 0
-SHLIB_REV = 76
+SHLIB_REV = 77
SHLIB_AGE = 0
SHLIB = libvolume_id.so.$(SHLIB_CUR).$(SHLIB_REV).$(SHLIB_AGE)
diff --git a/extras/volume_id/lib/exported_symbols b/extras/volume_id/lib/exported_symbols
index 57a1feb3dc..c88d993e01 100644
--- a/extras/volume_id/lib/exported_symbols
+++ b/extras/volume_id/lib/exported_symbols
@@ -1,5 +1,14 @@
{ global:
volume_id_log_fn;
+
+ volume_id_get_label;
+ volume_id_get_label_raw;
+ volume_id_get_uuid;
+ volume_id_get_uuid_raw;
+ volume_id_get_usage;
+ volume_id_get_type;
+ volume_id_get_type_version;
+
volume_id_open_fd;
volume_id_open_node;
volume_id_probe_all;
diff --git a/extras/volume_id/lib/libvolume_id.h b/extras/volume_id/lib/libvolume_id.h
index 98423f08cc..523543f7ee 100644
--- a/extras/volume_id/lib/libvolume_id.h
+++ b/extras/volume_id/lib/libvolume_id.h
@@ -1,7 +1,7 @@
/*
* volume_id - reads volume label and uuid
*
- * Copyright (C) 2005 Kay Sievers <kay.sievers@vrfy.org>
+ * Copyright (C) 2005-2007 Kay Sievers <kay.sievers@vrfy.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -14,11 +14,6 @@
#include <stdint.h>
#include <stddef.h>
-#ifndef PACKED
-#define PACKED __attribute__((packed))
-#endif
-
-
typedef void (*volume_id_log_fn_t)(int priority, const char *file, int line, const char *format, ...)
__attribute__ ((format(printf, 4, 5)));
@@ -61,6 +56,14 @@ struct volume_id {
int fd_close:1;
};
+extern int volume_id_get_label(struct volume_id *id, const char **label);
+extern int volume_id_get_label_raw(struct volume_id *id, const uint8_t **label, size_t *len);
+extern int volume_id_get_uuid(struct volume_id *id, const char **uuid);
+extern int volume_id_get_uuid_raw(struct volume_id *id, const uint8_t **uuid, size_t *len);
+extern int volume_id_get_usage(struct volume_id *id, const char **usage);
+extern int volume_id_get_type(struct volume_id *id, const char **type);
+extern int volume_id_get_type_version(struct volume_id *id, const char **type_version);
+
extern struct volume_id *volume_id_open_fd(int fd);
extern struct volume_id *volume_id_open_node(const char *path);
extern int volume_id_probe_all(struct volume_id *id, uint64_t off, uint64_t size);
diff --git a/extras/volume_id/lib/util.h b/extras/volume_id/lib/util.h
index 2abf05df74..964e70196a 100644
--- a/extras/volume_id/lib/util.h
+++ b/extras/volume_id/lib/util.h
@@ -23,6 +23,10 @@
#include <byteswap.h>
#include <syslog.h>
+#ifndef PACKED
+#define PACKED __attribute__((packed))
+#endif
+
#define err(format, arg...) volume_id_log_fn(LOG_ERR, __FILE__, __LINE__, format, ##arg)
#define info(format, arg...) volume_id_log_fn(LOG_INFO, __FILE__, __LINE__, format, ##arg)
#ifdef DEBUG
diff --git a/extras/volume_id/lib/volume_id.c b/extras/volume_id/lib/volume_id.c
index c6c8d5af6d..bf009c7203 100644
--- a/extras/volume_id/lib/volume_id.c
+++ b/extras/volume_id/lib/volume_id.c
@@ -1,7 +1,7 @@
/*
* volume_id - reads volume label and uuid
*
- * Copyright (C) 2005 Kay Sievers <kay.sievers@vrfy.org>
+ * Copyright (C) 2005-2007 Kay Sievers <kay.sievers@vrfy.org>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -36,6 +36,103 @@ static void default_log(int priority, const char *file, int line, const char *fo
volume_id_log_fn_t volume_id_log_fn = default_log;
+int volume_id_get_label(struct volume_id *id, const char **label)
+{
+ if (id == NULL)
+ return -EINVAL;
+ if (label == NULL)
+ return -EINVAL;
+ if (id->usage_id == VOLUME_ID_UNUSED)
+ return 0;
+
+ *label = id->label;
+ return 1;
+}
+
+int volume_id_get_label_raw(struct volume_id *id, const uint8_t **label, size_t *len)
+{
+ if (id == NULL)
+ return -EINVAL;
+ if (label == NULL)
+ return -EINVAL;
+ if (len == NULL)
+ return -EINVAL;
+ if (id->usage_id == VOLUME_ID_UNUSED)
+ return 0;
+
+ *label = id->label_raw;
+ *len = id->label_raw_len;
+ return 1;
+}
+
+int volume_id_get_uuid(struct volume_id *id, const char **uuid)
+{
+ if (id == NULL)
+ return -EINVAL;
+ if (uuid == NULL)
+ return -EINVAL;
+ if (id->usage_id == VOLUME_ID_UNUSED)
+ return 0;
+
+ *uuid = id->uuid;
+ return 1;
+}
+
+int volume_id_get_uuid_raw(struct volume_id *id, const uint8_t **uuid, size_t *len)
+{
+ if (id == NULL)
+ return -EINVAL;
+ if (uuid == NULL)
+ return -EINVAL;
+ if (len == NULL)
+ return -EINVAL;
+ if (id->usage_id == VOLUME_ID_UNUSED)
+ return 0;
+
+ *uuid = id->uuid_raw;
+ *len = id->uuid_raw_len;
+ return 1;
+}
+
+int volume_id_get_usage(struct volume_id *id, const char **usage)
+{
+ if (id == NULL)
+ return -EINVAL;
+ if (usage == NULL)
+ return -EINVAL;
+ if (id->usage_id == VOLUME_ID_UNUSED)
+ return 0;
+
+ *usage = id->usage;
+ return 1;
+}
+
+int volume_id_get_type(struct volume_id *id, const char **type)
+{
+ if (id == NULL)
+ return -EINVAL;
+ if (type == NULL)
+ return -EINVAL;
+ if (id->usage_id == VOLUME_ID_UNUSED)
+ return 0;
+
+ *type = id->type;
+ return 1;
+}
+
+int volume_id_get_type_version(struct volume_id *id, const char **type_version)
+{
+ if (id == NULL)
+ return -EINVAL;
+ if (type_version == NULL)
+ return -EINVAL;
+ if (id->usage_id == VOLUME_ID_UNUSED)
+ return 0;
+
+ *type_version = id->type_version;
+ return 1;
+}
+
int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size)
{
if (id == NULL)