|
|
1.1 root 1: # include <ingres.h>
2: # include <access.h>
3: # include <aux.h>
4: # include <lock.h>
5: # include <sccs.h>
6:
7: SCCSID(@(#)readadmin.c 8.2 1/18/85)
8:
9: /*
10: ** READADMIN -- read admin file into 'Admin' cache
11: **
12: ** The admin file in the current directory is opened and read
13: ** into the 'Admin' cache. The admin file contains the following
14: ** information:
15: **
16: ** A header block, containing the owner of the database (that is,
17: ** the DBA), and a set of status bits for the database as a whole.
18: ** These bits are defined in aux.h. This header also includes a
19: ** field that defines the length of the header part & a version
20: ** stamp.
21: **
22: ** Descriptors for the relation and attribute relations. These
23: ** descriptors should be completely correct except for the
24: ** relfp and relopn fields. These are required so that the
25: ** process of opening a relation is not recursive.
26: **
27: ** After the admin file is read in, the relation and attribute
28: ** files are opened, and the relfp and relopn fields in both
29: ** descriptors are correctly initialized. Both catalogs are
30: ** opened read/write.
31: **
32: ** WARNING:
33: ** This routine is redefined by creatdb. If this
34: ** routine is changed, check that program also!!
35: **
36: ** Parameters:
37: ** none
38: **
39: ** Returns:
40: ** none
41: **
42: ** Side Effects:
43: ** The 'Admin' struct is filled in from the 'admin' file
44: ** in the current directory.
45: ** The 'relation....xx' and 'attribute...xx' files are
46: ** opened.
47: **
48: ** Files:
49: ** ./admin
50: ** The bootstrap description of the database,
51: ** described above.
52: **
53: ** Trace Flags:
54: ** none
55: */
56:
57: readadmin()
58: {
59: register int i;
60: char relname[MAXNAME + 4];
61: extern long lseek();
62:
63: /* read the stuff from the admin file */
64: i = open("admin", O_RDONLY);
65: if (i < 0)
66: syserr("readadmin: open admin %d", i);
67: checkadmin(i);
68: close(i);
69:
70: /* open the physical files for 'relation' and 'attribute' */
71: ingresname(Admin.adreld.reldum.relid, Admin.adreld.reldum.relowner, relname);
72: if ((Admin.adreld.relfp = open(relname, O_RDWR)) < 0)
73: syserr("readadmin: open rel %d", Admin.adreld.relfp);
74: ingresname(Admin.adattd.reldum.relid, Admin.adattd.reldum.relowner, relname);
75: if ((Admin.adattd.relfp = open(relname, O_RDWR)) < 0)
76: syserr("readadmin: open att %d", Admin.adattd.relfp);
77: Admin.adreld.relopn = (Admin.adreld.relfp + 1) * -5;
78: /* we just want to read here create, modify and destroy fix it up */
79: Admin.adattd.relopn = (Admin.adattd.relfp + 1) * 5;
80:
81: return;
82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.