]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/contrib/error.cc
re-add 0.3.13, forgot to check it in originally
[apt.git] / apt-pkg / contrib / error.cc
index 42e01e9fe34e526df41b6167174bd6a411f03c18..e8b71fa7d6bde9dd1e76811425bfea141ba49e2d 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: error.cc,v 1.4 1998/09/12 02:46:26 jgg Exp $
+// $Id: error.cc,v 1.8 1999/08/08 07:24:54 jgg Exp $
 /* ######################################################################
    
    Global Erorr Class - Global error mechanism
@@ -26,6 +26,7 @@
 #include <stdarg.h>
 #include <unistd.h>
 
+#include "config.h"
                                                                        /*}}}*/
 
 // Global Error Object                                                 /*{{{*/
@@ -33,7 +34,7 @@
    is compiled to be thread safe otherwise a non-safe version is used. A
    Per-Thread error object is maintained in much the same manner as libc
    manages errno */
-#if _POSIX_THREADS == 1
+#if _POSIX_THREADS == 1 && defined(HAVE_PTHREAD)
  #include <pthread.h>
 
  static pthread_key_t ErrorKey;
@@ -80,8 +81,9 @@ bool GlobalError::Errno(const char *Function,const char *Description,...)
 
    // sprintf the description
    char S[400];
-   vsprintf(S,Description,args);
-   sprintf(S + strlen(S)," - %s (%i %s)",Function,errno,strerror(errno));
+   vsnprintf(S,sizeof(S),Description,args);
+   snprintf(S + strlen(S),sizeof(S) - strlen(S),
+           " - %s (%i %s)",Function,errno,strerror(errno));
 
    // Put it on the list
    Item *Itm = new Item;
@@ -91,6 +93,32 @@ bool GlobalError::Errno(const char *Function,const char *Description,...)
    
    PendingFlag = true;
 
+   return false;   
+}
+                                                                       /*}}}*/
+// GlobalError::WarningE - Get part of the warn string from errno      /*{{{*/
+// ---------------------------------------------------------------------
+/* Function indicates the stdlib function that failed and Description is
+   a user string that leads the text. Form is:
+     Description - Function (errno: strerror)
+   Carefull of the buffer overrun, sprintf.
+ */
+bool GlobalError::WarningE(const char *Function,const char *Description,...)
+{
+   va_list args;
+   va_start(args,Description);
+
+   // sprintf the description
+   char S[400];
+   vsnprintf(S,sizeof(S),Description,args);
+   snprintf(S + strlen(S),sizeof(S) - strlen(S)," - %s (%i %s)",Function,errno,strerror(errno));
+
+   // Put it on the list
+   Item *Itm = new Item;
+   Itm->Text = S;
+   Itm->Error = false;
+   Insert(Itm);
+   
    return false;   
 }
                                                                        /*}}}*/
@@ -104,7 +132,7 @@ bool GlobalError::Error(const char *Description,...)
 
    // sprintf the description
    char S[400];
-   vsprintf(S,Description,args);
+   vsnprintf(S,sizeof(S),Description,args);
 
    // Put it on the list
    Item *Itm = new Item;
@@ -127,7 +155,7 @@ bool GlobalError::Warning(const char *Description,...)
 
    // sprintf the description
    char S[400];
-   vsprintf(S,Description,args);
+   vsnprintf(S,sizeof(S),Description,args);
 
    // Put it on the list
    Item *Itm = new Item;