2001-08-21 12:56:08 +00:00
/*
2004-03-30 19:35:44 +00:00
* Copyright ( C ) 2001 - 2004 Sistina Software , Inc . All rights reserved .
* Copyright ( C ) 2004 Red Hat , Inc . All rights reserved .
2001-08-21 12:56:08 +00:00
*
2004-03-30 19:35:44 +00:00
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
* of the GNU General Public License v .2 .
*
* 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 . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
2001-08-21 12:56:08 +00:00
*/
2001-09-25 12:49:28 +00:00
# ifndef _LVM_CONFIG_H
# define _LVM_CONFIG_H
2004-05-04 18:28:15 +00:00
struct device ;
struct cmd_context ;
2003-07-04 22:34:56 +00:00
2001-08-21 12:56:08 +00:00
enum {
2002-11-18 14:01:16 +00:00
CFG_STRING ,
CFG_FLOAT ,
CFG_INT ,
2002-08-01 12:46:52 +00:00
CFG_EMPTY_ARRAY
2001-08-21 12:56:08 +00:00
} ;
struct config_value {
2002-11-18 14:01:16 +00:00
int type ;
union {
int i ;
float r ;
char * str ;
} v ;
struct config_value * next ; /* for arrays */
2001-08-21 12:56:08 +00:00
} ;
struct config_node {
2002-11-18 14:01:16 +00:00
char * key ;
struct config_node * sib , * child ;
struct config_value * v ;
2001-08-21 12:56:08 +00:00
} ;
2002-11-18 14:01:16 +00:00
struct config_tree {
struct config_node * root ;
2001-08-21 12:56:08 +00:00
} ;
2004-05-04 18:28:15 +00:00
struct config_tree_list {
struct list list ;
struct config_tree * cft ;
} ;
struct config_tree * create_config_tree ( const char * filename ) ;
void destroy_config_tree ( struct config_tree * cft ) ;
2001-08-21 12:56:08 +00:00
2002-11-18 14:01:16 +00:00
typedef uint32_t ( * checksum_fn_t ) ( uint32_t initial , void * buf , uint32_t size ) ;
2004-05-04 18:28:15 +00:00
int read_config_fd ( struct config_tree * cft , struct device * dev ,
2002-12-19 23:25:55 +00:00
off_t offset , size_t size , off_t offset2 , size_t size2 ,
2002-11-18 14:01:16 +00:00
checksum_fn_t checksum_fn , uint32_t checksum ) ;
2004-05-04 18:28:15 +00:00
int read_config_file ( struct config_tree * cft ) ;
int write_config_file ( struct config_tree * cft , const char * file ) ;
time_t config_file_timestamp ( struct config_tree * cft ) ;
int config_file_changed ( struct config_tree * cft ) ;
int merge_config_tree ( struct cmd_context * cmd , struct config_tree * cft ,
struct config_tree * newdata ) ;
2001-08-21 12:56:08 +00:00
2004-05-04 18:28:15 +00:00
struct config_node * find_config_node ( const struct config_node * cn ,
2004-03-08 18:28:45 +00:00
const char * path ) ;
2001-08-21 12:56:08 +00:00
2004-05-04 18:28:15 +00:00
const char * find_config_str ( const struct config_node * cn , const char * path ,
2004-03-08 18:28:45 +00:00
const char * fail ) ;
2001-08-21 12:56:08 +00:00
2004-05-04 18:28:15 +00:00
int find_config_int ( const struct config_node * cn , const char * path , int fail ) ;
2001-08-21 12:56:08 +00:00
2004-05-04 18:28:15 +00:00
float find_config_float ( const struct config_node * cn , const char * path ,
float fail ) ;
2001-08-21 12:56:08 +00:00
2002-01-07 10:23:52 +00:00
/*
* Understands ( 0 , ~ 0 ) , ( y , n ) , ( yes , no ) , ( on ,
* off ) , ( true , false ) .
*/
2004-05-04 18:28:15 +00:00
int find_config_bool ( const struct config_node * cn , const char * path , int fail ) ;
2002-01-10 16:47:58 +00:00
2004-05-04 18:28:15 +00:00
int get_config_uint32 ( const struct config_node * cn , const char * path ,
2004-03-08 18:28:45 +00:00
uint32_t * result ) ;
2002-01-10 16:47:58 +00:00
2004-05-04 18:28:15 +00:00
int get_config_uint64 ( const struct config_node * cn , const char * path ,
2004-03-08 18:28:45 +00:00
uint64_t * result ) ;
2002-01-10 16:47:58 +00:00
2004-05-04 18:28:15 +00:00
int get_config_str ( const struct config_node * cn , const char * path ,
char * * result ) ;
2002-07-11 14:07:43 +00:00
2001-08-21 12:56:08 +00:00
# endif