Started work on better record management system.
[idzebra-moved-to-github.git] / index / recindex.c
1 /*
2  * Copyright (C) 1994-1995, Index Data I/S 
3  * All rights reserved.
4  * Sebastian Hammer, Adam Dickmeiss
5  *
6  * $Log: recindex.c,v $
7  * Revision 1.1  1995-11-15 14:46:20  adam
8  * Started work on better record management system.
9  *
10  */
11 #include <stdio.h>
12 #include <assert.h>
13 #include <string.h>
14 #include <ctype.h>
15 #include <assert.h>
16 #include <fcntl.h>
17 #include <unistd.h>
18
19 #include "recindex.h"
20
21 #define REC_HEAD_MAGIC "rechead"
22
23 static void rec_write_head (Records p)
24 {
25     int r;
26
27     assert (p);
28     assert (p->fd != -1);
29     if (lseek (p->fd, (off_t) 0, SEEK_SET) == -1)
30     {
31         logf (LOG_FATAL|LOG_ERRNO, "lseek to 0 in %s", p->fname);
32         exit (1);
33     }
34     r = write (p->fd, &p->head, sizeof(p->head));    
35     switch (r)
36     {
37     case -1:
38         logf (LOG_FATAL|LOG_ERRNO, "write head of %s", p->fname);
39         exit (1);
40     case sizeof(p->head):
41         break;
42     default:
43         logf (LOG_FATAL, "write head of %s. wrote %d", p->fname, r);
44         exit (1);
45     }
46 }
47
48 Records rec_open (int rw)
49 {
50     Records p;
51     int r;
52
53     if (!(p = malloc (sizeof(*p))))
54     {
55         logf (LOG_FATAL|LOG_ERRNO, "malloc");
56         exit (1);
57     }
58     p->fname = "recindex";
59     p->fd = open (p->fname, rw ? (O_RDWR|O_CREAT) : O_RDONLY, 0666);
60     if (p->fd == -1)
61     {
62         logf (LOG_FATAL|LOG_ERRNO, "open %s", p->fname);
63         exit (1);
64     }
65     r = read (p->fd, &p->head, sizeof(p->head));
66     switch (r)
67     {
68     case -1:
69         logf (LOG_FATAL|LOG_ERRNO, "read %s", p->fname);
70         exit (1);
71     case 0:
72         p->head.no_records = 0;
73         p->head.freelist = 0;
74         if (rw)
75             rec_write_head (p);
76         break;
77     case sizeof(p->head):
78         if (memcmp (p->head.magic, REC_HEAD_MAGIC, sizeof(p->head.magic)))
79         {
80             logf (LOG_FATAL, "read %s. bad header", p->fname);
81             exit (1);
82         }
83         break;
84     default:
85         logf (LOG_FATAL, "read head of %s. expected %d. got %d",
86               p->fname, sizeof(p->head), r);
87         exit (1);
88     }
89     return p;
90 }
91
92 void rec_close (Records p)
93 {
94     if (p->fd != -1)
95         close (p->fd);
96     free (p);
97 }
98
99 Record rec_get (Records p, int sysno)
100 {
101     assert (p);
102     return NULL;
103 }
104
105 Record rec_new (Records p)
106 {
107     assert (p);
108     return NULL;
109 }
110
111 void rec_put (Records p, Record rec)
112 {
113     assert (p);
114 }