home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frostbyte's 1980s DOS Shareware Collection
/
floppyshareware.zip
/
floppyshareware
/
DOOG
/
CBASE09.ZIP
/
LSEQ.ZIP
/
LSCREATE.C
< prev
next >
Wrap
Text File
|
1989-08-30
|
3KB
|
121 lines
/* Copyright (c) 1989 Citadel */
/* All Rights Reserved */
/* #ident "lscreate.c 1.1 - 89/07/03" */
#include <blkio.h>
#include <errno.h>
/* #include <string.h> */
#include "lseq_.h"
/*man---------------------------------------------------------------------------
NAME
lscreate - create an lseq
SYNOPSIS
int lscreate(filename, recsize)
char *filename;
size_t recsize;
DESCRIPTION
The lscreate function creates the file named by filename as an lseq.
filename points to a character string that contains the name of the
file to be created.
lscreate will fail if one or more of the following is true:
[EINVAL] filename is the NULL pointer.
[EINVAL] recsize is less than 1.
[LSEMFILE] Too many open lseqs. The maximum
is defined as LSOPEN_MAX in lseq.h.
SEE ALSO
lsopen.
DIAGNOSTICS
Upon successful completion, a value of 0 is returned. Otherwise, a
value of -1 is returned, and errno set to indicate the error.
------------------------------------------------------------------------------*/
int lscreate(filename, recsize)
char * filename;
size_t recsize;
{
int rs = 0;
int terrno = 0;
lseq_t * lsp = NULL;
errno = 0;
/* validate input parameters */
if ((filename == NULL) || (recsize < 1)) {
errno = EINVAL;
return -1;
}
/* find free slot in lsb table */
for (lsp = lsb; lsp < (lsb + LSOPEN_MAX); lsp++) {
if (!(lsp->flags & LSOPEN)) {
break; /* found */
}
}
if (lsp >= lsb + LSOPEN_MAX) {
errno = LSEMFILE;
return -1; /* no free slots */
}
/* load lseq_t structure */
lsp->lshdr.flh = 0;
lsp->lshdr.recsize = recsize;
lsp->lshdr.flags = 0;
lsp->lshdr.first = 0;
lsp->lshdr.last = 0;
lsp->lshdr.reccnt = 0;
lsp->bp = NULL;
lsp->flags = LSREAD | LSWRITE;
lsp->clspos = 0;
lsp->clsrp = NULL;
rs = ls_alloc(lsp);
if (rs == -1) {
LSEPRINT;
memset((void *)lsp, 0, sizeof(lsb[0]));
lsp->flags = 0;
return -1;
}
/* create file */
lsp->bp = bopen(filename, "c", sizeof(lshdr_t), (size_t)1,(size_t)0);
if (lsp->bp == NULL) {
if (errno != EEXIST) LSEPRINT;
ls_free(lsp);
memset((void *)lsp, 0, sizeof(lsb[0]));
lsp->flags = 0;
return -1;
}
/* write header to file */
rs = bputh(lsp->bp, (void *)&lsp->lshdr); /* header */
if (rs == -1) {
LSEPRINT;
terrno = errno;
bclose(lsp->bp);
ls_free(lsp);
memset((void *)lsp, 0, sizeof(lsb[0]));
lsp->flags = 0;
errno = terrno;
return -1;
}
/* close lsp */
rs = lsclose(lsp);
if (rs == -1) {
LSEPRINT;
ls_free(lsp);
return -1;
}
errno = 0;
return 0;
}