From f0b3a20e9e9d2c865d2ede9e10ae0d027fda358a Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Mon, 7 Apr 2003 10:25:35 +0000 Subject: [PATCH] Cleanup storage keyword scanning git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@425 91ce42f0-d328-0410-95d8-f526ca767f89 --- bacula/src/dird/protos.h | 40 ++++++++++++++++++------------------- bacula/src/dird/ua_cmds.c | 8 ++++---- bacula/src/dird/ua_label.c | 2 +- bacula/src/dird/ua_select.c | 37 +++++++++++++++++----------------- bacula/src/dird/ua_status.c | 2 +- 5 files changed, 45 insertions(+), 44 deletions(-) diff --git a/bacula/src/dird/protos.h b/bacula/src/dird/protos.h index c9a11cbc67..5364cc1311 100644 --- a/bacula/src/dird/protos.h +++ b/bacula/src/dird/protos.h @@ -48,13 +48,13 @@ extern char *level_to_str(int level); /* fd_cmds.c */ extern int connect_to_file_daemon(JCR *jcr, int retry_interval, - int max_retry_time, int verbose); + int max_retry_time, int verbose); extern int send_include_list(JCR *jcr); extern int send_exclude_list(JCR *jcr); extern int get_attributes_and_put_in_catalog(JCR *jcr); extern int get_attributes_and_compare_to_catalog(JCR *jcr, JobId_t JobId); extern int put_file_into_catalog(JCR *jcr, long file_index, char *fname, - char *link, char *attr, int stream); + char *link, char *attr, int stream); /* job.c */ extern void set_jcr_defaults(JCR *jcr, JOB *job); @@ -67,7 +67,7 @@ extern void mount_request(JCR *jcr, BSOCK *bs, char *buf); /* msgchan.c */ extern int connect_to_storage_daemon(JCR *jcr, int retry_interval, - int max_retry_time, int verbose); + int max_retry_time, int verbose); extern int start_storage_daemon_job(JCR *jcr); extern int start_storage_daemon_message_thread(JCR *jcr); extern int32_t bget_msg(BSOCK *bs, int type); @@ -98,27 +98,27 @@ void prtit(void *ctx, char *msg); void bsendmsg(void *sock, char *fmt, ...); /* ua_select.c */ -STORE *select_storage_resource(UAContext *ua); -JOB *select_job_resource(UAContext *ua); -JOB *select_restore_job_resource(UAContext *ua); -CLIENT *select_client_resource(UAContext *ua); +STORE *select_storage_resource(UAContext *ua); +JOB *select_job_resource(UAContext *ua); +JOB *select_restore_job_resource(UAContext *ua); +CLIENT *select_client_resource(UAContext *ua); FILESET *select_fileset_resource(UAContext *ua); -int select_pool_and_media_dbr(UAContext *ua, POOL_DBR *pr, MEDIA_DBR *mr); -int select_pool_dbr(UAContext *ua, POOL_DBR *pr); -int select_client_dbr(UAContext *ua, CLIENT_DBR *cr); - -void start_prompt(UAContext *ua, char *msg); -void add_prompt(UAContext *ua, char *prompt); -int do_prompt(UAContext *ua, char *msg, char *prompt, int max_prompt); -CAT *get_catalog_resource(UAContext *ua); -STORE *get_storage_resource(UAContext *ua, char *cmd); -int get_media_type(UAContext *ua, char *MediaType, int max_media); -int get_pool_dbr(UAContext *ua, POOL_DBR *pr); -int get_client_dbr(UAContext *ua, CLIENT_DBR *cr); +int select_pool_and_media_dbr(UAContext *ua, POOL_DBR *pr, MEDIA_DBR *mr); +int select_pool_dbr(UAContext *ua, POOL_DBR *pr); +int select_client_dbr(UAContext *ua, CLIENT_DBR *cr); + +void start_prompt(UAContext *ua, char *msg); +void add_prompt(UAContext *ua, char *prompt); +int do_prompt(UAContext *ua, char *msg, char *prompt, int max_prompt); +CAT *get_catalog_resource(UAContext *ua); +STORE *get_storage_resource(UAContext *ua, char *cmd, int use_default); +int get_media_type(UAContext *ua, char *MediaType, int max_media); +int get_pool_dbr(UAContext *ua, POOL_DBR *pr); +int get_client_dbr(UAContext *ua, CLIENT_DBR *cr); POOL *get_pool_resource(UAContext *ua); POOL *select_pool_resource(UAContext *ua); CLIENT *get_client_resource(UAContext *ua); -int get_job_dbr(UAContext *ua, JOB_DBR *jr); +int get_job_dbr(UAContext *ua, JOB_DBR *jr); int find_arg_keyword(UAContext *ua, char **list); int do_keyword_prompt(UAContext *ua, char *msg, char **list); diff --git a/bacula/src/dird/ua_cmds.c b/bacula/src/dird/ua_cmds.c index 3adb44f599..e3ca14c7b5 100644 --- a/bacula/src/dird/ua_cmds.c +++ b/bacula/src/dird/ua_cmds.c @@ -211,7 +211,7 @@ static int addcmd(UAContext *ua, char *cmd) } /* Get media type */ - if ((store = get_storage_resource(ua, cmd)) != NULL) { + if ((store = get_storage_resource(ua, cmd, 0)) != NULL) { strcpy(mr.MediaType, store->media_type); } else if (!get_media_type(ua, mr.MediaType, sizeof(mr.MediaType))) { return 1; @@ -1134,7 +1134,7 @@ static int setdebugcmd(UAContext *ua, char *cmd) return 1; } } - store = get_storage_resource(ua, cmd); + store = get_storage_resource(ua, cmd, 0); if (store) { do_storage_setdebug(ua, store, level); return 1; @@ -1155,7 +1155,7 @@ static int setdebugcmd(UAContext *ua, char *cmd) debug_level = level; break; case 1: - store = get_storage_resource(ua, cmd); + store = get_storage_resource(ua, cmd, 0); if (store) { do_storage_setdebug(ua, store, level); } @@ -1294,7 +1294,7 @@ static void do_mount_cmd(int mount, UAContext *ua, char *cmd) } Dmsg1(120, "mount: %s\n", ua->UA_sock->msg); - store = get_storage_resource(ua, cmd); + store = get_storage_resource(ua, cmd, 1); if (!store) { return; } diff --git a/bacula/src/dird/ua_label.c b/bacula/src/dird/ua_label.c index 06e4619825..47dbba13a5 100644 --- a/bacula/src/dird/ua_label.c +++ b/bacula/src/dird/ua_label.c @@ -84,7 +84,7 @@ static int do_label(UAContext *ua, char *cmd, int relabel) if (!open_db(ua)) { return 1; } - store = get_storage_resource(ua, cmd); + store = get_storage_resource(ua, cmd, 1); if (!store) { return 1; } diff --git a/bacula/src/dird/ua_select.c b/bacula/src/dird/ua_select.c index 2835bef76b..5c99a18e25 100644 --- a/bacula/src/dird/ua_select.c +++ b/bacula/src/dird/ua_select.c @@ -660,41 +660,44 @@ int do_prompt(UAContext *ua, char *msg, char *prompt, int max_prompt) /* * We scan what the user has entered looking for - * device= ???? does this work ???? * storage= * job= * jobid= * ? (prompt him with storage list) * (prompt him with storage list) + * + * If use_default is set, we assume that any keyword without a value + * is the name of the Storage resource wanted. */ -STORE *get_storage_resource(UAContext *ua, char *cmd) +STORE *get_storage_resource(UAContext *ua, char *cmd, int use_default) { - char *store_name, *device_name; - STORE *store; + char *store_name = NULL; + STORE *store = NULL; int jobid; JCR *jcr; int i; - device_name = NULL; - store_name = NULL; for (i=1; iargc; i++) { - if (!ua->argv[i]) { + if (use_default && !ua->argv[i]) { /* Default argument is storage */ if (store_name) { bsendmsg(ua, _("Storage name given twice.\n")); return NULL; } + /* Ignore barcode(s) keywords */ + if (strncasecmp("barcode", ua->argk[i], 7) == 0) { + continue; + } store_name = ua->argk[i]; if (*store_name == '?') { - return select_storage_resource(ua); + *store_name = 0; + break; } } else { - if (strcasecmp(ua->argk[i], _("device")) == 0) { - device_name = ua->argv[i]; - - } else if (strcasecmp(ua->argk[i], _("storage")) == 0) { + if (strcasecmp(ua->argk[i], _("storage")) == 0) { store_name = ua->argv[i]; + break; } else if (strcasecmp(ua->argk[i], _("jobid")) == 0) { jobid = atoi(ua->argv[i]); @@ -708,7 +711,7 @@ STORE *get_storage_resource(UAContext *ua, char *cmd) } store = jcr->store; free_jcr(jcr); - return store; + break; } else if (strcasecmp(ua->argk[i], _("job")) == 0) { if (!(jcr=get_jcr_by_partial_name(ua->argv[i]))) { @@ -717,20 +720,18 @@ STORE *get_storage_resource(UAContext *ua, char *cmd) } store = jcr->store; free_jcr(jcr); - return store; + break; } } } - if (!store_name) { - bsendmsg(ua, _("A storage device name must be given.\n")); - store = NULL; - } else { + if (!store && store_name) { store = (STORE *)GetResWithName(R_STORAGE, store_name); if (!store) { bsendmsg(ua, "Storage resource %s: not found\n", store_name); } } + /* No keywords found, so present a selection list */ if (!store) { store = select_storage_resource(ua); } diff --git a/bacula/src/dird/ua_status.c b/bacula/src/dird/ua_status.c index e4ff79763a..75baaa34db 100644 --- a/bacula/src/dird/ua_status.c +++ b/bacula/src/dird/ua_status.c @@ -69,7 +69,7 @@ int statuscmd(UAContext *ua, char *cmd) } return 1; } else { - store = get_storage_resource(ua, cmd); + store = get_storage_resource(ua, cmd, 0); if (store) { do_storage_status(ua, store); } -- 2.39.5