home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / DOOG / CBASE09.ZIP / CBASE.ZIP / CBOPS.C < prev    next >
Text File  |  1989-08-31  |  2KB  |  99 lines

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /* #ident    "cbops.c    1.1 - 89/08/31" */
  5.  
  6. #include <blkio.h>
  7. #include <bool.h>
  8. #include <errno.h>
  9. #include "cbase_.h"
  10.  
  11. /*man---------------------------------------------------------------------------
  12. NAME
  13.      cb_fdlvalid - cbase field definition list valid
  14.  
  15. SYNOPSIS
  16.      #include "cbase_.h"
  17.  
  18.      bool cb_fdlvalid(fields, fldcnt, recsize)
  19.      cbfield_t fields[];
  20.      size_t    fldcnt;
  21.      size_t    recsize;
  22.  
  23. DESCRIPTION
  24.      The cb_fdlvalid function determines if fields points to a valid field
  25.      definition list for a record of size recsize.  If it is valid, TRUE is
  26.      returned.  If not, then FALSE is returned.
  27.  
  28. ------------------------------------------------------------------------------*/
  29. bool cb_fdlvalid(fields, fldcnt, recsize)
  30. cbfield_t fields[];
  31. size_t    fldcnt;
  32. size_t    recsize;
  33. {
  34.     int    rs    = 0;
  35.     int    i    = 0;
  36.  
  37.     /* validate arguments */
  38.     if ((fields == NULL) || (recsize < sizeof(bpos_t))
  39.                 || (fldcnt < 1) || (fldcnt > CBFIELD_MAX)) {
  40.         return FALSE;
  41.     }
  42.  
  43.     /* check for field overlap */
  44.     for (i = 0; i < fldcnt; i++) {
  45.         if (fields[i].size < 1) {
  46.             return FALSE;
  47.         }
  48.         if ((fields[i].type < 1) || (fields[i].type > CBTYPECNT)) {
  49.             return FALSE;
  50.         }
  51.         if (fields[i].flags & CBFKEY) {
  52.             if (fields[i].filename[0] == '\0') {
  53.                 return FALSE;
  54.             }
  55.         }
  56.         if (i < (fldcnt - 1)) {
  57.             if ((fields[i].offset + fields[i].size) >
  58.                             fields[i + 1].offset) {
  59.                 return FALSE;
  60.             }
  61.         } else {
  62.             if ((fields[i].offset + fields[i].size) > recsize) {
  63.                 return FALSE;
  64.             }
  65.         }
  66.     }
  67.  
  68.     return TRUE;
  69. }
  70.  
  71. /*man---------------------------------------------------------------------------
  72. NAME
  73.      cb_valid - cbase pointer valid
  74.  
  75. SYNOPSIS
  76.      #include "cbase_.h"
  77.  
  78.      bool cb_valid(cbp)
  79.      cbase_t *cbp;
  80.  
  81. DESCRIPTION
  82.      The cb_valid function determines if cbp points to a valid cbase
  83.      control structure.  If it is valid, TRUE is returned.  If not,
  84.      then FALSE is returned.
  85.  
  86. ------------------------------------------------------------------------------*/
  87. bool cb_valid(cbp)
  88. cbase_t *cbp;
  89. {
  90.     if ((cbp < cbb) || (cbp > (cbb + CBOPEN_MAX - 1))) {
  91.         return FALSE;
  92.     }
  93.     if (((size_t)((char *)cbp - (char *)cbb)) % sizeof(cbb[0]) != 0) {
  94.         return FALSE;
  95.     }
  96.  
  97.     return TRUE;
  98. }
  99.