* Sebastian Hammer, Adam Dickmeiss
*
* $Log: retrieve.c,v $
- * Revision 1.14 2001-01-22 11:41:41 adam
+ * Revision 1.16 2002-04-04 20:50:37 adam
+ * Multi register works with record paths and data1 profile path
+ *
+ * Revision 1.15 2002/04/04 14:14:13 adam
+ * Multiple registers (alpha early)
+ *
+ * Revision 1.14 2001/01/22 11:41:41 adam
* Added support for raw retrieval (element set name "R").
*
* Revision 1.13 2000/03/20 19:08:36 adam
#include <unistd.h>
#endif
-#include <recctrl.h>
-#include "zserver.h"
-
-#ifndef ZEBRASDR
-#define ZEBRASDR 0
-#endif
-
-#if ZEBRASDR
-#include "zebrasdr.h"
-#endif
+#include "index.h"
+#include <direntz.h>
int zebra_record_ext_read (void *fh, char *buf, size_t count)
{
RecordAttr *recordAttr;
void *clientData;
- rec = rec_get (zh->service->records, sysno);
+ rec = rec_get (zh->reg->records, sysno);
if (!rec)
{
logf (LOG_DEBUG, "rec_get fail on sysno=%d", sysno);
*basenamep = 0;
return 14;
}
- recordAttr = rec_init_attr (zh->service->zei, rec);
+ recordAttr = rec_init_attr (zh->reg->zei, rec);
file_type = rec->info[recInfo_fileType];
fname = rec->info[recInfo_filename];
if (!strcmp (comp->u.simple->u.generic, "R"))
file_type = "text";
}
- if (!(rt = recType_byName (zh->service->recTypes,
+ if (!(rt = recType_byName (zh->reg->recTypes,
file_type, subType, &clientData)))
{
logf (LOG_WARN, "Retrieve: Cannot handle type %s", file_type);
}
else
{
- if ((fc.fd = open (fname, O_BINARY|O_RDONLY)) == -1)
+ char full_rep[1024];
+
+ if (zh->path_reg && !yaz_is_abspath (fname))
+ {
+ strcpy (full_rep, zh->path_reg);
+ strcat (full_rep, "/");
+ strcat (full_rep, fname);
+ }
+ else
+ strcpy (full_rep, fname);
+
+
+ if ((fc.fd = open (full_rep, O_BINARY|O_RDONLY)) == -1)
{
logf (LOG_WARN|LOG_ERRNO, "Retrieve fail; missing file: %s",
- fname);
+ full_rep);
rec_rm (&rec);
return 14;
}
retrieveCtrl.input_format = retrieveCtrl.output_format = input_format;
retrieveCtrl.comp = comp;
retrieveCtrl.diagnostic = 0;
- retrieveCtrl.dh = zh->service->dh;
- retrieveCtrl.res = zh->service->res;
+ retrieveCtrl.dh = zh->reg->dh;
+ retrieveCtrl.res = zh->res;
(*rt->retrieve)(clientData, &retrieveCtrl);
*output_format = retrieveCtrl.output_format;
*rec_bufp = (char *) retrieveCtrl.rec_buf;