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