]> err.no Git - dpkg/commitdiff
include/dpkg.h.in: remove defines for cat and dpkg-safelist since they are no longer...
authorWichert Akkerman <wakkerma@debian.org>
Mon, 4 Dec 2000 00:39:50 +0000 (00:39 +0000)
committerWichert Akkerman <wakkerma@debian.org>
Mon, 4 Dec 2000 00:39:50 +0000 (00:39 +0000)
lib/mlib.c: split up do_fd_copy
lib/varbuf.c: add varbufvprintf
lib/parse.c: use memset to initialize fieldencountered
main/filesdb.c: use new read_fd_into_buf

ChangeLog
include/dpkg.h.in
lib/mlib.c
lib/parse.c
lib/varbuf.c
main/filesdb.c
po/dpkg.pot

index b8e798a5992529a0031836b2f7278727130cdf90..003f055d4ada7bd9e6363572cdcb72416bcd7f1f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Mon Dec  4 01:34:57 CET 2000 Wichert Akkerman <wakkerma@debian.org>
+
+  * Merge more of Adams handywork to bring dpkg up to speed (literally :)
+    + include/dpkg.h.in: remove defines for cat and dpkg-safelist since they
+      are no longer used
+    + lib/mlib.c: split up do_fd_copy
+    + lib/varbuf.c: add varbufvprintf
+    + lib/parse.c: use memset to initialize fieldencountered
+    + main/filesdb.c: use new read_fd_into_buf
+
 Sun Dec  3 22:11:22 CET 2000 Wichert Akkerman <wakkerma@debian.org>
 
   * dpkg-deb/extract.c: apply one of Adams do_fd_copy patches
@@ -7,7 +17,7 @@ Thu Nov 30 02:45:42 CET 2000 Wichert Akkerman <wakkerma@debian.org>
   * scripts/dpkg-statoverride.{pl,8}: 
     + add new --import option to import settings from /etc/suid.conf
     + fix ENOENT issues
-    + use %owner consistently isntead of %owner and %user
+    + use %owner consistently instead of %owner and %user
 
 Wed Nov 29 17:56:43 CET 2000 Wichert Akkerman <wakkerma@debian.org>
 
index eca92c1d604df3c077c164032564f485bccc7179..bb01a5dfe4245a8224e5f13d3280b4316c91f903 100644 (file)
 #define DSELECT      "dselect"
 #define DPKG         "dpkg"
 
-#define SAFEFILELIST "dpkg-safefilelist"
 #define TAR          "tar"
 #define GZIP         "gzip"
-#define CAT          "cat"
 #define RM           "rm"
 #define FIND         "find"
 #define SHELL        "sh"
@@ -199,7 +197,8 @@ void m_pipe(int fds[2]);
 void checksubprocerr(int status, const char *description, int sigpipeok);
 void waitsubproc(pid_t pid, const char *description, int sigpipeok);
 
-int do_fd_copy(int fd1, int fd2, int limit, char *desc);
+int do_fd_copy(int fd1, int fd2, int limit, char *desc, ...);
+int read_fd_into_buf(int fd, char *buf, int limit, char *desc, ...);
 
 extern volatile int onerr_abort;
 
index 1a70dd5a310cc244b63ec6c5cc984290eaf16ccc..cf29513717c9edf818f4194123ef505ab0b37cbc 100644 (file)
@@ -30,6 +30,7 @@
 
 #include <config.h>
 #include <dpkg.h>
