--- /dev/null
+/*
+ * Amanda, The Advanced Maryland Automatic Network Disk Archiver
+ * Copyright (c) 1991-1998 University of Maryland at College Park
+ * All Rights Reserved.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of U.M. not be used in advertising or
+ * publicity pertaining to distribution of the software without specific,
+ * written prior permission. U.M. makes no representations about the
+ * suitability of this software for any purpose. It is provided "as is"
+ * without express or implied warranty.
+ *
+ * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.
+ * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * Authors: the Amanda Development Team. Its members are listed in a
+ * file named AUTHORS, in the root directory of this distribution.
+ */
+/*
+ * $Id: amandad_util.c,v 1.5 2006/07/19 17:46:07 martinea Exp $
+ *
+ */
+
+#include "amandad.h"
+#include "util.h"
+
+#define MAXMAXDUMPS 16
+
+void
+init_g_options(
+ g_option_t * g_options)
+{
+ g_options->str = NULL;
+ g_options->features = NULL;
+ g_options->hostname = NULL;
+ g_options->auth = NULL;
+ g_options->maxdumps = 0;
+ g_options->config = NULL;
+}
+
+
+g_option_t *
+parse_g_options(
+ char * str,
+ int verbose)
+{
+ g_option_t *g_options;
+ char *p, *tok;
+ int new_maxdumps;
+
+ g_options = alloc(sizeof(g_option_t));
+ init_g_options(g_options);
+ g_options->str = stralloc(str);
+
+ p = stralloc(str);
+ tok = strtok(p,";");
+
+ while (tok != NULL) {
+ if(strncmp(tok,"features=", 9) == 0) {
+ if(g_options->features != NULL) {
+ dbprintf(("%s: multiple features option\n",
+ debug_prefix(NULL)));
+ if(verbose) {
+ printf("ERROR [multiple features option]\n");
+ }
+ }
+ if((g_options->features = am_string_to_feature(tok+9)) == NULL) {
+ dbprintf(("%s: bad features value \"%s\n",
+ debug_prefix(NULL), tok+10));
+ if(verbose) {
+ printf("ERROR [bad features value \"%s\"]\n", tok+10);
+ }
+ }
+ }
+ else if(strncmp(tok,"hostname=", 9) == 0) {
+ if(g_options->hostname != NULL) {
+ dbprintf(("%s: multiple hostname option\n",
+ debug_prefix(NULL)));
+ if(verbose) {
+ printf("ERROR [multiple hostname option]\n");
+ }
+ }
+ g_options->hostname = stralloc(tok+9);
+ }
+ else if(strncmp(tok,"auth=", 5) == 0) {
+ if(g_options->auth != NULL) {
+ dbprintf(("%s: multiple auth option\n",
+ debug_prefix(NULL)));
+ if(verbose) {
+ printf("ERROR [multiple auth option]\n");
+ }
+ }
+ g_options->auth = stralloc(tok+5);
+ }
+ else if(strncmp(tok,"maxdumps=", 9) == 0) {
+ if(g_options->maxdumps != 0) {
+ dbprintf(("%s: multiple maxdumps option\n",
+ debug_prefix(NULL)));
+ if(verbose) {
+ printf("ERROR [multiple maxdumps option]\n");
+ }
+ }
+ if(sscanf(tok+9, "%d;", &new_maxdumps) == 1) {
+ if (new_maxdumps > MAXMAXDUMPS) {
+ g_options->maxdumps = MAXMAXDUMPS;
+ }
+ else if (new_maxdumps > 0) {
+ g_options->maxdumps = new_maxdumps;
+ }
+ else {
+ dbprintf(("%s: bad maxdumps value \"%s\"\n",
+ debug_prefix(NULL), tok+9));
+ if(verbose) {
+ printf("ERROR [bad maxdumps value \"%s\"]\n",
+ tok+9);
+ }
+ }
+ }
+ else {
+ dbprintf(("%s: bad maxdumps value \"%s\"\n",
+ debug_prefix(NULL), tok+9));
+ if(verbose) {
+ printf("ERROR [bad maxdumps value \"%s\"]\n",
+ tok+9);
+ }
+ }
+ }
+ else if(strncmp(tok,"config=", 7) == 0) {
+ if(g_options->config != NULL) {
+ dbprintf(("%s: multiple config option\n",
+ debug_prefix(NULL)));
+ if(verbose) {
+ printf("ERROR [multiple config option]\n");
+ }
+ }
+ g_options->config = stralloc(tok+7);
+ if (strchr(g_options->config, '/')) {
+ amfree(g_options->config);
+ dbprintf(("%s: invalid character in config option\n",
+ debug_prefix(NULL)));
+ if(verbose) {
+ printf("ERROR [invalid character in config option]\n");
+ }
+ }
+ }
+ else {
+ dbprintf(("%s: unknown option \"%s\"\n",
+ debug_prefix(NULL), tok));
+ if(verbose) {
+ printf("ERROR [unknown option \"%s\"]\n", tok);
+ }
+ }
+ tok = strtok(NULL, ";");
+ }
+ if(g_options->features == NULL) {
+ g_options->features = am_set_default_feature_set();
+ }
+ if(g_options->maxdumps == 0) /* default */
+ g_options->maxdumps = 1;
+ amfree(p);
+ return g_options;
+}
+
+void
+free_g_options(
+ g_option_t * g_options)
+{
+ amfree(g_options->str);
+ am_release_feature_set(g_options->features);
+ amfree(g_options->hostname);
+ amfree(g_options->auth);
+ amfree(g_options->config);
+ amfree(g_options);
+}