1: # include   <ingres.h>
   2: # include   <version.h>
   3: # include   <access.h>
   4: # include   <sccs.h>
   5: 
   6: SCCSID(@(#)checkadmin.c	8.2	1/3/85)
   7: 
   8: /*
   9: **  CHECKADMIN -- check admin file version, etc.
  10: **
  11: **	The checks for database version code and whatnot are
  12: **	factored out into this routine.  When this routine returns,
  13: **	the admin file should be legible to this program.
  14: **	If the admin file is not legible, it will syserr.
  15: **
  16: **	Parameters:
  17: **		fd -- open file descriptor for admin file.  Only
  18: **			read access is required.
  19: **
  20: **	Returns:
  21: **		nothing if ok.
  22: **		not at all (or via syserr) if not ok.
  23: **
  24: **	Side Effects:
  25: **		The Admin.adhdr struct will be filled in.
  26: */
  27: 
  28: checkadmin(fd)
  29: register int    fd;
  30: {
  31:     register int    i;
  32:     register int    k;
  33: 
  34:     i = ((char *) &Admin.adhdr.adversion) - ((char *) &Admin.adhdr);
  35:     if (read(fd, (char *) &Admin.adhdr, i) != i)
  36:         syserr("readadmin: admin read err 1");
  37:     if (!bitset(A_NEWFMT, Admin.adhdr.adflags))
  38:         syserr("readadmin: cannot use old databases");
  39: 
  40:     /* read in remainder of admin header */
  41:     i = sizeof Admin.adhdr;
  42:     if (Admin.adhdr.adlength < i)
  43:         i = Admin.adhdr.adlength;
  44:     i -= ((char *) &Admin.adhdr.adversion) - ((char *) &Admin.adhdr);
  45:     if (i <= 0)
  46:         syserr("readadmin: adlen=%d, hdrsz=%d, ct=%d", Admin.adhdr.adlength, sizeof Admin.adhdr, i);
  47:     if ((k = read(fd, (char *) &Admin.adhdr.adversion, i)) != i)
  48:         syserr("readadmin: admin read err 2, i=%d k=%d", i, k);
  49: 
  50:     /* check versions here */
  51:     if (Admin.adhdr.adversion != DBVERCODE)
  52:         syserr("cannot handle code %d databases (current code is %d)",
  53:             Admin.adhdr.adversion, DBVERCODE);
  54:     if (Admin.adhdr.adreldsz != sizeof Admin.adreld)
  55:         syserr("checkadmin: descriptor size mismatch, dec=%d, actual=%d\n Run ingconv on this database.",
  56:             Admin.adhdr.adreldsz, sizeof Admin.adreld);
  57: 
  58:     /* get to beginning of descriptors */
  59:     if (lseek(fd, (long) Admin.adhdr.adlength, 0) < 0)
  60:         syserr("checkadmin: seek");
  61: 
  62:     /* read the descriptors */
  63:     if (read(fd, (char *) &Admin.adreld, Admin.adhdr.adreldsz) != Admin.adhdr.adreldsz)
  64:         syserr("checkadmin: reld read sz=%d", Admin.adhdr.adreldsz);
  65:     if (read(fd, (char *) &Admin.adattd, Admin.adhdr.adattdsz) != Admin.adhdr.adattdsz)
  66:         syserr("checkadmin: attd read sz=%d", Admin.adhdr.adattdsz);
  67: }

Defined functions

Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 732
Valid CSS Valid XHTML 1.0 Strict