diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index ef53b60892e9092da7705558e47094776600239a..6787480cf140a8321d7879568f04afd396021c51 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -348,6 +348,10 @@ int SMBCALL smb_trunchdr(smb_t* smb)
 {
 	time_t	start=0;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	rewind(smb->shd_fp);
 	while(1) {
 		if(!chsize(fileno(smb->shd_fp),0L))
@@ -380,6 +384,10 @@ int SMBCALL smb_locksmbhdr(smb_t* smb)
 {
 	time_t	start=0;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	while(1) {
 		if(!lock(fileno(smb->shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)))
 			return(0);
@@ -403,6 +411,10 @@ int SMBCALL smb_getstatus(smb_t* smb)
 {
 	int 	i;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	setvbuf(smb->shd_fp,smb->shd_buf,_IONBF,SHD_BLOCK_LEN);
 	clearerr(smb->shd_fp);
 	fseek(smb->shd_fp,sizeof(smbhdr_t),SEEK_SET);
@@ -421,6 +433,10 @@ int SMBCALL smb_putstatus(smb_t* smb)
 {
 	int i;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	clearerr(smb->shd_fp);
 	fseek(smb->shd_fp,sizeof(smbhdr_t),SEEK_SET);
 	i=fwrite(&(smb->status),1,sizeof(smbstatus_t),smb->shd_fp);
@@ -436,6 +452,10 @@ int SMBCALL smb_putstatus(smb_t* smb)
 /****************************************************************************/
 int SMBCALL smb_unlocksmbhdr(smb_t* smb)
 {
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	return(unlock(fileno(smb->shd_fp),0L,sizeof(smbhdr_t)+sizeof(smbstatus_t)));
 }
 
@@ -450,6 +470,10 @@ int SMBCALL smb_lockmsghdr(smb_t* smb, smbmsg_t* msg)
 {
 	time_t	start=0;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	while(1) {
 		if(!lock(fileno(smb->shd_fp),msg->idx.offset,sizeof(msghdr_t)))
 			return(0);
@@ -481,7 +505,7 @@ int SMBCALL smb_getmsgidx(smb_t* smb, smbmsg_t* msg)
 
 	if(smb->sid_fp==NULL) {
 		sprintf(smb->last_error,"index not open");
-		return(1);
+		return(SMB_ERR_NOT_OPEN);
 	}
 	clearerr(smb->sid_fp);
 	if(!msg->hdr.number) {
@@ -539,6 +563,10 @@ int SMBCALL smb_getmsgidx(smb_t* smb, smbmsg_t* msg)
 /****************************************************************************/
 int SMBCALL smb_getfirstidx(smb_t* smb, idxrec_t *idx)
 {
+	if(smb->sid_fp==NULL) {
+		sprintf(smb->last_error,"index not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	clearerr(smb->sid_fp);
 	fseek(smb->sid_fp,0,SEEK_SET);
 	if(!fread(idx,sizeof(idxrec_t),1,smb->sid_fp)) {
@@ -555,6 +583,10 @@ int SMBCALL smb_getlastidx(smb_t* smb, idxrec_t *idx)
 {
 	long length;
 
+	if(smb->sid_fp==NULL) {
+		sprintf(smb->last_error,"index not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	clearerr(smb->sid_fp);
 	length=filelength(fileno(smb->sid_fp));
 	if(length<sizeof(idxrec_t)) {
@@ -616,6 +648,10 @@ int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg)
 	ulong	l,offset;
 	idxrec_t idx;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	rewind(smb->shd_fp);
 	fseek(smb->shd_fp,msg->idx.offset,SEEK_SET);
 	idx=msg->idx;
@@ -839,6 +875,10 @@ int SMBCALL smb_copymsgmem(smbmsg_t* msg, smbmsg_t* srcmsg)
 /****************************************************************************/
 int SMBCALL smb_unlockmsghdr(smb_t* smb, smbmsg_t* msg)
 {
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	return(unlock(fileno(smb->shd_fp),msg->idx.offset,sizeof(msghdr_t)));
 }
 
@@ -1050,7 +1090,10 @@ int SMBCALL smb_putmsg(smb_t* smb, smbmsg_t* msg)
 /****************************************************************************/
 int SMBCALL smb_putmsgidx(smb_t* smb, smbmsg_t* msg)
 {
-
+	if(smb->sid_fp==NULL) {
+		sprintf(smb->last_error,"index not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	clearerr(smb->sid_fp);
 	fseek(smb->sid_fp,msg->offset*sizeof(idxrec_t),SEEK_SET);
 	if(!fwrite(&msg->idx,sizeof(idxrec_t),1,smb->sid_fp)) {
@@ -1073,6 +1116,10 @@ int SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg)
 	ushort	i;
 	ulong	l;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	if(msg->idx.offset<sizeof(smbhdr_t)+sizeof(smbstatus_t) 
 		|| msg->idx.offset<smb->status.header_offset) {
 		sprintf(smb->last_error,"invalid header offset: %ld",msg->idx.offset);
@@ -1142,6 +1189,10 @@ int SMBCALL smb_create(smb_t* smb)
     char        str[128];
 	smbhdr_t	hdr;
 
+	if(smb->shd_fp==NULL || smb->sdt_fp==NULL || smb->sid_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	if(filelength(fileno(smb->shd_fp))>=sizeof(smbhdr_t)+sizeof(smbstatus_t)
 		&& smb_locksmbhdr(smb))  /* header exists, so lock it */
 		return(1);
@@ -1213,6 +1264,10 @@ long SMBCALL smb_allocdat(smb_t* smb, ulong length, ushort headers)
     ushort  i,j;
 	ulong	l,blocks,offset=0L;
 
+	if(smb->sda_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	blocks=smb_datblocks(length);
 	j=0;	/* j is consecutive unused block counter */
 	fflush(smb->sda_fp);
@@ -1247,6 +1302,10 @@ long SMBCALL smb_fallocdat(smb_t* smb, ulong length, ushort headers)
 {
 	ulong	l,blocks,offset;
 
+	if(smb->sda_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	fflush(smb->sda_fp);
 	clearerr(smb->sda_fp);
 	blocks=smb_datblocks(length);
@@ -1322,6 +1381,10 @@ int SMBCALL smb_incdat(smb_t* smb, ulong offset, ulong length, ushort headers)
 	ushort	i;
 	ulong	l,blocks;
 
+	if(smb->sda_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	clearerr(smb->sda_fp);
 	blocks=smb_datblocks(length);
 	for(l=0;l<blocks;l++) {
@@ -1350,6 +1413,10 @@ int SMBCALL smb_freemsghdr(smb_t* smb, ulong offset, ulong length)
 	uchar	c=0;
 	ulong	l,blocks;
 
+	if(smb->sha_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	clearerr(smb->sha_fp);
 	blocks=smb_hdrblocks(length);
 	fseek(smb->sha_fp,offset/SHD_BLOCK_LEN,SEEK_SET);
@@ -1397,6 +1464,10 @@ long SMBCALL smb_allochdr(smb_t* smb, ulong length)
 	ushort	i;
 	ulong	l,blocks,offset=0;
 
+	if(smb->sha_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	blocks=smb_hdrblocks(length);
 	i=0;	/* i is consecutive unused block counter */
 	fflush(smb->sha_fp);
@@ -1433,6 +1504,10 @@ long SMBCALL smb_fallochdr(smb_t* smb, ulong length)
 	uchar	c=1;
 	ulong	l,blocks,offset;
 
+	if(smb->sha_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	blocks=smb_hdrblocks(length);
 	fflush(smb->sha_fp);
 	clearerr(smb->sha_fp);
@@ -1456,6 +1531,10 @@ long SMBCALL smb_hallochdr(smb_t* smb)
 {
 	ulong l;
 
+	if(smb->shd_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	fflush(smb->shd_fp);
 	fseek(smb->shd_fp,0L,SEEK_END);
 	l=ftell(smb->shd_fp);
@@ -1476,6 +1555,10 @@ long SMBCALL smb_hallocdat(smb_t* smb)
 {
 	long l;
 
+	if(smb->sdt_fp==NULL) {
+		sprintf(smb->last_error,"msgbase not open");
+		return(SMB_ERR_NOT_OPEN);
+	}
 	fflush(smb->sdt_fp);
 	fseek(smb->sdt_fp,0L,SEEK_END);
 	l=ftell(smb->sdt_fp);