* Sebastian Hammer, Adam Dickmeiss
*
* $Log: retrieve.c,v $
- * Revision 1.2 1998-10-16 08:14:33 adam
+ * Revision 1.3 1998-10-28 10:54:40 adam
+ * SDRKit integration.
+ *
+ * Revision 1.2 1998/10/16 08:14:33 adam
* Updated record control system.
*
* Revision 1.1 1998/03/05 08:45:13 adam
#include <recctrl.h>
#include "zserver.h"
+#ifndef ZEBRASDR
+#define ZEBRASDR 0
+#endif
+
+#if ZEBRASDR
+#include "zebrasdr.h"
+#endif
+
struct fetch_control {
int record_offset;
int record_int_pos;
int l = fc->record_int_len - fc->record_int_pos;
if (l <= 0)
return 0;
- l = (l < count) ? l : count;
+ l = (l < (int) count) ? l : count;
memcpy (buf, fc->record_int_buf + fc->record_int_pos, l);
fc->record_int_pos += l;
return l;
fc.record_int_pos = 0;
logf (LOG_DEBUG, "Internal retrieve. %d bytes", fc.record_int_len);
}
- else
+#if ZEBRASDR
+ else if (*fname == '%')
+ {
+ ZebraSdrHandle h;
+ int segment = 0, r;
+ char *cp, xname[128];
+ unsigned char *buf;
+
+ logf (LOG_DEBUG, "SDR");
+ strcpy (xname, fname+1);
+ if ((cp = strrchr (xname, '.')))
+ {
+ *cp++ = 0;
+ segment = atoi(cp);
+ }
+ h = zebraSdr_open (xname);
+ if (!h)
+ {
+ logf (LOG_WARN, "sdr open %s", xname);
+ return 0;
+ }
+ if (zebraSdr_segment (h, &segment) < 0)
+ {
+ logf (LOG_WARN, "zebraSdr_segment fail segment=%d",
+ segment);
+ rec_rm (&rec);
+ return 14;
+ }
+ r = zebraSdr_read (h, &buf);
+ if (r < 1)
+ {
+ logf (LOG_WARN, "zebraSdr_read fail segment=%d",
+ segment);
+ rec_rm (&rec);
+ return 14;
+ }
+ zebraSdr_close (h);
+
+ fc.record_int_len = recordAttr->recordSize;
+ fc.record_int_buf = buf + recordAttr->recordOffset;
+ fc.record_int_pos = 0;
+
+ logf (LOG_LOG, "segment = %d len=%d off=%d",
+ segment,
+ recordAttr->recordSize,
+ recordAttr->recordOffset);
+ if (fc.record_int_len > 180)
+ {
+ logf (LOG_LOG, "%0.70s", fc.record_int_buf);
+ logf (LOG_LOG, "%0.70s", fc.record_int_buf +
+ (fc.record_int_len - 70));
+ }
+ else
+ logf (LOG_LOG, "%0.*s",
+ fc.record_int_len, fc.record_int_buf);
+
+ /* the following two lines makes rec_rm delete buf */
+ rec->size[recInfo_storeData] = r;
+ rec->info[recInfo_storeData] = buf;
+
+ retrieveCtrl.readf = record_int_read;
+ retrieveCtrl.seekf = record_int_seek;
+ retrieveCtrl.tellf = record_int_tell;
+ }
+#endif
+ else
{
if ((fc.fd = open (fname, O_BINARY|O_RDONLY)) == -1)
{