Add a dry-run mode to AppBroker(1)
This commit is contained in:
parent
0796ca2ab9
commit
8654a13065
|
@ -28,19 +28,25 @@
|
||||||
/* AppBroker */
|
/* AppBroker */
|
||||||
/* private */
|
/* private */
|
||||||
/* types */
|
/* types */
|
||||||
|
typedef struct _AppBrokerPrefs
|
||||||
|
{
|
||||||
|
AppTransportMode mode;
|
||||||
|
char const * outfile;
|
||||||
|
int dryrun;
|
||||||
|
} AppBrokerPrefs;
|
||||||
|
|
||||||
typedef struct _AppBroker
|
typedef struct _AppBroker
|
||||||
{
|
{
|
||||||
|
AppBrokerPrefs prefs;
|
||||||
Config * config;
|
Config * config;
|
||||||
char const * prefix;
|
char const * prefix;
|
||||||
char const * outfile;
|
|
||||||
FILE * fp;
|
FILE * fp;
|
||||||
int error;
|
int error;
|
||||||
} AppBroker;
|
} AppBroker;
|
||||||
|
|
||||||
|
|
||||||
/* prototypes */
|
/* prototypes */
|
||||||
static int _appbroker(AppTransportMode mode, char const * outfile,
|
static int _appbroker(AppBrokerPrefs * prefs, char const * filename);
|
||||||
char const * filename);
|
|
||||||
static int _usage(void);
|
static int _usage(void);
|
||||||
|
|
||||||
|
|
||||||
|
@ -60,11 +66,17 @@ static int _appbroker_foreach_constant(char const * key, char const * value,
|
||||||
static void _appbroker_head(AppBroker * appbroker);
|
static void _appbroker_head(AppBroker * appbroker);
|
||||||
static void _appbroker_tail(AppBroker * appbroker);
|
static void _appbroker_tail(AppBroker * appbroker);
|
||||||
|
|
||||||
static int _appbroker(AppTransportMode mode, char const * outfile,
|
static int _appbroker(AppBrokerPrefs * prefs, char const * filename)
|
||||||
char const * filename)
|
|
||||||
{
|
{
|
||||||
AppBroker appbroker;
|
AppBroker appbroker;
|
||||||
|
|
||||||
|
if(prefs != NULL)
|
||||||
|
appbroker.prefs = *prefs;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memset(&appbroker.prefs, 0, sizeof(appbroker.prefs));
|
||||||
|
appbroker.prefs.mode = ATM_SERVER;
|
||||||
|
}
|
||||||
if((appbroker.config = config_new()) == NULL)
|
if((appbroker.config = config_new()) == NULL)
|
||||||
return error_print(APPBROKER_PROGNAME);
|
return error_print(APPBROKER_PROGNAME);
|
||||||
if(config_load(appbroker.config, filename) != 0
|
if(config_load(appbroker.config, filename) != 0
|
||||||
|
@ -75,19 +87,22 @@ static int _appbroker(AppTransportMode mode, char const * outfile,
|
||||||
return error_print(APPBROKER_PROGNAME);
|
return error_print(APPBROKER_PROGNAME);
|
||||||
}
|
}
|
||||||
appbroker.fp = NULL;
|
appbroker.fp = NULL;
|
||||||
if(_appbroker_do(&appbroker, mode) == 0)
|
if(_appbroker_do(&appbroker, appbroker.prefs.mode) == 0
|
||||||
|
&& appbroker.prefs.dryrun == 0)
|
||||||
{
|
{
|
||||||
if((appbroker.outfile = outfile) == NULL)
|
if(appbroker.prefs.outfile == NULL)
|
||||||
appbroker.fp = stdout;
|
appbroker.fp = stdout;
|
||||||
else if((appbroker.fp = fopen(outfile, "w")) == NULL)
|
else if((appbroker.fp = fopen(appbroker.prefs.outfile, "w"))
|
||||||
|
== NULL)
|
||||||
{
|
{
|
||||||
config_delete(appbroker.config);
|
config_delete(appbroker.config);
|
||||||
return error_set_print(APPBROKER_PROGNAME, 1, "%s: %s",
|
return error_set_print(APPBROKER_PROGNAME, 1, "%s: %s",
|
||||||
outfile, strerror(errno));
|
appbroker.prefs.outfile,
|
||||||
|
strerror(errno));
|
||||||
}
|
}
|
||||||
_appbroker_do(&appbroker, mode);
|
_appbroker_do(&appbroker, appbroker.prefs.mode);
|
||||||
}
|
}
|
||||||
if(outfile != NULL)
|
if(appbroker.fp != NULL && appbroker.prefs.outfile != NULL)
|
||||||
fclose(appbroker.fp);
|
fclose(appbroker.fp);
|
||||||
config_delete(appbroker.config);
|
config_delete(appbroker.config);
|
||||||
return appbroker.error;
|
return appbroker.error;
|
||||||
|
@ -341,8 +356,8 @@ static void _appbroker_tail(AppBroker * appbroker)
|
||||||
/* usage */
|
/* usage */
|
||||||
static int _usage(void)
|
static int _usage(void)
|
||||||
{
|
{
|
||||||
fputs("Usage: " APPBROKER_PROGNAME " [-cs][-o outfile] filename\n",
|
fputs("Usage: " APPBROKER_PROGNAME " [-cns][-o outfile] filename\n"
|
||||||
stderr);
|
" -n Only check for errors (dry-run)\n", stderr);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,25 +366,29 @@ static int _usage(void)
|
||||||
int main(int argc, char * argv[])
|
int main(int argc, char * argv[])
|
||||||
{
|
{
|
||||||
int o;
|
int o;
|
||||||
AppTransportMode mode = ATM_SERVER;
|
AppBrokerPrefs prefs;
|
||||||
char const * outfile = NULL;
|
|
||||||
|
|
||||||
while((o = getopt(argc, argv, "co:s")) != -1)
|
memset(&prefs, 0, sizeof(prefs));
|
||||||
|
prefs.mode = ATM_SERVER;
|
||||||
|
while((o = getopt(argc, argv, "cno:s")) != -1)
|
||||||
switch(o)
|
switch(o)
|
||||||
{
|
{
|
||||||
case 'c':
|
case 'c':
|
||||||
mode = ATM_CLIENT;
|
prefs.mode = ATM_CLIENT;
|
||||||
|
break;
|
||||||
|
case 'n':
|
||||||
|
prefs.dryrun = 1;
|
||||||
break;
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
outfile = optarg;
|
prefs.outfile = optarg;
|
||||||
break;
|
break;
|
||||||
case 's':
|
case 's':
|
||||||
mode = ATM_SERVER;
|
prefs.mode = ATM_SERVER;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return _usage();
|
return _usage();
|
||||||
}
|
}
|
||||||
if(optind + 1 != argc)
|
if(optind + 1 != argc)
|
||||||
return _usage();
|
return _usage();
|
||||||
return (_appbroker(mode, outfile, argv[optind]) == 0) ? 0 : 2;
|
return (_appbroker(&prefs, argv[optind]) == 0) ? 0 : 2;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user