home *** CD-ROM | disk | FTP | other *** search
/ Complete Linux / Complete Linux.iso / docs / apps / database / ingres04.lzh / source / iutil / checkadmin.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-01-23  |  2.2 KB  |  68 lines

  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. }
  68.