#ifndef _LIBVOLUME_ID_PRIVATE_H_
#define _LIBVOLUME_ID_PRIVATE_H_
-#include <stdint.h>
#include <stddef.h>
#include <endian.h>
+#include <stdint.h>
+#include <inttypes.h>
#include <byteswap.h>
#include <syslog.h>
#define PACKED __attribute__((packed))
#endif
+static inline void __attribute__ ((format(printf, 1, 2)))
+log_null(const char *format, ...) {}
+
#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
#define dbg(format, arg...) volume_id_log_fn(LOG_DEBUG, __FILE__, __LINE__, format, ##arg)
#else
-#define dbg(format, arg...) do { } while (0)
+#define dbg(format, arg...) log_null(format, ##arg)
#endif
#if (__BYTE_ORDER == __LITTLE_ENDIAN)
enum volume_id_usage {
VOLUME_ID_UNUSED,
- VOLUME_ID_UNPROBED,
VOLUME_ID_OTHER,
VOLUME_ID_FILESYSTEM,
VOLUME_ID_RAID,
- VOLUME_ID_DISKLABEL,
VOLUME_ID_CRYPTO,
};
uint8_t uuid_raw[VOLUME_ID_UUID_SIZE];
size_t uuid_raw_len;
char uuid[VOLUME_ID_UUID_SIZE+1];
+ uint8_t uuid_sub_raw[VOLUME_ID_UUID_SIZE];
+ size_t uuid_sub_raw_len;
+ char uuid_sub[VOLUME_ID_UUID_SIZE+1];
enum volume_id_usage usage_id;
char *usage;
char *type;
uint8_t *seekbuf;
uint64_t seekbuf_off;
size_t seekbuf_len;
+ int force_unique_result;
};
/* utils */
extern void volume_id_set_label_string(struct volume_id *id, const uint8_t *buf, size_t count);
extern void volume_id_set_label_unicode16(struct volume_id *id, const uint8_t *buf, enum endian endianess, size_t count);
extern void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, size_t len, enum uuid_format format);
+extern void volume_id_set_uuid_sub(struct volume_id *id, const uint8_t *buf, size_t len, enum uuid_format format);
extern uint8_t *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len);
extern void volume_id_free_buffer(struct volume_id *id);
extern int volume_id_probe_netware(struct volume_id *id, uint64_t off, uint64_t size);
extern int volume_id_probe_gfs(struct volume_id *id, uint64_t off, uint64_t size);
extern int volume_id_probe_gfs2(struct volume_id *id, uint64_t off, uint64_t size);
+extern int volume_id_probe_btrfs(struct volume_id *id, uint64_t off, uint64_t size);
/* special formats */
extern int volume_id_probe_linux_swap(struct volume_id *id, uint64_t off, uint64_t size);