]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/parse_conf.c
- Convert more atoi to str_to_int64() for DB.
[bacula/bacula] / bacula / src / lib / parse_conf.c
index f8670f67b9b81107c5c68b8ce80a29d800bfb0cb..ae9fe194fafd32c83169c6585d62b72642ef9ec6 100755 (executable)
@@ -34,7 +34,7 @@
  */
 
 /*
-   Copyright (C) 2000-2004 Kern Sibbald and John Walker
+   Copyright (C) 2000-2005 Kern Sibbald
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -77,9 +77,8 @@ extern        CURES res_all;
 extern int res_all_size;
 #endif
 
+extern brwlock_t res_lock;           /* resource lock */
 
-static brwlock_t res_lock;           /* resource lock */
-static int res_locked = 0;           /* set when resource chains locked -- for debug */
 
 /* Forward referenced subroutines */
 static void scan_types(LEX *lc, MSGS *msg, int dest, char *where, char *cmd);
@@ -132,6 +131,24 @@ static struct s_mtypes msg_types[] = {
    {NULL,           0}
 };
 
+/* Used for certain KeyWord tables */
+struct s_kw {
+   const char *name;
+   int token;
+};
+
+/*
+ * Tape Label types permitted in Pool records 
+ *
+ *   tape label      label code = token
+ */
+struct s_kw tapelabels[] = {
+   {"bacula",        B_BACULA_LABEL},
+   {"ansi",          B_ANSI_LABEL},
+   {"ibm",           B_IBM_LABEL},
+   {NULL,           0}
+};
+
 
 /* Simply print a message */
 static void prtmsg(void *sock, const char *fmt, ...)
@@ -510,6 +527,32 @@ void store_alist_res(LEX *lc, RES_ITEM *item, int index, int pass)
 }
 
 
+/*
+ * Store a string in an alist.
+ */
+void store_alist_str(LEX *lc, RES_ITEM *item, int index, int pass)
+{
+   alist *list;
+
+   if (pass == 2) {
+      if (*(item->value) == NULL) {
+        list = New(alist(10, owned_by_alist));
+      } else {
+        list = (alist *)(*(item->value));    
+      }
+
+      lex_get_token(lc, T_STRING);   /* scan next item */
+      Dmsg4(900, "Append %s to alist %p size=%d %s\n", 
+        lc->str, list, list->size(), item->name);
+      list->append(bstrdup(lc->str));
+      *(item->value) = (char *)list;
+   }
+   scan_to_eol(lc);
+   set_bit(index, res_all.hdr.item_present);
+}
+
+
+
 /*
  * Store default values for Resource from xxxDefs
  * If we are in pass 2, do a lookup of the
@@ -658,80 +701,28 @@ void store_yesno(LEX *lc, RES_ITEM *item, int index, int pass)
    set_bit(index, res_all.hdr.item_present);
 }
 
-
-/* #define TRACE_RES */
-
-void b_LockRes(const char *file, int line)
-{
-   int errstat;
-#ifdef TRACE_RES
-   Pmsg4(000, "LockRes   %d,%d at %s:%d\n", res_locked, res_lock.w_active,
-        file, line);
-#endif
-   if ((errstat=rwl_writelock(&res_lock)) != 0) {
-      Emsg3(M_ABORT, 0, "rwl_writelock failure at %s:%d:  ERR=%s\n",
-          file, line, strerror(errstat));
-   }
-   res_locked++;
-}
-
-void b_UnlockRes(const char *file, int line)
-{
-   int errstat;
-   res_locked--;
-#ifdef TRACE_RES
-   Pmsg4(000, "UnLockRes %d,%d at %s:%d\n", res_locked, res_lock.w_active,
-        file, line);
-#endif
-   if ((errstat=rwl_writeunlock(&res_lock)) != 0) {
-      Emsg3(M_ABORT, 0, "rwl_writeunlock failure at %s:%d:. ERR=%s\n",
-          file, line, strerror(errstat));
-   }
-}
-
 /*
- * Return resource of type rcode that matches name
+ * Store Tape Label Type (Bacula, ANSI, IBM)
+ *
  */
-RES *
-GetResWithName(int rcode, char *name)
+void store_label(LEX *lc, RES_ITEM *item, int index, int pass)
 {
-   RES *res;
-   int rindex = rcode - r_first;
+   int token, i;
 
-   LockRes();
-   res = res_head[rindex];
-   while (res) {
-      if (strcmp(res->name, name) == 0) {
+   token = lex_get_token(lc, T_NAME);
+   /* Store the label pass 2 so that type is defined */
+   for (i=0; tapelabels[i].name; i++) {
+      if (strcasecmp(lc->str, tapelabels[i].name) == 0) {
+        *(int *)(item->value) = tapelabels[i].token;
+        i = 0;
         break;
       }
-      res = res->next;
-   }
-   UnlockRes();
-   return res;
-
-}
-
-/*
- * Return next resource of type rcode. On first
- * call second arg (res) is NULL, on subsequent
- * calls, it is called with previous value.
- */
-RES *
-GetNextRes(int rcode, RES *res)
-{
-   RES *nres;
-   int rindex = rcode - r_first;
-
-
-   if (!res_locked) {
-      Emsg0(M_ABORT, 0, "Resource chain not locked.\n");
    }
-   if (res == NULL) {
-      nres = res_head[rindex];
-   } else {
-      nres = res->next;
+   if (i != 0) {
+      scan_err1(lc, "Expected a Tape Label keyword, got: %s", lc->str);
    }
-   return nres;
+   scan_to_eol(lc);
+   set_bit(index, res_all.hdr.item_present);
 }