]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/lib/smartall.c
- Fix seg fault if user labels a drive directory bug #513
[bacula/bacula] / bacula / src / lib / smartall.c
index 0d75ffebef443734c8479e706f54f53fb7428b3a..138522d20baf98beb5b1fc751fe29701e4e78ff8 100644 (file)
 
                  http://www.fourmilab.ch/smartall/
 
-  
+
         Version $Id$
 
 */
 
 /*
-   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
-   published by the Free Software Foundation; either version 2 of
-   the License, or (at your option) any later version.
+   modify it under the terms of the GNU General Public License
+   version 2 as amended with additional clauses defined in the
+   file LICENSE in the main source directory.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-   General Public License for more details.
-
-   You should have received a copy of the GNU General Public
-   License along with this program; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-   MA 02111-1307, USA.
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
+   the file LICENSE for additional details.
 
  */
 
@@ -46,7 +41,7 @@
 #undef free
 
 /* We normally turn off debugging here.
- *  If you want it, simply #ifdef all the 
+ *  If you want it, simply #ifdef all the
  *  following off.
  */
 #undef Dmsg1
@@ -57,7 +52,7 @@
 #define Dmsg2(l,f,a1,a2)
 #define Dmsg3(l,f,a1,a2,a3)
 #define Dmsg4(l,f,a1,a2,a3,a4)
-      
+
 
 uint64_t sm_max_bytes = 0;
 uint64_t sm_bytes = 0;
