1 /*
2 * Copyright (C) 1999-2004 Etymon Systems, Inc.
3 *
4 * Authors: Nassib Nassar
5 */
6
7 #include <stdio.h>
8 #include "info.h"
9 #include "util.h"
10 #include "err.h"
11 #include "defs.h"
12
13 /* assumes we are positioned at the beginning of the info file */
afdbver(FILE * f)14 int afdbver(FILE *f)
15 {
16 int n;
17 Afdbver_t v;
18
19 if ((n = fread(&v, 1, sizeof v, f)) != sizeof v)
20 return aferr(AFEBADDB);
21 return (v == ETYMON_INDEX_MAGIC) ? (int) v : aferr(AFEVERSION);
22 }
23
afreadinfo(FILE * f,Dbinfo * info)24 int afreadinfo(FILE *f, Dbinfo *info)
25 {
26 int n;
27
28 if (afdbver(f) < 0)
29 return -1;
30 n = fread(info, 1, sizeof (Dbinfo), f);
31 return (n == sizeof (Dbinfo)) ? 0 : aferr(AFEBADDB);
32 }
33
afwriteinfo(FILE * f,Dbinfo * info)34 int afwriteinfo(FILE *f, Dbinfo *info)
35 {
36 Uint4 magic;
37
38 if (fseeko(f, 0, SEEK_SET) < 0)
39 return aferr(AFEDBIO);
40 magic = ETYMON_INDEX_MAGIC;
41 if (fwrite(&magic, 1, sizeof magic, f) < sizeof magic)
42 return aferr(AFEDBIO);
43 if (fwrite(info, 1, sizeof (ETYMON_DB_INFO), f) < sizeof (ETYMON_DB_INFO))
44 return aferr(AFEDBIO);
45
46 return 0;
47 }
48