+#include <dpkg-db.h>
 
 /* Incremented when we do some kind of generally necessary operation, so that
  * loops &c know to quit if we take an error exit.  Decremented again afterwards.
@@ -123,54 +124,82 @@ void waitsubproc(pid_t pid, const char *description, int sigpipeok) {
   checksubprocerr(status,description,sigpipeok);
 }
 
-int do_fd_copy(int fd1, int fd2, int limit, char *desc) {
-    char *buf, *sbuf;
-    int count, bufsize = 32768;
-    char *er_msg_1 = _("failed to allocate buffer for copy (%s)");
-    char *er_msg_2 = _("failed in copy on write (%s)");
-    char *er_msg_3 = _("failed in copy on read (%s)");
-
-    count = strlen(er_msg_1) + strlen(desc) + 1;
-    sbuf = malloc(count);
-    if(sbuf == NULL)
-       ohshite(_("failed to allocate buffer for snprintf 1"));
-    snprintf(sbuf, count, er_msg_1, desc);
-    sbuf[count-1] = 0;
-
-    if((limit != -1) && (limit < bufsize))
-       bufsize = limit;
-    buf = malloc(bufsize);
-    if(buf == NULL)
-       ohshite(sbuf);
-    free(sbuf);
-
-    while((count = read(fd1, buf, bufsize)) > 0) {
-       if(write(fd2, buf, count) < count) {
-         count = strlen(er_msg_2) + strlen(desc) + 1;
-         sbuf = malloc(count);
-         if(sbuf == NULL)
-           ohshite(_("failed in copy on write"));
-         snprintf(sbuf, count, er_msg_2, desc);
-         sbuf[count-1] = 0;
-         ohshite(sbuf);
-       }
-       if(limit != -1) {
-           limit -= count;
-           if(limit < bufsize)
-               bufsize = limit;
-       }
-    }
-    free(sbuf);
+typedef void (*do_fd_write_t)(char *, int, char *, void *data);
+typedef struct do_fd_copy_data {
+  int fd;
+} do_fd_copy_data_t;
+typedef struct do_fd_buf_data {
+  char *buf;
+} do_fd_buf_data_t;
+
+int do_fd_write_fd(char* buf, int length, void *proc_data, char *desc) {
+  do_fd_copy_data_t *data = (do_fd_copy_data_t *)proc_data;
+  if(write(data->fd, buf, length) < length)
+    ohshite(_("failed in do_fd_write_fd (%s)"), dsc);
+}
+
+int do_fd_copy(int fd1, int fd2, int limit, char *desc, ...) {
+  do_fd_copy_data_t data = { fd2 };
+  va_list al;
+  struct varbuf v;
+
+  varbufinit(&v);
+
+  va_start(al,desc);
+  varbufvprintf(&v, desc, al);
+  va_end(al);
+
+  do_fd_read(fd1, limit, do_fd_write_fd, &data, v.buf);
+  varbuffree(&v);
+}
+
+int do_fd_write_buf(char *buf, int length, void *proc_data, char *desc) {
+  do_fd_buf_data_t *data = (do_fd_buf_data_t *)proc_data;
+  memcpy(data->buf, buf, length);
+  data->buf += length;
+}
+
+int read_fd_into_buf(int fd, char *buf, int limit, char *desc, ...) {
+  do_fd_buf_data_t data = { buf };
+  va_list al;
+  struct varbuf v;
+
+  varbufinit(&v);
+
+  va_start(al,desc);
+  varbufvprintf(&v, desc, al);
+  va_end(al);
+
+  do_fd_read(fd, limit, do_fd_write_buf, &data, v.buf);
+  varbuffree(&v);
+}
+
+int do_fd_read(int fd1, int limit, do_fd_write_t write_proc, void *proc_data, char *desc) {
+  char *buf;
+  int count, bufsize= 32768, bytesread= 0;
+
+  if((limit != -1) && (limit < bufsize)) bufsize= limit;
+  buf= malloc(bufsize);
+  if(buf== NULL) ohshite(_("failed to allocate buffer in do_fd_read (%s)"), desc);
+
+  while(1) {
+    count= read(fd1, buf, bufsize);
     if (count<0) {
-      count = strlen(er_msg_3) + strlen(desc) + 1;
-      sbuf = malloc(count);
-      if(sbuf == NULL)
-       ohshite(_("failed in copy on read"));
-      snprintf(sbuf, count, er_msg_3, desc);
-      sbuf[count-1] = 0;
-      ohshite(sbuf);
+      if (errno==EINTR) continue;
+      break;
     }
+    if (count==0)
+      break;
+
+    bytesread+= count;
+    write_proc(buf, count, proc_data, desc);
+    if(limit!=-1) {
+      limit-= count;
+      if(limit<bufsize)
+       bufsize=limit;
+    }
+  }
+  if (count<0) ohshite(_("failed in do_fd_read on read (%s)"), desc);
 
-    free(sbuf);
-    free(buf);
+  free(buf);
 }
index 14b9337bbc442b30a961764ad339f87a739429c6..8d163e6091659b60014128fff83749a7d7611ea1 100644 (file)
@@ -102,8 +102,7 @@ int parsedb(const char *filename, enum parsedbflags flags,
   lno= 1;
   pdone= 0;
   for (;;) { /* loop per package */
