]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/var.c
Fix reporting jobs from state file + misc
[bacula/bacula] / bacula / src / lib / var.c
index ae777fbea83ea765dd09208279bdc7f52919cdf2..1f1050e5b9f63f06a783ca6163dda312fbfc41a4 100644 (file)
@@ -18,7 +18,7 @@
  *  Adapted by Kern Sibbald to Bacula June 2003
  */
 /*
-   Copyright (C) 2000-2003 Kern Sibbald and John Walker
+   Copyright (C) 2000-2004 Kern Sibbald and John Walker
 
    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License as
@@ -37,7 +37,7 @@
 
  */
 
-
+#ifndef HAVE_WIN32
 #include "bacula.h"
 #if defined(HAVE_PCREPOSIX)
 #  include <pcreposix.h>
@@ -120,7 +120,7 @@ var_mvxprintf(
     int n;
     int bytes;
 
-    if (format == NULL || ap == NULL)
+    if (format == NULL)
        return -1;
     bytes = 0;
     while (*format != '\0') {
@@ -204,7 +204,7 @@ var_mvsnprintf(
     int n;
     var_mvsnprintf_cb_t ctx;
 
-    if (format == NULL || ap == NULL)
+    if (format == NULL)
        return -1;
     if (buffer != NULL && bufsize == 0)
        return -1;
@@ -451,7 +451,7 @@ expand_character_class(const char *desc, char_class_t chrclass)
 
 static int 
 expand_isoct(
-    char c)
+    int c)
 {
     if (c >= '0' && c <= '7')
        return 1;
@@ -463,7 +463,7 @@ static var_rc_t
 expand_octal(
     const char **src, char **dst, const char *end)
 {
-    unsigned char c;
+    int c;
 
     if (end - *src < 3)
        return VAR_ERR_INCOMPLETE_OCTAL;
@@ -491,7 +491,7 @@ expand_octal(
 
 static int 
 expand_ishex(
-    char c)
+    int c)
 {
     if ((c >= '0' && c <= '9') ||
         (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))
@@ -504,7 +504,7 @@ static var_rc_t
 expand_simple_hex(
     const char **src, char **dst, const char *end)
 {
-    unsigned char c = 0;
+    int c = 0;
 
     if (end - *src < 2)
        return VAR_ERR_INCOMPLETE_HEX;
@@ -514,9 +514,9 @@ expand_simple_hex(
 
     if (**src >= '0' && **src <= '9')
         c = **src - '0';
-    else if (c >= 'a' && c <= 'f')
+    else if (**src >= 'a' && **src <= 'f')
         c = **src - 'a' + 10;
-    else if (c >= 'A' && c <= 'F')
+    else if (**src >= 'A' && **src <= 'F')
         c = **src - 'A' + 10;
 
     c = c << 4;
@@ -529,7 +529,7 @@ expand_simple_hex(
     else if (**src >= 'A' && **src <= 'F')
         c += **src - 'A' + 10;
 
-    **dst = (char) c;
+    **dst = (char)c;
     (*dst)++;
     return VAR_OK;
 }
@@ -690,11 +690,12 @@ parse_opargtext_or_variable(
                goto error_return;
            }
        }
+       tokenbuf_free(&tmp);          /* KES 11/9/2003 */
     } while (rc > 0);
     tokenbuf_free(&tmp);
     return (p - begin);
 
-    error_return:
+error_return:
     tokenbuf_free(&tmp);
     tokenbuf_free(result);
     return rc;
@@ -734,18 +735,18 @@ parse_exptext_or_variable(
            goto error_return;
        if (rc > 0) {
            p += rc;
-           if (!tokenbuf_append
-               (result, tmp.begin, tmp.end - tmp.begin)) {
+           if (!tokenbuf_merge(result, &tmp)) {
                rc = VAR_ERR_OUT_OF_MEMORY;
                goto error_return;
            }
        }
+       tokenbuf_free(&tmp);          /* KES 11/9/2003 */
     } while (rc > 0);
 
     tokenbuf_free(&tmp);
     return (p - begin);
 
-    error_return:
+error_return:
     tokenbuf_free(&tmp);
     tokenbuf_free(result);
     return rc;
@@ -785,18 +786,18 @@ parse_substext_or_variable(
            goto error_return;
        if (rc > 0) {
            p += rc;
-           if (!tokenbuf_append
-               (result, tmp.begin, tmp.end - tmp.begin)) {
+           if (!tokenbuf_merge(result, &tmp)) {
                rc = VAR_ERR_OUT_OF_MEMORY;
                goto error_return;
            }
        }
+       tokenbuf_free(&tmp);          /* KES 11/9/2003 */
     } while (rc > 0);
 
     tokenbuf_free(&tmp);
     return (p - begin);
 
-    error_return:
+error_return:
     tokenbuf_free(&tmp);
     tokenbuf_free(result);
     return rc;
@@ -934,7 +935,7 @@ op_transpose(
     tokenbuf_free(&dstclass);
     return VAR_OK;
 
-    error_return:
+error_return:
     tokenbuf_free(search);
     tokenbuf_free(replace);
     tokenbuf_free(&srcclass);
@@ -1077,7 +1078,7 @@ op_search_and_replace(
                    return rc;
                }
                /* append replace string */
-               if (!tokenbuf_append(&tmp, myreplace.begin, myreplace.end - myreplace.begin)) {
+               if (!tokenbuf_merge(&tmp, &myreplace)) {
                    regfree(&preg);
                    tokenbuf_free(&tmp);
                    tokenbuf_free(&mydata);
@@ -1201,7 +1202,7 @@ op_padding(
        if (i > 0) {
            i = i / (fill->end - fill->begin);
            while (i > 0) {
-               if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
+               if (!tokenbuf_merge(&result, fill)) {
                    tokenbuf_free(&result);
                    return VAR_ERR_OUT_OF_MEMORY;
                }
@@ -1212,7 +1213,7 @@ op_padding(
                tokenbuf_free(&result);
                return VAR_ERR_OUT_OF_MEMORY;
            }
-           if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
+           if (!tokenbuf_merge(&result, data)) {
                tokenbuf_free(&result);
                return VAR_ERR_OUT_OF_MEMORY;
            }
@@ -1227,7 +1228,7 @@ op_padding(
            /* create the prefix */
            i = i / (fill->end - fill->begin);
            while (i > 0) {
-               if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
+               if (!tokenbuf_merge(&result, fill)) {
                    tokenbuf_free(&result);
                    return VAR_ERR_OUT_OF_MEMORY;
                }
@@ -1240,7 +1241,7 @@ op_padding(
                return VAR_ERR_OUT_OF_MEMORY;
            }
            /* append the actual data string */
-           if (!tokenbuf_append(&result, data->begin, data->end - data->begin)) {
+           if (!tokenbuf_merge(&result, data)) {
                tokenbuf_free(&result);
                return VAR_ERR_OUT_OF_MEMORY;
            }
@@ -1248,7 +1249,7 @@ op_padding(
            i = width - (result.end - result.begin);
            i = i / (fill->end - fill->begin);
            while (i > 0) {
-               if (!tokenbuf_append(&result, fill->begin, fill->end - fill->begin)) {
+               if (!tokenbuf_merge(&result, fill)) {
                    tokenbuf_free(&result);
                    return VAR_ERR_OUT_OF_MEMORY;
                }
@@ -1612,11 +1613,16 @@ parse_operation(
                                              arg_ptr, arg_len,
                                              val_ptr, val_len,
                                              &out_ptr, &out_len, &out_size);
-               if (rc < 0)
+               if (rc < 0) {
+                   if (arg_ptr != NULL)
+                       free((void *)arg_ptr);
                    goto error_return;
+               }
                tokenbuf_free(data);
                tokenbuf_set(data, out_ptr, out_ptr+out_len, out_size);
            }
+           if (arg_ptr != NULL)
+              free((void *)arg_ptr);
            break;
        }
        default:
@@ -1633,7 +1639,7 @@ parse_operation(
     return (p - begin);
 
     /* return with an error */
-    error_return:
+error_return:
     tokenbuf_free(data);
     tokenbuf_free(&tmptokbuf);
     tokenbuf_free(&search);
@@ -1695,10 +1701,10 @@ parse_numexp_operand(
                return rc;
            p += rc;
            *result = 0;
-       }
-       else if (rc < 0)
+           tokenbuf_free(&tmp);      /* KES 11/9/2003 */
+       } else if (rc < 0) {
            return rc;
-       else {
+       else {
            p += rc;
            /* parse remaining numerical expression */
            rc = parse_numexp(var, ctx, tmp.begin, tmp.end, result, failed);
@@ -1926,6 +1932,7 @@ parse_variable_complex(
            }
            p += rc;
        }
+       tokenbuf_free(&tmp);          /* KES 11/9/2003 */
     } while (rc > 0);
 
     /* we must have the complete expanded variable name now, 
@@ -1996,7 +2003,7 @@ parse_variable_complex(
     }
 
     /* parse optional post-operations */
-    goahead:
+goahead:
     if (p[-1] == ':') {
        tokenbuf_free(&tmp);
        tokenbuf_init(&tmp);
@@ -2029,9 +2036,9 @@ parse_variable_complex(
        if (ctx->force_expand) {
            rc = VAR_ERR_UNDEFINED_VARIABLE;
            goto error_return;
-       }
-       else
+       } else {
            tokenbuf_set(result, begin - 1, p, 0);
+       }
     }
 
     /* return successfully */
@@ -2040,7 +2047,7 @@ parse_variable_complex(
     return (p - begin);
 
     /* return with an error */
-    error_return:
+error_return:
     tokenbuf_free(&name);
     tokenbuf_free(&tmp);
     tokenbuf_free(result);
@@ -2598,21 +2605,13 @@ var_formatv(
     const char *fmt, va_list ap)
 {
     var_rc_t rc;
-    va_list apbak;
     char *cpBuf;
-    int nBuf;
+    int nBuf = 5000;
 
     /* argument sanity checks */
     if (var == NULL || dst_ptr == NULL || fmt == NULL)
        return VAR_RC(VAR_ERR_INVALID_ARGUMENT);
 
-    /* determine formatting buffer length */
-    apbak = ap;
-    nBuf = var_mvsnprintf(NULL, 0, fmt, ap);
-    ap = apbak;
-    if (nBuf == -1)
-       return VAR_RC(VAR_ERR_FORMATTING_FAILURE);
-
     /* perform formatting */
     if ((cpBuf = (char *)malloc(nBuf+1)) == NULL)
        return VAR_RC(VAR_ERR_OUT_OF_MEMORY);
@@ -2717,3 +2716,4 @@ char *var_strerror(var_t *var, var_rc_t rc)
     }
     return str;
 }
+#endif