Whamcloud - gitweb
Add device-mapper support to the blkid library
[tools/e2fsprogs.git] / lib / blkid / blkidP.h
1 /*
2  * blkidP.h - Internal interfaces for libblkid
3  *
4  * Copyright (C) 2001 Andreas Dilger
5  * Copyright (C) 2003 Theodore Ts'o
6  *
7  * %Begin-Header%
8  * This file may be redistributed under the terms of the
9  * GNU Lesser General Public License.
10  * %End-Header%
11  */
12
13 #ifndef _BLKID_BLKIDP_H
14 #define _BLKID_BLKIDP_H
15
16 #include <sys/types.h>
17 #include <stdio.h>
18
19 #include <blkid/blkid.h>
20
21 #include <blkid/list.h>
22
23 #ifdef __GNUC__
24 #define __BLKID_ATTR(x) __attribute__(x)
25 #else
26 #define __BLKID_ATTR(x)
27 #endif
28
29
30 /*
31  * This describes the attributes of a specific device.
32  * We can traverse all of the tags by bid_tags (linking to the tag bit_names).
33  * The bid_label and bid_uuid fields are shortcuts to the LABEL and UUID tag
34  * values, if they exist.
35  */
36 struct blkid_struct_dev
37 {
38         struct list_head        bid_devs;       /* All devices in the cache */
39         struct list_head        bid_tags;       /* All tags for this device */
40         blkid_cache             bid_cache;      /* Dev belongs to this cache */
41         char                    *bid_name;      /* Device inode pathname */
42         char                    *bid_type;      /* Preferred device TYPE */
43         int                     bid_pri;        /* Device priority */
44         dev_t                   bid_devno;      /* Device major/minor number */
45         time_t                  bid_time;       /* Last update time of device */
46         unsigned int            bid_flags;      /* Device status bitflags */
47         char                    *bid_label;     /* Shortcut to device LABEL */
48         char                    *bid_uuid;      /* Shortcut to binary UUID */
49 };
50
51 #define BLKID_BID_FL_VERIFIED   0x0001  /* Device data validated from disk */
52 #define BLKID_BID_FL_INVALID    0x0004  /* Device is invalid */
53
54 /*
55  * Each tag defines a NAME=value pair for a particular device.  The tags
56  * are linked via bit_names for a single device, so that traversing the
57  * names list will get you a list of all tags associated with a device.
58  * They are also linked via bit_values for all devices, so one can easily
59  * search all tags with a given NAME for a specific value.
60  */
61 struct blkid_struct_tag
62 {
63         struct list_head        bit_tags;       /* All tags for this device */
64         struct list_head        bit_names;      /* All tags with given NAME */
65         char                    *bit_name;      /* NAME of tag (shared) */
66         char                    *bit_val;       /* value of tag */
67         blkid_dev               bit_dev;        /* pointer to device */
68 };
69 typedef struct blkid_struct_tag *blkid_tag;
70
71 /*
72  * Minimum number of seconds between device probes, even when reading
73  * from the cache.  This is to avoid re-probing all devices which were
74  * just probed by another program that does not share the cache.
75  */
76 #define BLKID_PROBE_MIN         2
77
78 /*
79  * Time in seconds an entry remains verified in the in-memory cache
80  * before being reverified (in case of long-running processes that
81  * keep a cache in memory and continue to use it for a long time).
82  */
83 #define BLKID_PROBE_INTERVAL    200
84
85 /* This describes an entire blkid cache file and probed devices.
86  * We can traverse all of the found devices via bic_list.
87  * We can traverse all of the tag types by bic_tags, which hold empty tags
88  * for each tag type.  Those tags can be used as list_heads for iterating
89  * through all devices with a specific tag type (e.g. LABEL).
90  */
91 struct blkid_struct_cache
92 {
93         struct list_head        bic_devs;       /* List head of all devices */
94         struct list_head        bic_tags;       /* List head of all tag types */
95         time_t                  bic_time;       /* Last probe time */
96         time_t                  bic_ftime;      /* Mod time of the cachefile */
97         unsigned int            bic_flags;      /* Status flags of the cache */
98         char                    *bic_filename;  /* filename of cache */
99 };
100
101 #define BLKID_BIC_FL_PROBED     0x0002  /* We probed /proc/partition devices */
102 #define BLKID_BIC_FL_CHANGED    0x0004  /* Cache has changed from disk */
103
104 extern char *blkid_strdup(const char *s);
105 extern char *blkid_strndup(const char *s, const int length);
106
107 #define BLKID_CACHE_FILE "/etc/blkid.tab"
108 extern const char *blkid_devdirs[];
109
110 #define BLKID_ERR_IO     5
111 #define BLKID_ERR_PROC   9
112 #define BLKID_ERR_MEM   12
113 #define BLKID_ERR_CACHE 14
114 #define BLKID_ERR_DEV   19
115 #define BLKID_ERR_PARAM 22
116 #define BLKID_ERR_BIG   27
117
118 /*
119  * Priority settings for different types of devices
120  */
121 #define BLKID_PRI_DM    40
122 #define BLKID_PRI_EVMS  30
123 #define BLKID_PRI_LVM   20
124 #define BLKID_PRI_MD    10
125
126 #if defined(TEST_PROGRAM) && !defined(CONFIG_BLKID_DEBUG)
127 #define CONFIG_BLKID_DEBUG
128 #endif
129
130 #define DEBUG_CACHE     0x0001
131 #define DEBUG_DUMP      0x0002
132 #define DEBUG_DEV       0x0004
133 #define DEBUG_DEVNAME   0x0008
134 #define DEBUG_DEVNO     0x0010
135 #define DEBUG_PROBE     0x0020
136 #define DEBUG_READ      0x0040
137 #define DEBUG_RESOLVE   0x0080
138 #define DEBUG_SAVE      0x0100
139 #define DEBUG_TAG       0x0200
140 #define DEBUG_INIT      0x8000
141 #define DEBUG_ALL       0xFFFF
142
143 #ifdef CONFIG_BLKID_DEBUG
144 #include <stdio.h>
145 extern int      blkid_debug_mask;
146 #define DBG(m,x)        if ((m) & blkid_debug_mask) x;
147 #else
148 #define DBG(m,x)
149 #endif
150
151 #ifdef CONFIG_BLKID_DEBUG
152 extern void blkid_debug_dump_dev(blkid_dev dev);
153 extern void blkid_debug_dump_tag(blkid_tag tag);
154 #endif
155
156 /* lseek.c */
157 extern blkid_loff_t blkid_llseek(int fd, blkid_loff_t offset, int whence);
158
159 /* read.c */
160 extern void blkid_read_cache(blkid_cache cache);
161
162 /* save.c */
163 extern int blkid_flush_cache(blkid_cache cache);
164
165 /*
166  * Functions to create and find a specific tag type: tag.c
167  */
168 extern void blkid_free_tag(blkid_tag tag);
169 extern blkid_tag blkid_find_tag_dev(blkid_dev dev, const char *type);
170 extern int blkid_set_tag(blkid_dev dev, const char *name,
171                          const char *value, const int vlength);
172
173 /*
174  * Functions to create and find a specific tag type: dev.c
175  */
176 extern blkid_dev blkid_new_dev(void);
177 extern void blkid_free_dev(blkid_dev dev);
178
179 #ifdef __cplusplus
180 }
181 #endif
182
183 #endif /* _BLKID_BLKIDP_H */