-    i= sizeof(fieldencountered)/sizeof(int); ip= fieldencountered;
-    while (i--) *ip++= 0;
+    memset(fieldencountered, 0, sizeof(fieldencountered));
     blankpackage(&newpig);
     blankpackageperfile(newpifp);
     for (;;) {
index a8d6c87a666324edd00a9dad9c1e86e31567cdca..dabdbd00c446537bff2faaa04bfff33a82b6368b 100644 (file)
@@ -49,6 +49,22 @@ void varbufprintf(struct varbuf *v, const char *fmt, ...) {
   } while (r >= v->size-ou-1);
 }
 
+void varbufvprintf(struct varbuf *v, char *fmt, va_list va) {
+  int ou, r;
+  va_list al;
+
+  ou= v->used;
+  v->used+= strlen(fmt);
+
+  do {
+    varbufextend(v);
+    al= va;
+    r= vsnprintf(v->buf+ou,v->size-ou,fmt,al);
+    if (r < 0) r= (v->size-ou+1) * 2;
+    v->used= ou+r;
+  } while (r >= v->size-ou-1);
+}
+
 void varbufaddstr(struct varbuf *v, const char *s) {
   int l, ou;
   l= strlen(s);
index 80e8174df524cdc55b8ca70af2885ed4849a4c0b..e479eb8a8f5514c72b9bc7d2611c2ebc4c9ce782 100644 (file)
@@ -71,7 +71,7 @@ void ensure_packagefiles_available(struct pkginfo *pkg) {
   int search, findlast, putat;
   struct stat stat_buf;
   char *loaded_list, *loaded_list_end, *thisline, *nextline, *ptr;
-  ssize_t bytes, readden;
+  ssize_t bytes;
 
   if (pkg->clientdata && pkg->clientdata->fileslistvalid) return;
   ensure_package_clientdata(pkg);
@@ -146,20 +146,9 @@ void ensure_packagefiles_available(struct pkginfo *pkg) {
      ohshite("unable to stat files list file for package `%.250s'",pkg->name);
    loaded_list = nfmalloc(stat_buf.st_size);
    loaded_list_end = loaded_list + stat_buf.st_size;
-   /* stdio is an extra copy, hence we use read() */
-   readden = 0;                        /* write->written, read->readden */
-   while (readden < stat_buf.st_size) {
-     bytes = read(fileno(file),
-                loaded_list + readden, stat_buf.st_size - readden);
-     if (bytes < 0) {
-       if (errno == EINTR) continue;
-       ohshite("unable to read files list for package `%.250s'",pkg->name);
-     }
-     if (!bytes)
-       ohshit("unexpected end of file in files list for package `%.250s'",pkg->name);
-     readden += bytes;
-   }
-  
+
+  read_fd_into_buf(fileno(file), loaded_list, stat_buf.st_size, _("files list for package `%.250s'"), pkg->name);
+
   lendp= &pkg->clientdata->files;
   thisline = loaded_list;
   while (thisline < loaded_list_end) {
@@ -325,7 +314,7 @@ void ensure_statoverrides(void) {
   struct stat stab1, stab2;
   FILE *file;
   char *loaded_list, *loaded_list_end, *thisline, *nextline, *ptr;
-  ssize_t bytes, readden;
+  ssize_t bytes;
   struct filestatoverride *fso;
   struct filenamenode *fnn;
 
@@ -356,18 +345,8 @@ void ensure_statoverrides(void) {
 
   loaded_list = nfmalloc(stab2.st_size);
   loaded_list_end = loaded_list + stab2.st_size;
-  readden=0;
-  while (readden<stab2.st_size) {
-    bytes = read(fileno(file),
-       loaded_list + readden, stab2.st_size - readden);
-    if (bytes < 0) {
-      if (errno == EINTR) continue;
-      ohshite("unable to read statoverride file `%.250s'",vb.buf);
-    }
-    if (!bytes)
-      ohshit("unexpected end of file in statoverride file `%.250s'",vb.buf);
-    readden += bytes;
-  }
+
+  read_fd_into_buf(fileno(file), loaded_list, stab2.st_size, _("statoverride file `%.250s'"), vb.buf);
 
   thisline = loaded_list;
   while (thisline<loaded_list_end) {
index a6951d69cad3f5da805b345b0d75254edc17eab7..d84a64226ad0b4ce5db7e9d75555701dd904eb48 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-11-05 17:51+0100\n"
+"POT-Creation-Date: 2000-12-04 01:13+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -155,41 +155,41 @@ msgstr ""
 msgid "unable to install updated status of `%.250s'"
 msgstr ""
 
-#: lib/dump.c:249
+#: lib/dump.c:250
 #, c-format
 msgid "failed to open `%s' for writing %s information"
 msgstr ""
 
-#: lib/dump.c:252 lib/parse.c:97
+#: lib/dump.c:253 lib/parse.c:97
 msgid "unable to set buffering on status file"
 msgstr ""
 
-#: lib/dump.c:263
+#: lib/dump.c:264
 #, c-format
 msgid "failed to write %s record about `%.50s' to `%.250s'"
 msgstr ""
 
-#: lib/dump.c:270
+#: lib/dump.c:271
 #, c-format
 msgid "failed to flush %s information to `%.250s'"
 msgstr ""
 
-#: lib/dump.c:272
+#: lib/dump.c:273
 #, c-format
 msgid "failed to fsync %s information to `%.250s'"
 msgstr ""
 
-#: lib/dump.c:274
+#: lib/dump.c:275
 #, c-format
 msgid "failed to close `%.250s' after writing %s information"
 msgstr ""
 
-#: lib/dump.c:278
+#: lib/dump.c:279
 #, c-format
 msgid "failed to link `%.250s' to `%.250s' for backup of %s info"
 msgstr ""
 
-#: lib/dump.c:281
+#: lib/dump.c:282
 #, c-format
 msgid "failed to install `%.250s' as `%.250s' containing %s info"
 msgstr ""
@@ -399,84 +399,76 @@ msgstr ""
 msgid "unable to lock dpkg status database"
 msgstr ""
 
-#: lib/mlib.c:47
+#: lib/mlib.c:48
 #, c-format
 msgid "malloc failed (%ld bytes)"
 msgstr ""
 
-#: lib/mlib.c:60
+#: lib/mlib.c:61
 #, c-format
 msgid "realloc failed (%ld bytes)"
 msgstr ""
 
-#: lib/mlib.c:67
+#: lib/mlib.c:68
 #, c-format
 msgid "%s (subprocess): %s\n"
 msgstr ""
 
-#: lib/mlib.c:80
+#: lib/mlib.c:81
 msgid "fork failed"
 msgstr ""
 
-#: lib/mlib.c:93
+#: lib/mlib.c:94
 #, c-format
 msgid "failed to dup for std%s"
 msgstr ""
 
-#: lib/mlib.c:94
+#: lib/mlib.c:95
 #, c-format
 msgid "failed to dup for fd %d"
 msgstr ""
 
-#: lib/mlib.c:100
+#: lib/mlib.c:101
 msgid "failed to create pipe"
 msgstr ""
 
-#: lib/mlib.c:107
+#: lib/mlib.c:108
 #, c-format
 msgid "subprocess %s returned error exit status %d"
 msgstr ""
 
-#: lib/mlib.c:110
+#: lib/mlib.c:111
 #, c-format
 msgid "subprocess %s killed by signal (%s)%s"
 msgstr ""
 
-#: lib/mlib.c:113
+#: lib/mlib.c:114
 #, c-format
 msgid "subprocess %s failed with wait status code %d"
 msgstr ""
 
-#: lib/mlib.c:122 main/help.c:364
+#: lib/mlib.c:123 main/help.c:367
 #, c-format
 msgid "wait for %s failed"
 msgstr ""
 
-#: lib/mlib.c:129
+#: lib/mlib.c:137
 #, c-format
-msgid "failed to allocate buffer for copy (%s)"
+msgid "failed in do_fd_write_fd (%s)"
 msgstr ""
 
-#: lib/mlib.c:130
-#, c-format
-msgid "failed in copy on write (%s)"
+#: lib/mlib.c:142
+msgid "failed in do_fd_write_fd"
 msgstr ""
 
-#: lib/mlib.c:131
+#: lib/mlib.c:195
 #, c-format
-msgid "failed in copy on read (%s)"
-msgstr ""
-
-#: lib/mlib.c:136
-msgid "failed to allocate buffer for snprintf 1"
-msgstr ""
-
-#: lib/mlib.c:148 lib/mlib.c:160
-msgid "failed to allocate buffer for snprintf 2"
+msgid "failed to allocate buffer in do_fd_read (%s)"
 msgstr ""
 
-#: lib/mlib.c:165
-msgid "failed in copy on read (control)"
+#: lib/mlib.c:215
+#, c-format
+msgid "failed in do_fd_read on read (%s)"
 msgstr ""
 
 #: lib/myopt.c:38
@@ -484,57 +476,57 @@ msgstr ""
 msgid "failed to open configuration file `%.255s' for reading"
 msgstr ""
 
-#: lib/myopt.c:67
+#: lib/myopt.c:70
 #, c-format
 msgid "configuration error: unknown option %s"
 msgstr ""
 
-#: lib/myopt.c:70
+#: lib/myopt.c:73
 #, c-format
 msgid "configuration error: %s needs a value"
 msgstr ""
 
-#: lib/myopt.c:74
+#: lib/myopt.c:77
 #, c-format
 msgid "configuration error: %s does not take a value"
 msgstr ""
 
-#: lib/myopt.c:79
+#: lib/myopt.c:82
 #, c-format
 msgid "read error in configuration file `%.255s'"
 msgstr ""
 
-#: lib/myopt.c:80
+#: lib/myopt.c:83
 #, c-format
 msgid "error closing configuration file `%.255s'"
 msgstr ""
 
-#: lib/myopt.c:103
+#: lib/myopt.c:106
 #, c-format
 msgid "unknown option --%s"
 msgstr ""
 
-#: lib/myopt.c:107
+#: lib/myopt.c:110
 #, c-format
 msgid "--%s option takes a value"
 msgstr ""
 
-#: lib/myopt.c:112
+#: lib/myopt.c:115
 #, c-format
 msgid "--%s option does not take a value"
 msgstr ""
 
-#: lib/myopt.c:119
+#: lib/myopt.c:122
 #, c-format
 msgid "unknown option -%c"
 msgstr ""
 
-#: lib/myopt.c:124
+#: lib/myopt.c:127
 #, c-format
 msgid "-%c option takes a value"
 msgstr ""
 
-#: lib/myopt.c:132
+#: lib/myopt.c:135
 #, c-format
 msgid "-%c option does not take a value"
 msgstr ""
@@ -544,79 +536,79 @@ msgstr ""
 msgid "failed to open package info file `%.255s' for reading"
 msgstr ""
 
-#: lib/parse.c:124
+#: lib/parse.c:123
 #, c-format
 msgid "EOF after field name `%.50s'"
 msgstr ""
 
-#: lib/parse.c:127
+#: lib/parse.c:126
 #, c-format
 msgid "newline in field name `%.50s'"
 msgstr ""
 
-#: lib/parse.c:130
+#: lib/parse.c:129
 #, c-format
 msgid "MSDOS EOF (^Z) in field name `%.50s'"
 msgstr ""
 
-#: lib/parse.c:133
+#: lib/parse.c:132
 #, c-format
 msgid "field name `%.50s' must be followed by colon"
 msgstr ""
 
-#: lib/parse.c:141
+#: lib/parse.c:140
 #, c-format
 msgid "EOF before value of field `%.50s' (missing final newline)"
 msgstr ""
 
-#: lib/parse.c:145
+#: lib/parse.c:144
 #, c-format
 msgid "MSDOS EOF char in value of field `%.50s' (missing newline?)"
 msgstr ""
 
-#: lib/parse.c:156
+#: lib/parse.c:155
 #, c-format
 msgid "EOF during value of field `%.50s' (missing final newline)"
 msgstr ""
 
-#: lib/parse.c:173
+#: lib/parse.c:172
 #, c-format
 msgid "duplicate value for `%s' field"
 msgstr ""
 
-#: lib/parse.c:178
+#: lib/parse.c:177
 #, c-format
 msgid "user-defined field name `%s' too short"
 msgstr ""
 
-#: lib/parse.c:183
+#: lib/parse.c:182
 #, c-format
 msgid "duplicate value for user-defined field `%.50s'"
 msgstr ""
 
-#: lib/parse.c:196
+#: lib/parse.c:195
 msgid "several package info entries found, only one allowed"
 msgstr ""
 
-#: lib/parse.c:224
+#: lib/parse.c:223
 msgid "Configured-Version for package with inappropriate Status"
 msgstr ""
 
-#: lib/parse.c:238
+#: lib/parse.c:237
 msgid "Package which in state not-installed has conffiles, forgetting them"
 msgstr ""
 
-#: lib/parse.c:286
+#: lib/parse.c:285
 #, c-format
 msgid "failed to read from `%.255s'"
 msgstr ""
 
-#: lib/parse.c:288
+#: lib/parse.c:287
 #, c-format
 msgid "failed to close after read: `%.255s'"
 msgstr ""
 
-#: lib/parse.c:289
+#: lib/parse.c:288
 #, c-format
 msgid "no package information in `%.255s'"
 msgstr ""
@@ -695,7 +687,7 @@ msgstr ""
 msgid "cannot open GPL file "
 msgstr ""
 
-#: lib/varbuf.c:77
+#: lib/varbuf.c:93
 msgid "failed to realloc for variable buffer"
 msgstr ""
 
@@ -1733,134 +1725,144 @@ msgid ""
 "assuming package has no files currently installed.\n"
 msgstr ""
 
-#: main/filesdb.c:174
+#: main/filesdb.c:150
+#, c-format
+msgid "files list for package `%.250s'"
+msgstr ""
+
+#: main/filesdb.c:163
 #, c-format
 msgid "files list file for package `%.250s' contains empty filename"
 msgstr ""
 
-#: main/filesdb.c:185
+#: main/filesdb.c:174
 #, c-format
 msgid "error closing files list file for package `%.250s'"
 msgstr ""
 
-#: main/filesdb.c:187
+#: main/filesdb.c:176
 #, c-format
 msgid "files list file for package `%.250s' is truncated"
 msgstr ""
 
-#: main/filesdb.c:218
+#: main/filesdb.c:207
 msgid "(Reading database ... "
 msgstr ""
 
-#: main/filesdb.c:218
+#: main/filesdb.c:207
 msgid "(Scanning database ... "
 msgstr ""
 
-#: main/filesdb.c:226
+#: main/filesdb.c:215
 #, c-format
 msgid "%d files and directories currently installed.)\n"
 msgstr ""
 
-#: main/filesdb.c:257
+#: main/filesdb.c:246
 #, c-format
 msgid "unable to create updated files list file for package %s"
 msgstr ""
 
-#: main/filesdb.c:267
+#: main/filesdb.c:256
 #, c-format
 msgid "failed to write to updated files list file for package %s"
 msgstr ""
 
-#: main/filesdb.c:269
+#: main/filesdb.c:258
 #, c-format
 msgid "failed to flush updated files list file for package %s"
 msgstr ""
 
-#: main/filesdb.c:271
+#: main/filesdb.c:260
 #, c-format
 msgid "failed to sync updated files list file for package %s"
 msgstr ""
 
-#: main/filesdb.c:274
+#: main/filesdb.c:263
 #, c-format
 msgid "failed to close updated files list file for package %s"
 msgstr ""
 
-#: main/filesdb.c:276
+#: main/filesdb.c:265
 #, c-format
 msgid "failed to install updated files list file for package %s"
 msgstr ""
 
-#: main/filesdb.c:341
+#: main/filesdb.c:330
 msgid "failed to open statoverride file"
 msgstr ""
 
-#: main/filesdb.c:345
+#: main/filesdb.c:334
 msgid "failed to fstat statoverride file"
 msgstr ""
 
-#: main/filesdb.c:348
+#: main/filesdb.c:337
 msgid "failed to fstat previous statoverride file"
 msgstr ""
 
-#: main/filesdb.c:383
+#: main/filesdb.c:349
+#, c-format
+msgid "statoverride file `%.250s'"
+msgstr ""
+
+#: main/filesdb.c:362
 msgid "statoverride file contains empty line"
 msgstr ""
 
-#: main/filesdb.c:468
+#: main/filesdb.c:447
 msgid "failed to open diversions file"
 msgstr ""
 
-#: main/filesdb.c:472
+#: main/filesdb.c:451
 msgid "failed to fstat previous diversions file"
 msgstr ""
 
-#: main/filesdb.c:474
+#: main/filesdb.c:453
 msgid "failed to fstat diversions file"
 msgstr ""
 
-#: main/filesdb.c:496
+#: main/filesdb.c:475
 msgid "fgets gave an empty string from diversions [i]"
 msgstr ""
 
-#: main/filesdb.c:497
+#: main/filesdb.c:476
 msgid "diversions file has too-long line or EOF [i]"
 msgstr ""
 
-#: main/filesdb.c:503
+#: main/filesdb.c:482
 msgid "read error in diversions [ii]"
 msgstr ""
 
-#: main/filesdb.c:504
+#: main/filesdb.c:483
 msgid "unexpected EOF in diversions [ii]"
 msgstr ""
 
-#: main/filesdb.c:507
+#: main/filesdb.c:486
 msgid "fgets gave an empty string from diversions [ii]"
 msgstr ""
 
-#: main/filesdb.c:508 main/filesdb.c:519
+#: main/filesdb.c:487 main/filesdb.c:498
 msgid "diversions file has too-long line or EOF [ii]"
 msgstr ""
 
-#: main/filesdb.c:514
+#: main/filesdb.c:493
 msgid "read error in diversions [iii]"
 msgstr ""
 
-#: main/filesdb.c:515
+#: main/filesdb.c:494
 msgid "unexpected EOF in diversions [iii]"
 msgstr ""
 
-#: main/filesdb.c:518
+#: main/filesdb.c:497
 msgid "fgets gave an empty string from diversions [iii]"
 msgstr ""
 
-#: main/filesdb.c:526
+#: main/filesdb.c:505
 #, c-format
 msgid "conflicting diversions involving `%.250s' or `%.250s'"
 msgstr ""
 
-#: main/filesdb.c:535
+#: main/filesdb.c:514
 msgid "read error in diversions [i]"
 msgstr ""
 
@@ -1888,116 +1890,116 @@ msgstr ""
 msgid "not installed but configs remain"
 msgstr ""
 
-#: main/help.c:84
+#: main/help.c:87
 msgid "dpkg - warning: PATH is not set.\n"
 msgstr ""
 
-#: main/help.c:99
+#: main/help.c:102
 #, c-format
 msgid "dpkg: `%s' not found on PATH.\n"
 msgstr ""
 
-#: main/help.c:106
+#: main/help.c:109
 #, c-format
 msgid ""
 "%d expected program(s) not found on PATH.\n"
 "NB: root's PATH should usually contain /usr/local/sbin, /usr/sbin and /sbin."
 msgstr ""
 
-#: main/help.c:176
+#: main/help.c:179
 #, c-format
 msgid "failed to chroot to `%.250s'"
 msgstr ""
 
-#: main/help.c:223
+#: main/help.c:226
 #, c-format
 msgid "error un-catching signal %s: %s\n"
 msgstr ""
 
-#: main/help.c:241
+#: main/help.c:244
 #, c-format
 msgid "unable to ignore signal %s before running script"
 msgstr ""
 
-#: main/help.c:250
+#: main/help.c:253
 #, c-format
 msgid "unable to set execute permissions on `%.250s'"
 msgstr ""
 
-#: main/help.c:274
+#: main/help.c:277
 #, c-format
 msgid "unable to stat installed %s script `%.250s'"
 msgstr ""
 
-#: main/help.c:281 main/help.c:360 main/help.c:400
+#: main/help.c:284 main/help.c:363 main/help.c:403
 #, c-format
 msgid "unable to execute %s"
 msgstr ""
 
-#: main/help.c:311
+#: main/help.c:314
 #, c-format
 msgid "unable to stat new %s script `%.250s'"
 msgstr ""
 
-#: main/help.c:318
+#: main/help.c:321
 #, c-format
 msgid "unable to execute new %s"
 msgstr ""
 
-#: main/help.c:344
+#: main/help.c:347
 #, c-format
 msgid "old %s script"
 msgstr ""
 
-#: main/help.c:352
+#: main/help.c:355
 #, c-format
 msgid "dpkg: warning - unable to stat %s `%.250s': %s\n"
 msgstr ""
 
-#: main/help.c:368
+#: main/help.c:371
 #, c-format
 msgid "dpkg: warning - %s returned error exit status %d\n"
 msgstr ""
 
-#: main/help.c:371
+#: main/help.c:374
 #, c-format
 msgid "dpkg: warning - %s killed by signal (%s)%s\n"
 msgstr ""
 
-#: main/help.c:374
+#: main/help.c:377
 #, c-format
 msgid "%s failed with unknown wait status code %d"
 msgstr ""
 
-#: main/help.c:378
+#: main/help.c:381
 msgid "dpkg - trying script from the new package instead ...\n"
 msgstr ""
 
-#: main/help.c:385
+#: main/help.c:388
 #, c-format
 msgid "new %s script"
 msgstr ""
 
-#: main/help.c:389
+#: main/help.c:392
 msgid "there is no script in the new version of the package - giving up"
 msgstr ""
 
-#: main/help.c:391
+#: main/help.c:394
 #, c-format
 msgid "unable to stat %s `%.250s'"
 msgstr ""
 
-#: main/help.c:405
+#: main/help.c:408
 msgid "dpkg: ... it looks like that went OK.\n"
 msgstr ""
 
 #. Huh ?
-#: main/help.c:500
+#: main/help.c:503
 #, c-format
 msgid "failed to rmdir/unlink `%.255s'"
 msgstr ""
 
-#: dpkg-deb/info.c:52 main/help.c:504
+#: dpkg-deb/info.c:52 main/help.c:507
 msgid "failed to exec rm for cleanup"
 msgstr ""
 
@@ -2839,8 +2841,8 @@ msgstr ""
 msgid "failed to rewind tmpfile (data)"
 msgstr ""
 
-#: dpkg-deb/build.c:461
-msgid "failed to exec cat (data)"
+#: dpkg-deb/build.c:459
+msgid "cat (data)"
 msgstr ""
 
 #: dpkg-deb/extract.c:48
@@ -2993,59 +2995,51 @@ msgid "failed to syscall lseek to files archive portion"
 msgstr ""
 
 #: dpkg-deb/extract.c:248
-msgid "failed to fdopen p1 in copy"
-msgstr ""
-
-#: dpkg-deb/extract.c:250
-msgid "member data"
-msgstr ""
-
-#: dpkg-deb/extract.c:251
 msgid "failed to write to pipe in copy"
 msgstr ""
 
-#: dpkg-deb/extract.c:254
+#: dpkg-deb/extract.c:249
 msgid "failed to close pipe in copy"
 msgstr ""
 
-#: dpkg-deb/extract.c:267
+#: dpkg-deb/extract.c:262
 msgid "failed to exec gzip -dc"
 msgstr ""
 
-#: dpkg-deb/extract.c:275
+#: dpkg-deb/extract.c:270
 msgid "failed to create directory"
 msgstr ""
 
-#: dpkg-deb/extract.c:276
+#: dpkg-deb/extract.c:271
 msgid "failed to chdir to directory after creating it"
 msgstr ""
 
-#: dpkg-deb/extract.c:278
+#: dpkg-deb/extract.c:273
 msgid "failed to chdir to directory"
 msgstr ""
 
-#: dpkg-deb/extract.c:292
+#: dpkg-deb/extract.c:287
 msgid "failed to exec tar"
 msgstr ""
 
-#: dpkg-deb/extract.c:315 dpkg-deb/extract.c:330 dpkg-deb/info.c:66
+#: dpkg-deb/extract.c:310 dpkg-deb/extract.c:325 dpkg-deb/info.c:66
 #, c-format
 msgid "--%s needs a .deb filename argument"
 msgstr ""
 
-#: dpkg-deb/extract.c:318
+#: dpkg-deb/extract.c:313
 #, c-format
 msgid ""
 "--%s needs a target directory.\n"
 "Perhaps you should be using dpkg --install ?"
 msgstr ""
 
-#: dpkg-deb/extract.c:321
+#: dpkg-deb/extract.c:316
 #, c-format
 msgid "--%s takes at most two arguments (.deb and directory)"
 msgstr ""
 
-#: dpkg-deb/extract.c:332
+#: dpkg-deb/extract.c:327
 #, c-format
 msgid "--%s takes only one argument (.deb filename)"
 msgstr ""