summaryrefslogtreecommitdiff
path: root/extras/volume_id/lib
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2007-05-03 14:22:39 +0200
committerKay Sievers <kay.sievers@vrfy.org>2007-05-03 14:22:39 +0200
commite7ea9c50e8eaab772206268739db2d59ba7bd709 (patch)
treeb47511b3487ab72754008a00eb9f6e1f5e7a1512 /extras/volume_id/lib
parent4a86b682ab3f0473a24ef66d56db100eb592a9bb (diff)
volume_id: add volume_id_get_* functions
In a future version of libvolume_id, struct volume_id will be an opaque data type, which can't be accessed directly. No interface has changed for now, until all known users are converted not to access the structure directly.
Diffstat (limited to 'extras/volume_id/lib')
-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)