2001-09-25 16:49:28 +04:00
/*
* Copyright ( C ) 2001 Sistina Software
*
* LVM 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 ; either version 2 , or ( at your option )
* any later version .
*
* LVM 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 GNU CC ; see the file COPYING . If not , write to
* the Free Software Foundation , 59 Temple Place - Suite 330 ,
* Boston , MA 02111 - 1307 , USA .
*/
2001-10-09 21:20:02 +04:00
# ifndef _LVM_LVM_H
# define _LVM_LVM_H
2001-09-25 16:49:28 +04:00
2001-10-08 22:44:22 +04:00
# include "pool.h"
# include "dbg_malloc.h"
# include "list.h"
# include "log.h"
2001-12-31 22:09:51 +03:00
# include "lvm-string.h"
2001-10-01 19:14:39 +04:00
# include "metadata.h"
# include "config.h"
# include "dev-cache.h"
# include "device.h"
2001-12-31 22:18:44 +03:00
# include "vgcache.h"
2001-10-01 19:14:39 +04:00
# include "display.h"
2001-09-25 16:49:28 +04:00
# include "errors.h"
2001-10-01 23:36:06 +04:00
# include "filter.h"
2001-10-23 22:20:27 +04:00
# include "filter-persistent.h"
2001-10-23 15:50:49 +04:00
# include "filter-composite.h"
# include "filter-regex.h"
2001-10-08 22:44:22 +04:00
# include "format1.h"
2001-12-31 22:09:51 +03:00
# include "format-text.h"
2001-09-25 16:49:28 +04:00
# include "toollib.h"
2001-10-16 20:25:28 +04:00
# include "activate.h"
2002-01-07 14:12:11 +03:00
# include "archive.h"
# include <stdio.h>
# include <stdarg.h>
# include <stdlib.h>
# include <unistd.h>
# include <sys/types.h>
# include <ctype.h>
# include <string.h>
# include <limits.h>
2001-09-25 16:49:28 +04:00
# define CMD_LEN 256
# define MAX_ARGS 64
/* command functions */
typedef int ( * command_fn ) ( int argc , char * * argv ) ;
# define xx(a, b...) int a(int argc, char **argv);
# include "commands.h"
# undef xx
/* define the enums for the command line switches */
enum {
2001-12-17 19:58:17 +03:00
# define arg(a, b, c, d) a ,
2001-09-25 16:49:28 +04:00
# include "args.h"
2001-12-17 19:58:17 +03:00
# undef arg
2001-09-25 16:49:28 +04:00
} ;
2001-11-10 01:01:04 +03:00
typedef enum {
SIGN_NONE = 0 ,
SIGN_PLUS = 1 ,
SIGN_MINUS = 2
} sign_t ;
2001-12-17 19:58:17 +03:00
2001-09-25 16:49:28 +04:00
/* a global table of possible arguments */
struct arg {
char short_arg ;
char * long_arg ;
int ( * fn ) ( struct arg * a ) ;
2002-01-10 19:47:04 +03:00
2001-09-25 16:49:28 +04:00
int count ;
char * value ;
2001-11-10 01:01:04 +03:00
uint32_t i_value ;
sign_t sign ;
2001-09-25 16:49:28 +04:00
} ;
extern struct arg the_args [ ARG_COUNT + 1 ] ;
2001-11-13 17:17:50 +03:00
/* a register of the lvm commands */
struct command {
const char * name ;
const char * desc ;
const char * usage ;
command_fn fn ;
int num_args ;
int * valid_args ;
} ;
extern struct command * the_command ;
2002-01-15 20:37:23 +03:00
extern struct uuid_map * the_um ;
2001-11-13 17:17:50 +03:00
2001-09-25 16:49:28 +04:00
void usage ( const char * name ) ;
/* the argument verify/normalise functions */
int yes_no_arg ( struct arg * a ) ;
int size_arg ( struct arg * a ) ;
int int_arg ( struct arg * a ) ;
2001-11-10 01:01:04 +03:00
int int_arg_with_sign ( struct arg * a ) ;
2001-09-25 16:49:28 +04:00
int string_arg ( struct arg * a ) ;
int permission_arg ( struct arg * a ) ;
2001-10-12 14:32:06 +04:00
char yes_no_prompt ( const char * prompt , . . . ) ;
2001-09-25 16:49:28 +04:00
/* we use the enums to access the switches */
static inline int arg_count ( int a ) {
return the_args [ a ] . count ;
}
static inline char * arg_value ( int a ) {
return the_args [ a ] . value ;
}
static inline char * arg_str_value ( int a , char * def )
{
return arg_count ( a ) ? the_args [ a ] . value : def ;
}
2001-11-10 01:01:04 +03:00
static inline uint32_t arg_int_value ( int a , uint32_t def )
2001-09-25 16:49:28 +04:00
{
return arg_count ( a ) ? the_args [ a ] . i_value : def ;
}
2001-11-10 01:01:04 +03:00
static inline sign_t arg_sign_value ( int a , sign_t def )
{
return arg_count ( a ) ? the_args [ a ] . sign : def ;
}
2001-09-25 16:49:28 +04:00
static inline int arg_count_increment ( int a )
{
return the_args [ a ] . count + + ;
}
2001-11-13 17:17:50 +03:00
static inline const char * command_name ( void )
{
return the_command - > name ;
}
2001-10-08 22:44:22 +04:00
2001-11-12 18:10:01 +03:00
extern struct format_instance * fid ;
2001-10-08 22:44:22 +04:00
2001-11-19 18:20:50 +03:00
extern int lvdisplay_single ( struct logical_volume * lv ) ;
2001-10-06 01:39:30 +04:00
# endif