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

  1. /*    Copyright (c) 1989 Citadel    */
  2. /*       All Rights Reserved        */
  3.  
  4. /* #ident    "lsgetrf.c    1.1 - 89/07/03" */
  5.  
  6. #include <blkio.h>
  7. #include <errno.h>
  8. /* #include <string.h> */
  9. #include "lseq_.h"
  10.  
  11. /*man---------------------------------------------------------------------------
  12. NAME
  13.      lsgetrf - get field from current lseq record
  14.  
  15. SYNOPSIS
  16.      #include <lseq.h>
  17.  
  18.      int lsgetrf(lsp, offset, buf, bufsize)
  19.      lseq_t *lsp;
  20.      size_t offset;
  21.      void *buf;
  22.      size_t bufsize;
  23.  
  24. DESCRIPTION
  25.      The lsgetrf function reads a field from the current record in lseq lsp
  26.      into buf.  The field begins offset characters from the beginning of
  27.      the record and is bufsize characters long.  buf must point to a
  28.      storage area at least bufsize characters long.
  29.  
  30.      lsgetrf will fail if one or more of the following is true:
  31.  
  32.      [EINVAL]       lsp is not a valid lseq pointer.
  33.      [EINVAL]       buf is the NULL pointer.
  34.      [EINVAL]       bufsize is less than 1.
  35.      [LSEBOUND]     offset + bufsize extends beyond the end
  36.                     of the record.
  37.      [LSELOCK]      lsp is not read locked.
  38.      [LSENOPEN]     lsp is not open.
  39.      [LSENREC]      The cursor is null.
  40.  
  41. SEE ALSO
  42.      lscursor, lsgetr, lsputrf.
  43.  
  44. DIAGNOSTICS
  45.      Upon successful completion, a value of 0 is returned.  Otherwise, a
  46.      value of -1 is returned, and errno set to indicate the error.
  47.  
  48. ------------------------------------------------------------------------------*/
  49. int lsgetrf(lsp, offset, buf, bufsize)
  50. lseq_t * lsp;
  51. size_t   offset;
  52. void *   buf;
  53. size_t   bufsize;
  54. {
  55.     errno = 0;
  56.  
  57.     /* validate arguments */
  58.     if ((!ls_valid(lsp)) || (buf == NULL) || (bufsize < 1)) {
  59.         errno = EINVAL;
  60.         return -1;
  61.     }
  62.  
  63.     /* check if not open */
  64.     if (!(lsp->flags & LSOPEN)) {
  65.         errno = EINVAL;
  66.         return -1;
  67.     }
  68.  
  69.     /* check if not locked */
  70.     if (!(lsp->flags & LSRDLCK)) {
  71.         errno = LSELOCK;
  72.         return -1;
  73.     }
  74.  
  75.     /* check if over record boundary */
  76.     if ((offset + bufsize) > lsp->lshdr.recsize) {
  77.         errno = LSEBOUND;
  78.         return -1;
  79.     }
  80.  
  81.     /* check if cursor is null */
  82.     if (lsp->clspos == 0) {
  83.         errno = LSENREC;
  84.         return -1;
  85.     }
  86.  
  87.     /* copy field from current record */
  88.     memcpy(buf, (void *)((char *)lsp->clsrp->recbuf + offset), bufsize);
  89.  
  90.     errno = 0;
  91.     return 0;
  92. }
  93.