Просмотр исходного кода

libdpkg: Add support for format strings to internerr

Guillem Jover лет назад: 17
Родитель
Сommit
40a15bdb0c
3 измененных файлов с 26 добавлено и 4 удалено
  1. 7 0
      ChangeLog
  2. 6 2
      lib/dpkg.h
  3. 13 2
      lib/ehandle.c

+ 7 - 0
ChangeLog

@@ -1,3 +1,10 @@
+2008-12-08  Guillem Jover  <guillem@debian.org>
+
+	* lib/dpkg.h (do_internerr): Reorder arguments. Support format
+	strings.
+	(internerr): Likewise.
+	* lib/ehandle.c (do_internerr): Likewise.
+
 2008-12-08  Guillem Jover  <guillem@debian.org>
 
 	* scripts/Dpkg/ErrorHandling.pm (@EXPORT): Remove 'failure'.

+ 6 - 2
lib/dpkg.h

@@ -183,8 +183,12 @@ void push_checkpoint(int mask, int value);
 void pop_cleanup(int flagset);
 enum { ehflag_normaltidy=01, ehflag_bombout=02, ehflag_recursiveerror=04 };
 
-void do_internerr(const char *string, int line, const char *file) NONRETURNING;
-#define internerr(s) do_internerr(s,__LINE__,__FILE__)
+void do_internerr(const char *file, int line, const char *fmt, ...) NONRETURNING;
+#if HAVE_C99
+#define internerr(...) do_internerr(__FILE__, __LINE__, __VA_ARGS__)
+#else
+#define internerr(args...) do_internerr(__FILE__, __LINE__, args)
+#endif
 
 struct varbuf;
 void ohshit(const char *fmt, ...) NONRETURNING PRINTFFORMAT(1, 2);

+ 13 - 2
lib/ehandle.c

@@ -316,8 +316,19 @@ void werr(const char *fn) {
   ohshite(_("error writing `%s'"),fn);
 }
 
-void do_internerr(const char *string, int line, const char *file) {
-  fprintf(stderr,_("%s:%d: internal error `%s'\n"),file,line,string);
+void
+do_internerr(const char *file, int line, const char *fmt, ...)
+{
+  va_list al;
+  char buf[1024];
+
+  va_start(al, fmt);
+  vsnprintf(buf, sizeof(buf), fmt, al);
+  va_end(al);
+
+  fprintf(stderr, _("%s:%s:%d: internal error: %s\n"),
+          thisname, file, line, buf);
+
   abort();
 }