119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * blkidP.h - Internal interfaces for libblkid
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *
419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright (C) 2001 Andreas Dilger
519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Copyright (C) 2003 Theodore Ts'o
619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project *
719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %Begin-Header%
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This file may be redistributed under the terms of the
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * GNU Lesser General Public License.
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * %End-Header%
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifndef _BLKID_BLKIDP_H
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define _BLKID_BLKIDP_H
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <sys/types.h>
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h>
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <blkid/blkid.h>
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <blkid/list.h>
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef __GNUC__
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define __BLKID_ATTR(x) __attribute__(x)
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define __BLKID_ATTR(x)
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * This describes the attributes of a specific device.
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * We can traverse all of the tags by bid_tags (linking to the tag bit_names).
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * The bid_label and bid_uuid fields are shortcuts to the LABEL and UUID tag
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * values, if they exist.
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct blkid_struct_dev
3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct list_head	bid_devs;	/* All devices in the cache */
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct list_head	bid_tags;	/* All tags for this device */
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	blkid_cache		bid_cache;	/* Dev belongs to this cache */
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char			*bid_name;	/* Device inode pathname */
4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char			*bid_type;	/* Preferred device TYPE */
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	int			bid_pri;	/* Device priority */
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	dev_t			bid_devno;	/* Device major/minor number */
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	time_t			bid_time;	/* Last update time of device */
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	unsigned int		bid_flags;	/* Device status bitflags */
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char			*bid_label;	/* Shortcut to device LABEL */
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char			*bid_uuid;	/* Shortcut to binary UUID */
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project};
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_BID_FL_VERIFIED	0x0001	/* Device data validated from disk */
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_BID_FL_INVALID	0x0004	/* Device is invalid */
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Each tag defines a NAME=value pair for a particular device.  The tags
5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * are linked via bit_names for a single device, so that traversing the
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * names list will get you a list of all tags associated with a device.
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * They are also linked via bit_values for all devices, so one can easily
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * search all tags with a given NAME for a specific value.
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct blkid_struct_tag
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct list_head	bit_tags;	/* All tags for this device */
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct list_head	bit_names;	/* All tags with given NAME */
6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char			*bit_name;	/* NAME of tag (shared) */
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char			*bit_val;	/* value of tag */
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	blkid_dev		bit_dev;	/* pointer to device */
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project};
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projecttypedef struct blkid_struct_tag *blkid_tag;
7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Minimum number of seconds between device probes, even when reading
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * from the cache.  This is to avoid re-probing all devices which were
7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * just probed by another program that does not share the cache.
7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_PROBE_MIN		2
7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Time in seconds an entry remains verified in the in-memory cache
8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * before being reverified (in case of long-running processes that
8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * keep a cache in memory and continue to use it for a long time).
8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_PROBE_INTERVAL	200
8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* This describes an entire blkid cache file and probed devices.
8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * We can traverse all of the found devices via bic_list.
8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * We can traverse all of the tag types by bic_tags, which hold empty tags
8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * for each tag type.  Those tags can be used as list_heads for iterating
8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * through all devices with a specific tag type (e.g. LABEL).
9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectstruct blkid_struct_cache
9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{
9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct list_head	bic_devs;	/* List head of all devices */
9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	struct list_head	bic_tags;	/* List head of all tag types */
9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	time_t			bic_time;	/* Last probe time */
9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	time_t			bic_ftime; 	/* Mod time of the cachefile */
9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	unsigned int		bic_flags;	/* Status flags of the cache */
9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	char			*bic_filename;	/* filename of cache */
9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project};
10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_BIC_FL_PROBED	0x0002	/* We probed /proc/partition devices */
10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_BIC_FL_CHANGED	0x0004	/* Cache has changed from disk */
10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern char *blkid_strdup(const char *s);
10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern char *blkid_strndup(const char *s, const int length);
10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_CACHE_FILE "/etc/blkid.tab"
10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_ERR_IO	 5
11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_ERR_PROC	 9
11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_ERR_MEM	12
11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_ERR_CACHE	14
11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_ERR_DEV	19
11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_ERR_PARAM	22
11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_ERR_BIG	27
11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Priority settings for different types of devices
11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_PRI_DM	40
12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_PRI_EVMS	30
12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_PRI_LVM	20
12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define BLKID_PRI_MD	10
12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#if defined(TEST_PROGRAM) && !defined(CONFIG_BLKID_DEBUG)
12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define CONFIG_BLKID_DEBUG
12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_CACHE	0x0001
13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_DUMP	0x0002
13119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_DEV	0x0004
13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_DEVNAME	0x0008
13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_DEVNO	0x0010
13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_PROBE	0x0020
13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_READ	0x0040
13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_RESOLVE	0x0080
13719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_SAVE	0x0100
13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_TAG	0x0200
13919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_INIT	0x8000
14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DEBUG_ALL	0xFFFF
14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef CONFIG_BLKID_DEBUG
14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#include <stdio.h>
14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int	blkid_debug_mask;
14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DBG(m,x)	if ((m) & blkid_debug_mask) x;
14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#else
14719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#define DBG(m,x)
14819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
14919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
15019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef CONFIG_BLKID_DEBUG
15119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void blkid_debug_dump_dev(blkid_dev dev);
15219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void blkid_debug_dump_tag(blkid_tag tag);
15319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
15419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
1553984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt/* devno.c */
1563984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidtstruct dir_list {
1573984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	char	*name;
1583984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt	struct dir_list *next;
1593984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt};
1603984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidtextern void blkid__scan_dir(char *, dev_t, struct dir_list **, char **);
1613984b61df41c68966bdfbb2a5e5a45ef4b9a536cDmitry Shmidt
16219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* lseek.c */
16319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern blkid_loff_t blkid_llseek(int fd, blkid_loff_t offset, int whence);
16419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
16519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* read.c */
16619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void blkid_read_cache(blkid_cache cache);
16719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
16819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/* save.c */
16919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int blkid_flush_cache(blkid_cache cache);
17019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
17119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
17219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Functions to create and find a specific tag type: tag.c
17319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
17419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void blkid_free_tag(blkid_tag tag);
17519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern blkid_tag blkid_find_tag_dev(blkid_dev dev, const char *type);
17619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern int blkid_set_tag(blkid_dev dev, const char *name,
17719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			 const char *value, const int vlength);
17819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
17919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/*
18019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project * Functions to create and find a specific tag type: dev.c
18119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project */
18219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern blkid_dev blkid_new_dev(void);
18319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectextern void blkid_free_dev(blkid_dev dev);
18419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
18519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#ifdef __cplusplus
18619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
18719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif
18819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
18919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#endif /* _BLKID_BLKIDP_H */
190