chiark / gitweb /
volume_id: add dbg() as noop to check for compile errors
[elogind.git] / extras / volume_id / lib / libvolume_id-private.h
index 578f6fc4e75acac3f00a8705759f05a8a4603a87..3326bf371289d16b39f6720374b6689f1d2071e8 100644 (file)
@@ -3,9 +3,18 @@
  *
  * 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
- *     Free Software Foundation version 2 of the License.
+ * 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 Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 #ifndef _LIBVOLUME_ID_PRIVATE_H_
 
 #include <stdint.h>
 #include <stddef.h>
+#include <endian.h>
+#include <byteswap.h>
+#include <syslog.h>
 
 #include "libvolume_id.h"
 
-#define VOLUME_ID_LABEL_SIZE           64
-#define VOLUME_ID_UUID_SIZE            36
-#define VOLUME_ID_FORMAT_SIZE          32
-#define VOLUME_ID_PATH_MAX             256
-#define VOLUME_ID_PARTITIONS_MAX       256
+#define ALLOWED_CHARS                  "#+-.:=@_"
+
+#ifndef PACKED
+#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...)    log_null(format, ##arg)
+#endif
+
+#if (__BYTE_ORDER == __LITTLE_ENDIAN)
+#define le16_to_cpu(x) (x)
+#define le32_to_cpu(x) (x)
+#define le64_to_cpu(x) (x)
+#define be16_to_cpu(x) bswap_16(x)
+#define be32_to_cpu(x) bswap_32(x)
+#define cpu_to_le16(x) (x)
+#define cpu_to_le32(x) (x)
+#define cpu_to_be32(x) bswap_32(x)
+#elif (__BYTE_ORDER == __BIG_ENDIAN)
+#define le16_to_cpu(x) bswap_16(x)
+#define le32_to_cpu(x) bswap_32(x)
+#define le64_to_cpu(x) bswap_64(x)
+#define be16_to_cpu(x) (x)
+#define be32_to_cpu(x) (x)
+#define cpu_to_le16(x) bswap_16(x)
+#define cpu_to_le32(x) bswap_32(x)
+#define cpu_to_be32(x) (x)
+#endif /* __BYTE_ORDER */
+
+enum uuid_format {
+       UUID_STRING,
+       UUID_HEX_STRING,
+       UUID_DCE,
+       UUID_DOS,
+       UUID_64BIT_LE,
+       UUID_MD,
+       UUID_LVM,
+};
+
+enum endian {
+       LE = 0,
+       BE = 1
+};
+
+#define VOLUME_ID_LABEL_SIZE                   64
+#define VOLUME_ID_UUID_SIZE                    36
+#define VOLUME_ID_FORMAT_SIZE                  32
+#define VOLUME_ID_PATH_MAX                     256
+#define VOLUME_ID_PARTITIONS_MAX               256
+
+/* size of superblock buffer, reiserfs block is at 64k */
+#define SB_BUFFER_SIZE                         0x11000
+/* size of seek buffer, FAT cluster is 32k max */
+#define SEEK_BUFFER_SIZE                       0x10000
 
 enum volume_id_usage {
        VOLUME_ID_UNUSED,
@@ -50,9 +119,19 @@ struct volume_id {
        uint8_t         *seekbuf;
        uint64_t        seekbuf_off;
        size_t          seekbuf_len;
-       int             fd_close:1;
 };
 
+/* utils */
+extern int volume_id_utf8_encoded_valid_unichar(const char *str);
+extern size_t volume_id_set_unicode16(uint8_t *str, size_t len, const uint8_t *buf, enum endian endianess, size_t count);
+extern void volume_id_set_usage(struct volume_id *id, enum volume_id_usage usage_id);
+extern void volume_id_set_label_raw(struct volume_id *id, const uint8_t *buf, size_t count);
+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 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);
+
 /* filesystems */
 extern int volume_id_probe_cramfs(struct volume_id *id, uint64_t off, uint64_t size);
 extern int volume_id_probe_ext(struct volume_id *id, uint64_t off, uint64_t size);