X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=extras%2Fvolume_id%2Fvolume_id.h;h=c26d1e4daf02a3e77931caa69e2a94ba12e4bb06;hp=a0d2acda225b01fa329687c61595f0f7658ef7af;hb=240ce551799c78c6e77362e7b7feaaf09b72309b;hpb=3611d5820c0fc0863d15c04884b05c9e04492f45 diff --git a/extras/volume_id/volume_id.h b/extras/volume_id/volume_id.h index a0d2acda2..c26d1e4da 100644 --- a/extras/volume_id/volume_id.h +++ b/extras/volume_id/volume_id.h @@ -3,55 +3,94 @@ * * Copyright (C) 2004 Kay Sievers * - * 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 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, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _VOLUME_ID_H_ #define _VOLUME_ID_H_ -#define VOLUME_ID_VERSION 001 +#define VOLUME_ID_VERSION 27 -#define VOLUME_ID_LABEL_SIZE 16 +#define VOLUME_ID_LABEL_SIZE 64 #define VOLUME_ID_UUID_SIZE 16 #define VOLUME_ID_UUID_STRING_SIZE 37 -#define VOLUME_ID_PATH_MAX 255 +#define VOLUME_ID_FORMAT_SIZE 32 +#define VOLUME_ID_PATH_MAX 256 +#define VOLUME_ID_PARTITIONS_MAX 256 + +enum volume_id_usage { + VOLUME_ID_UNUSED, + VOLUME_ID_UNPROBED, + VOLUME_ID_OTHER, + VOLUME_ID_FILESYSTEM, + VOLUME_ID_PARTITIONTABLE, + VOLUME_ID_RAID, +}; +enum volume_id_type { + VOLUME_ID_ALL, + VOLUME_ID_MSDOSPARTTABLE, + VOLUME_ID_MSDOSEXTENDED, + VOLUME_ID_SWAP, + VOLUME_ID_EXT2, + VOLUME_ID_EXT3, + VOLUME_ID_REISERFS, + VOLUME_ID_XFS, + VOLUME_ID_JFS, + VOLUME_ID_VFAT, + VOLUME_ID_UDF, + VOLUME_ID_ISO9660, + VOLUME_ID_NTFS, + VOLUME_ID_MACPARTMAP, + VOLUME_ID_HFS, + VOLUME_ID_HFSPLUS, + VOLUME_ID_UFS, + VOLUME_ID_LINUX_RAID, + VOLUME_ID_LVM1, + VOLUME_ID_LVM2, + VOLUME_ID_HPTRAID, +}; -enum filesystem_type { - ALL, - EXT2, - EXT3, - REISER, - XFS, - JFS, - MSDOS, - VFAT, - NTFS, - SWAP +struct volume_id_partition { + enum volume_id_usage usage_id; + enum volume_id_type type_id; + char *type; + unsigned long long off; + unsigned long long len; + unsigned int partition_type_raw; }; struct volume_id { - char label[VOLUME_ID_LABEL_SIZE]; - char label_string[VOLUME_ID_LABEL_SIZE+1]; - unsigned char uuid[VOLUME_ID_UUID_SIZE]; - char uuid_string[VOLUME_ID_UUID_STRING_SIZE]; - enum filesystem_type fs_type; - char *fs_name; - int fd; - char *buf; - int fd_close; + unsigned char label_raw[VOLUME_ID_LABEL_SIZE]; + unsigned int label_raw_len; + char label[VOLUME_ID_LABEL_SIZE+1]; + unsigned char uuid_raw[VOLUME_ID_UUID_SIZE]; + char uuid[VOLUME_ID_UUID_STRING_SIZE]; + enum volume_id_usage usage_id; + enum volume_id_type type_id; + char *type; + char type_version[VOLUME_ID_FORMAT_SIZE]; + struct volume_id_partition *partitions; + unsigned int partition_count; + int fd; + unsigned char *sbbuf; + unsigned int sbbuf_len; + unsigned char *seekbuf; + unsigned long long seekbuf_off; + unsigned int seekbuf_len; + int fd_close; }; /* open volume by already open file descriptor */ @@ -64,7 +103,8 @@ extern struct volume_id *volume_id_open_node(const char *path); extern struct volume_id *volume_id_open_dev_t(dev_t devt); /* probe volume for filesystem type and try to read label/uuid */ -extern int volume_id_probe(struct volume_id *id, enum filesystem_type fs_type); +extern int volume_id_probe(struct volume_id *id, enum volume_id_type type, + unsigned long long off, unsigned long long size); /* free allocated device info */ extern void volume_id_close(struct volume_id *id);