* Sebastian Hammer, Adam Dickmeiss
*
* $Log: rstemp.c,v $
- * Revision 1.12 1995-09-28 09:52:11 adam
+ * Revision 1.17 1995-12-11 09:15:28 adam
+ * New set types: sand/sor/snot - ranked versions of and/or/not in
+ * ranked/semi-ranked result sets.
+ * Note: the snot not finished yet.
+ * New rset member: flag.
+ * Bug fix: r_delete in rsrel.c did free bad memory block.
+ *
+ * Revision 1.16 1995/11/28 14:47:02 adam
+ * New setting: tempSetPath. Location of temporary result sets.
+ *
+ * Revision 1.15 1995/10/12 12:41:58 adam
+ * Private info (buf) moved from struct rset_control to struct rset.
+ * Bug fixes in relevance.
+ *
+ * Revision 1.14 1995/10/10 14:00:04 adam
+ * Function rset_open changed its wflag parameter to general flags.
+ *
+ * Revision 1.13 1995/10/06 14:38:06 adam
+ * New result set method: r_score.
+ * Local no (sysno) and score is transferred to retrieveCtrl.
+ *
+ * Revision 1.12 1995/09/28 09:52:11 adam
* xfree/xmalloc used everywhere.
*
* Revision 1.11 1995/09/18 14:17:56 adam
#include <alexutil.h>
#include <rstemp.h>
-static rset_control *r_create(const struct rset_control *sel, void *parms);
-static RSFD r_open (rset_control *ct, int wflag);
+static void *r_create(const struct rset_control *sel, void *parms,
+ int *flags);
+static RSFD r_open (RSET ct, int flag);
static void r_close (RSFD rfd);
-static void r_delete (rset_control *ct);
+static void r_delete (RSET ct);
static void r_rewind (RSFD rfd);
-static int r_count (rset_control *ct);
+static int r_count (RSET ct);
static int r_read (RSFD rfd, void *buf);
static int r_write (RSFD rfd, const void *buf);
+static int r_score (RSFD rfd, int *score);
+
+static int temppath_init = 0;
+static char *temppath_root = NULL;
static const rset_control control =
{
- "Temporary set",
- 0,
+ "temp",
r_create,
r_open,
r_close,
r_rewind,
r_count,
r_read,
- r_write
+ r_write,
+ r_score
};
const rset_control *rset_kind_temp = &control;
struct rset_temp_rfd *next;
};
-static struct rset_control *r_create(const struct rset_control *sel,
- void *parms)
+static void *r_create(const struct rset_control *sel, void *parms, int *flags)
{
- rset_control *newct;
rset_temp_parms *temp_parms = parms;
struct rset_temp_info *info;
-
- newct = xmalloc(sizeof(*newct));
- memcpy(newct, sel, sizeof(*sel));
- newct->buf = xmalloc (sizeof(struct rset_temp_info));
- info = newct->buf;
-
+
+ info = xmalloc (sizeof(struct rset_temp_info));
info->fd = -1;
info->fname = NULL;
info->key_size = temp_parms->key_size;
info->pos_buf = 0;
info->dirty = 0;
- return newct;
+ if (!temppath_init)
+ {
+ temppath_init = 1;
+ temppath_root = res_get (common_resource, "tempSetPath");
+ }
+ return info;
}
-static RSFD r_open (struct rset_control *ct, int wflag)
+static RSFD r_open (RSET ct, int flag)
{
struct rset_temp_info *info = ct->buf;
struct rset_temp_rfd *rfd;
assert (info->fd == -1);
if (info->fname)
{
- if (wflag)
+ if (flag & RSETF_WRITE)
info->fd = open (info->fname, O_RDWR|O_CREAT, 0666);
else
info->fd = open (info->fname, O_RDONLY);
if (!info->fname && mk)
{
- char *s = (char*) tempnam (NULL, "zrs");
+ char *s = (char*) tempnam (temppath_root, "zrs");
info->fname = xmalloc (strlen(s)+1);
strcpy (info->fname, s);
}
}
-static void r_delete (struct rset_control *ct)
+static void r_delete (RSET ct)
{
struct rset_temp_info *info = ct->buf;
r_reread (rfd);
}
-static int r_count (struct rset_control *ct)
+static int r_count (RSET ct)
{
struct rset_temp_info *info = ct->buf;
return 1;
}
+static int r_score (RSFD rfd, int *score)
+{
+ *score = -1;
+ return -1;
+}