2005-01-31 07:28:44 +03:00
/*
* volume_id - reads filesystem label and uuid
*
* Copyright ( C ) 2005 Kay Sievers < kay . sievers @ vrfy . org >
*
2005-09-27 18:27:35 +04:00
* 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 .
2005-01-31 07:28:44 +03:00
*/
# ifndef _VOLUME_ID_UTIL_
# define _VOLUME_ID_UTIL_
# ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
# endif
# ifdef HAVE_CONFIG_H
# include <config.h>
# endif
2005-04-05 06:01:08 +04:00
# include <endian.h>
2005-11-12 16:28:22 +03:00
# include <byteswap.h>
2005-04-05 06:01:08 +04:00
2005-01-31 07:28:44 +03:00
/* 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
2005-04-05 06:01:08 +04:00
# ifdef __BYTE_ORDER
2005-01-31 07:28:44 +03:00
# if (__BYTE_ORDER == __LITTLE_ENDIAN)
# define le16_to_cpu(x) (x)
# define le32_to_cpu(x) (x)
# define le64_to_cpu(x) (x)
2005-11-12 16:28:22 +03:00
# define be16_to_cpu(x) bswap_16(x)
# define be32_to_cpu(x) bswap_32(x)
2005-10-23 19:41:55 +04:00
# define cpu_to_le16(x) (x)
2005-02-09 03:02:18 +03:00
# define cpu_to_le32(x) (x)
2005-11-12 16:28:22 +03:00
# define cpu_to_be32(x) bswap_32(x)
2005-01-31 07:28:44 +03:00
# elif (__BYTE_ORDER == __BIG_ENDIAN)
2005-11-12 16:28:22 +03:00
# define le16_to_cpu(x) bswap_16(x)
# define le32_to_cpu(x) bswap_32(x)
# define le64_to_cpu(x) bswap_64(x)
2005-01-31 07:28:44 +03:00
# define be16_to_cpu(x) (x)
# define be32_to_cpu(x) (x)
2005-11-12 16:28:22 +03:00
# define cpu_to_le16(x) bswap_16(x)
# define cpu_to_le32(x) bswap_32(x)
2005-02-09 03:02:18 +03:00
# define cpu_to_be32(x) (x)
2005-01-31 07:28:44 +03:00
# endif
2005-04-05 06:01:08 +04:00
# endif /* __BYTE_ORDER */
2005-01-31 07:28:44 +03:00
enum uuid_format {
2005-03-06 04:02:45 +03:00
UUID_DCE_STRING ,
2005-01-31 07:28:44 +03:00
UUID_DCE ,
UUID_DOS ,
UUID_NTFS ,
UUID_HFS ,
} ;
enum endian {
LE = 0 ,
BE = 1
} ;
2005-08-01 03:33:36 +04:00
extern void volume_id_set_unicode16 ( char * str , size_t len , const uint8_t * buf , enum endian endianess , size_t count ) ;
2005-01-31 07:28:44 +03:00
extern void volume_id_set_usage ( struct volume_id * id , enum volume_id_usage usage_id ) ;
2005-08-01 03:33:36 +04:00
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 , enum uuid_format format ) ;
extern uint8_t * volume_id_get_buffer ( struct volume_id * id , uint64_t off , size_t len ) ;
2005-01-31 07:28:44 +03:00
extern void volume_id_free_buffer ( struct volume_id * id ) ;
# endif /* _VOLUME_ID_UTIL_ */