X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=index%2Fextract.c;h=8464bb48ca44ef34942a064a35a5a6fc8f1a67c6;hb=f2add93344de52071a9462922152de43bbdb7315;hp=0d9afd5b171a701ef5dcd008e85607bd81a78bf5;hpb=eb4e33573a00795f2b1c0dfebb51ab59ffd5a0d9;p=idzebra-moved-to-github.git diff --git a/index/extract.c b/index/extract.c index 0d9afd5..8464bb4 100644 --- a/index/extract.c +++ b/index/extract.c @@ -4,7 +4,13 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: extract.c,v $ - * Revision 1.13 1995-09-29 14:01:39 adam + * Revision 1.15 1995-10-02 15:42:53 adam + * Extract uses file descriptors instead of FILE pointers. + * + * Revision 1.14 1995/10/02 15:29:13 adam + * More logging in file_extract. + * + * Revision 1.13 1995/09/29 14:01:39 adam * Bug fixes. * * Revision 1.12 1995/09/28 14:22:56 adam @@ -204,19 +210,22 @@ static void wordAdd (const RecWord *p) kused += sizeof(key); } +static int file_read (int fd, char *buf, size_t count) +{ + return read (fd, buf, count); +} + void file_extract (int cmd, const char *fname, const char *kname) { - int i; + int i, r; char ext[128]; SYSNO sysno; char ext_res[128]; const char *file_type; void *file_info; - FILE *inf; struct recExtractCtrl extractCtrl; RecType rt; - logf (LOG_DEBUG, "%c %s k=%s", cmd, fname, kname); for (i = strlen(fname); --i >= 0; ) if (fname[i] == '/') { @@ -233,6 +242,7 @@ void file_extract (int cmd, const char *fname, const char *kname) return; if (!(rt = recType_byName (file_type))) return; + logf (LOG_DEBUG, "%c %s k=%s", cmd, fname, kname); file_info = dict_lookup (file_idx, kname); if (!file_info) { @@ -245,17 +255,19 @@ void file_extract (int cmd, const char *fname, const char *kname) else memcpy (&sysno, (char*) file_info+1, sizeof(sysno)); - if (!(inf = fopen (fname, "r"))) + if ((extractCtrl.fd = open (fname, O_RDONLY)) == -1) { logf (LOG_WARN|LOG_ERRNO, "open %s", fname); return; } - extractCtrl.inf = inf; extractCtrl.subType = ""; extractCtrl.init = wordInit; extractCtrl.add = wordAdd; + extractCtrl.readf = file_read; key_sysno = sysno; key_cmd = cmd; - (*rt->extract)(&extractCtrl); - fclose (inf); + r = (*rt->extract)(&extractCtrl); + close (extractCtrl.fd); + if (r) + logf (LOG_WARN, "Couldn't extract file %s, code %d", fname, r); }