@@ -83,7 +78,7 @@ struct abufhead {
    struct b_queue abq;        /* Links on allocated queue */
    unsigned ablen;            /* Buffer length in bytes */
    const char *abfname;        /* File name pointer */
-   sm_ushort ablineno;        /* Line number of allocation */ 
+   sm_ushort ablineno;        /* Line number of allocation */
 };
 
 static struct b_queue abqueue = {    /* Allocated buffer queue */
@@ -123,7 +118,7 @@ static void *smalloc(const char *fname, int lineno, unsigned int nbytes)
       head->abfname = bufimode ? NULL : fname;
       head->ablineno = (sm_ushort) lineno;
       /* Emplace end-clobber detector at end of buffer */
-      buf[nbytes - 1] = (((long) buf) & 0xFF) ^ 0xC5;
+      buf[nbytes - 1] = (uint8_t)((((long) buf) & 0xFF) ^ 0xC5);
       buf += HEAD_SIZE;  /* Increment to user data start */
       if (++sm_buffers > sm_max_buffers) {
         sm_max_buffers = sm_buffers;
@@ -162,7 +157,7 @@ void sm_free(const char *file, int line, void *fp)
    struct b_queue *qp;
 
    if (cp == NULL) {
-      Emsg2(M_ABORT, 0, "Attempt to free NULL called from %s:%d\n", file, line);
+      Emsg2(M_ABORT, 0, _("Attempt to free NULL called from %s:%d\n"), file, line);
    }
 
    cp -= HEAD_SIZE;
@@ -170,19 +165,19 @@ void sm_free(const char *file, int line, void *fp)
    struct abufhead *head = (struct abufhead *)cp;
 
    P(mutex);
-   Dmsg4(1150, "sm_free %d at %x from %s:%d\n", 
-        head->ablen, fp, 
+   Dmsg4(1150, "sm_free %d at %x from %s:%d\n",
+        head->ablen, fp,
         head->abfname, head->ablineno);
 
    /* The following assertions will catch virtually every release
       of an address which isn't an allocated buffer. */
    if (qp->qnext->qprev != qp) {
       V(mutex);
-      Emsg2(M_ABORT, 0, "qp->qnext->qprev != qp called from %s:%d\n", file, line);
+      Emsg2(M_ABORT, 0, _("qp->qnext->qprev != qp called from %s:%d\n"), file, line);
    }
    if (qp->qprev->qnext != qp) {
       V(mutex);
-      Emsg2(M_ABORT, 0, "qp->qprev->qnext != qp called from %s:%d\n", file, line);
+      Emsg2(M_ABORT, 0, _("qp->qprev->qnext != qp called from %s:%d\n"), file, line);
    }
 
    /* The following assertion detects storing off the  end  of the
@@ -191,7 +186,7 @@ void sm_free(const char *file, int line, void *fp)
 
    if (((unsigned char *)cp)[head->ablen - 1] != ((((long) cp) & 0xFF) ^ 0xC5)) {
       V(mutex);
-      Emsg2(M_ABORT, 0, "Buffer overrun called from %s:%d\n", file, line);
+      Emsg2(M_ABORT, 0, _("Buffer overrun called from %s:%d\n"), file, line);
    }
    sm_buffers--;
    sm_bytes -= head->ablen;
@@ -262,7 +257,7 @@ void *sm_realloc(const char *fname, int lineno, void *ptr, unsigned int size)
 
    Dmsg4(400, "sm_realloc %s:%d 0x%x %d\n", fname, lineno, ptr, size);
    if (size <= 0) {
-      e_msg(fname, lineno, M_ABORT, 0, "sm_realloc size: %d\n", size);
+      e_msg(fname, lineno, M_ABORT, 0, _("sm_realloc size: %d\n"), size);
    }
 
    /*  If  the old  block  pointer  is  NULL, treat realloc() as a
@@ -303,7 +298,7 @@ void *sm_realloc(const char *fname, int lineno, void *ptr, unsigned int size)
 
       sm_free(__FILE__, __LINE__, ptr);
    }
-   Dmsg4(150, "sm_realloc %d at %x from %s:%d\n", size, buf, fname, lineno);
+   Dmsg4(150, _("sm_realloc %d at %x from %s:%d\n"), size, buf, fname, lineno);
    return buf;
 }
 
@@ -362,14 +357,12 @@ void sm_dump(bool bufdump)
    while (ap != (struct abufhead *) &abqueue) {
 
       if ((ap == NULL) ||
-         (ap->abq.qnext->qprev != (struct b_queue *) ap) || 
+         (ap->abq.qnext->qprev != (struct b_queue *) ap) ||
          (ap->abq.qprev->qnext != (struct b_queue *) ap)) {
-        fprintf(stderr,
-            "\nOrphaned buffers exist.  Dump terminated following\n");
-        fprintf(stderr,
-            "  discovery of bad links in chain of orphaned buffers.\n");
-        fprintf(stderr,
-            "  Buffer address with bad links: %lx\n", (long) ap);
+        fprintf(stderr, _(
+            "\nOrphaned buffers exist.  Dump terminated following\n"
+            "  discovery of bad links in chain of orphaned buffers.\n"
+            "  Buffer address with bad links: %lx\n"), (long) ap);
         break;
       }
 
@@ -378,7 +371,7 @@ void sm_dump(bool bufdump)
         char errmsg[500];
 
         bsnprintf(errmsg, sizeof(errmsg),
-           "Orphaned buffer:  %6u bytes allocated at line %d of %s %s\n",
+           _("Orphaned buffer:  %6u bytes allocated at line %d of %s %s\n"),
            memsize, ap->ablineno, my_name, ap->abfname
         );
          fprintf(stderr, "%s", errmsg);
@@ -414,7 +407,7 @@ void sm_dump(bool bufdump)
 void sm_check(const char *fname, int lineno, bool bufdump)
 {
        if (!sm_check_rtn(fname, lineno, bufdump)) {
-           Emsg2(M_ABORT, 0, "Damaged buffer found. Called from %s:%d\n",
+           Emsg2(M_ABORT, 0, _("Damaged buffer found. Called from %s:%d\n"),
              fname, lineno);
        }
 }
@@ -434,7 +427,7 @@ int sm_check_rtn(const char *fname, int lineno, bool bufdump)
          (ap->abq.qnext->qprev != (struct b_queue *) ap)) {
         bad = 0x1;
       }
-      if (ap->abq.qprev->qnext != (struct b_queue *) ap) { 
+      if (ap->abq.qprev->qnext != (struct b_queue *) ap) {
         bad |= 0x2;
       }
       if (((unsigned char *) ap)[((struct abufhead *) ap)->ablen - 1] !=
@@ -444,26 +437,26 @@ int sm_check_rtn(const char *fname, int lineno, bool bufdump)
       badbuf |= bad;
       if (bad) {
         fprintf(stderr,
-            "\nDamaged buffers found at %s:%d\n", fname, lineno);
+            _("\nDamaged buffers found at %s:%d\n"), fname, lineno);
 
         if (bad & 0x1) {
-            fprintf(stderr, "  discovery of bad prev link.\n");
+            fprintf(stderr, _("  discovery of bad prev link.\n"));
         }
         if (bad & 0x2) {
-            fprintf(stderr, "  discovery of bad next link.\n");
+            fprintf(stderr, _("  discovery of bad next link.\n"));
         }
         if (bad & 0x4) {
-            fprintf(stderr, "  discovery of data overrun.\n");
+            fprintf(stderr, _("  discovery of data overrun.\n"));
         }
 
-         fprintf(stderr, "  Buffer address: %lx\n", (long) ap);
+         fprintf(stderr, _("  Buffer address: %lx\n"), (long) ap);
 
         if (ap->abfname != NULL) {
            unsigned memsize = ap->ablen - (HEAD_SIZE + 1);
            char errmsg[80];
 
            fprintf(stderr,
-              "Damaged buffer:  %6u bytes allocated at line %d of %s %s\n",
+              _("Damaged buffer:  %6u bytes allocated at line %d of %s %s\n"),
               memsize, ap->ablineno, my_name, ap->abfname
            );
            if (bufdump) {
@@ -511,7 +504,7 @@ void sm_static(int mode)
    bufimode = (bool) (mode != 0);
 }
 
-/* 
+/*
  * Here we overload C++'s global new and delete operators
  *  so that the memory is allocated through smartalloc.
  */