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