From f8cf1934272912871d57ed37ca73079ad1c20bb2 Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Fri, 17 Sep 2004 11:10:09 +0000
Subject: [PATCH] Bugfix (introduced in rev 1.83) : ferror() does not return an
 errno value (or any useful error number). It just returns a "non-zero" value,
 the same "non-zero" value regardless of the cause of failure. Still not
 positive if fread() sets errno in any/all CRTLs or not. :-(

---
 src/smblib/smbadd.c   | 12 ++++++------
 src/smblib/smballoc.c | 18 +++++++++---------
 src/smblib/smbfile.c  |  2 +-
 src/smblib/smblib.c   | 36 ++++++++++++++++++------------------
 4 files changed, 34 insertions(+), 34 deletions(-)

diff --git a/src/smblib/smbadd.c b/src/smblib/smbadd.c
index 32bf734d9b..9ed1e037fc 100644
--- a/src/smblib/smbadd.c
+++ b/src/smblib/smbadd.c
@@ -171,7 +171,7 @@ int SMBCALL smb_addmsg(smb_t* smb, smbmsg_t* msg, int storage, long dupechk_hash
 				if(smb_fwrite(smb,&xlat,sizeof(xlat),smb->sdt_fp)!=sizeof(xlat)) {
 					safe_snprintf(smb->last_error,sizeof(smb->last_error)
 						,"%d (%s) writing body xlat string"
-						,ferror(smb->sdt_fp),STRERROR(ferror(smb->sdt_fp)));
+						,get_errno(),STRERROR(get_errno()));
 					retval=SMB_ERR_WRITE;
 					break;
 				}
@@ -181,7 +181,7 @@ int SMBCALL smb_addmsg(smb_t* smb, smbmsg_t* msg, int storage, long dupechk_hash
 			if(smb_fwrite(smb,&xlat,sizeof(xlat),smb->sdt_fp)!=sizeof(xlat)) {
 				safe_snprintf(smb->last_error,sizeof(smb->last_error)
 					,"%d (%s) writing body xlat terminator"
-					,ferror(smb->sdt_fp),STRERROR(ferror(smb->sdt_fp)));
+					,get_errno(),STRERROR(get_errno()));
 				retval=SMB_ERR_WRITE;
 				break;
 			}
@@ -190,7 +190,7 @@ int SMBCALL smb_addmsg(smb_t* smb, smbmsg_t* msg, int storage, long dupechk_hash
 			if(smb_fwrite(smb,body,bodylen,smb->sdt_fp)!=bodylen) {
 				safe_snprintf(smb->last_error,sizeof(smb->last_error)
 					,"%d (%s) writing body (%ld bytes)"
-					,ferror(smb->sdt_fp),STRERROR(ferror(smb->sdt_fp))
+					,get_errno(),STRERROR(get_errno())
 					,bodylen);
 				retval=SMB_ERR_WRITE;
 				break;
@@ -205,7 +205,7 @@ int SMBCALL smb_addmsg(smb_t* smb, smbmsg_t* msg, int storage, long dupechk_hash
 			if(smb_fwrite(smb,&xlat,sizeof(xlat),smb->sdt_fp)!=sizeof(xlat)) {
 				safe_snprintf(smb->last_error,sizeof(smb->last_error)
 					,"%d (%s) writing tail xlat terminator"
-					,ferror(smb->sdt_fp),STRERROR(ferror(smb->sdt_fp)));
+					,get_errno(),STRERROR(get_errno()));
 				retval=SMB_ERR_WRITE;
 				break;
 			}
@@ -213,7 +213,7 @@ int SMBCALL smb_addmsg(smb_t* smb, smbmsg_t* msg, int storage, long dupechk_hash
 			if(smb_fwrite(smb,tail,taillen-sizeof(xlat),smb->sdt_fp)!=taillen-sizeof(xlat)) {
 				safe_snprintf(smb->last_error,sizeof(smb->last_error)
 					,"%d (%s) writing tail (%ld bytes)"
-					,ferror(smb->sdt_fp),STRERROR(ferror(smb->sdt_fp))
+					,get_errno(),STRERROR(get_errno())
 					,taillen-sizeof(xlat));
 				retval=SMB_ERR_WRITE;
 				break;
@@ -227,7 +227,7 @@ int SMBCALL smb_addmsg(smb_t* smb, smbmsg_t* msg, int storage, long dupechk_hash
 		if(l%SDT_BLOCK_LEN) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing data padding"
-				,ferror(smb->sdt_fp),STRERROR(ferror(smb->sdt_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			retval=SMB_ERR_WRITE;
 			break;
 		}
diff --git a/src/smblib/smballoc.c b/src/smblib/smballoc.c
index cc508a065d..a1948b8c17 100644
--- a/src/smblib/smballoc.c
+++ b/src/smblib/smballoc.c
@@ -83,7 +83,7 @@ long SMBCALL smb_allocdat(smb_t* smb, ulong length, ushort refs)
 		if(!fwrite(&refs,sizeof(refs),1,smb->sda_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing allocation bytes at offset %ld"
-				,ferror(smb->sda_fp),STRERROR(ferror(smb->sda_fp))
+				,get_errno(),STRERROR(get_errno())
 				,((offset/SDT_BLOCK_LEN)+l)*sizeof(refs));
 			return(SMB_ERR_WRITE);
 		}
@@ -122,7 +122,7 @@ long SMBCALL smb_fallocdat(smb_t* smb, ulong length, ushort refs)
 	if(l<blocks) {
 		safe_snprintf(smb->last_error,sizeof(smb->last_error)
 			,"%d (%s) writing allocation bytes"
-			,ferror(smb->sda_fp),STRERROR(ferror(smb->sda_fp)));
+			,get_errno(),STRERROR(get_errno()));
 		return(SMB_ERR_WRITE);
 	}
 	return(offset);
@@ -165,7 +165,7 @@ int SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length, ushort refs)
 		if(smb_fread(smb,&i,sizeof(i),smb->sda_fp)!=sizeof(i)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading allocation bytes at offset %ld"
-				,ferror(smb->sda_fp),STRERROR(ferror(smb->sda_fp))
+				,get_errno(),STRERROR(get_errno())
 				,sda_offset);
 			retval=SMB_ERR_READ;
 			break;
@@ -184,7 +184,7 @@ int SMBCALL smb_freemsgdat(smb_t* smb, ulong offset, ulong length, ushort refs)
 		if(!fwrite(&i,sizeof(i),1,smb->sda_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing allocation bytes at offset %ld"
-				,ferror(smb->sda_fp),STRERROR(ferror(smb->sda_fp))
+				,get_errno(),STRERROR(get_errno())
 				,sda_offset);
 			retval=SMB_ERR_WRITE; 
 			break;
@@ -218,7 +218,7 @@ int SMBCALL smb_incdat(smb_t* smb, ulong offset, ulong length, ushort refs)
 		if(smb_fread(smb,&i,sizeof(i),smb->sda_fp)!=sizeof(i)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading allocation record at offset %ld"
-				,ferror(smb->sda_fp),STRERROR(ferror(smb->sda_fp))
+				,get_errno(),STRERROR(get_errno())
 				,((offset/SDT_BLOCK_LEN)+l)*sizeof(i));
 			return(SMB_ERR_READ);
 		}
@@ -229,7 +229,7 @@ int SMBCALL smb_incdat(smb_t* smb, ulong offset, ulong length, ushort refs)
 		if(!fwrite(&i,sizeof(i),1,smb->sda_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing allocation record at offset %ld"
-				,ferror(smb->sda_fp),STRERROR(ferror(smb->sda_fp))
+				,get_errno(),STRERROR(get_errno())
 				,((offset/SDT_BLOCK_LEN)+l)*sizeof(i));
 			return(SMB_ERR_WRITE); 
 		}
@@ -290,7 +290,7 @@ int SMBCALL smb_freemsghdr(smb_t* smb, ulong offset, ulong length)
 		if(!fwrite(&c,1,1,smb->sha_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing allocation record"
-				,ferror(smb->sha_fp),STRERROR(ferror(smb->sha_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_WRITE);
 		}
 	fflush(smb->sha_fp);
@@ -373,7 +373,7 @@ long SMBCALL smb_allochdr(smb_t* smb, ulong length)
 		if(fputc(1,smb->sha_fp)!=1) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing allocation record"
-				,ferror(smb->sha_fp),STRERROR(ferror(smb->sha_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_WRITE);
 		}
 	fflush(smb->sha_fp);
@@ -403,7 +403,7 @@ long SMBCALL smb_fallochdr(smb_t* smb, ulong length)
 		if(!fwrite(&c,1,1,smb->sha_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing allocation record"
-				,ferror(smb->sha_fp),STRERROR(ferror(smb->sha_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_WRITE);
 		}
 	fflush(smb->sha_fp);
diff --git a/src/smblib/smbfile.c b/src/smblib/smbfile.c
index 65a53ebd5d..e1641dd91b 100644
--- a/src/smblib/smbfile.c
+++ b/src/smblib/smbfile.c
@@ -102,7 +102,7 @@ size_t SMBCALL smb_fread(smb_t* smb, void* buf, size_t bytes, FILE* fp)
 	while(1) {
 		if((ret=fread(buf,sizeof(char),bytes,fp))==bytes)
 			return(ret);
-		if(ferror(fp)!=EDEADLOCK)
+		if(errno!=EDEADLOCK)
 			return(ret);
 		if(!start)
 			start=time(NULL);
diff --git a/src/smblib/smblib.c b/src/smblib/smblib.c
index 75c77ff613..9b79908ffc 100644
--- a/src/smblib/smblib.c
+++ b/src/smblib/smblib.c
@@ -114,7 +114,7 @@ int SMBCALL smb_open(smb_t* smb)
 		if(smb_fread(smb,&hdr,sizeof(smbhdr_t),smb->shd_fp)!=sizeof(smbhdr_t)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading header"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			smb_close(smb);
 			return(SMB_ERR_READ);
 		}
@@ -135,7 +135,7 @@ int SMBCALL smb_open(smb_t* smb)
 		if(smb_fread(smb,&(smb->status),sizeof(smbstatus_t),smb->shd_fp)!=sizeof(smbstatus_t)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading status"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			smb_close(smb);
 			return(SMB_ERR_READ); 
 		}
@@ -380,7 +380,7 @@ int SMBCALL smb_getstatus(smb_t* smb)
 	if(i==sizeof(smbstatus_t))
 		return(SMB_SUCCESS);
 	safe_snprintf(smb->last_error,sizeof(smb->last_error)
-		,"%d (%s) reading status",ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+		,"%d (%s) reading status",get_errno(),STRERROR(get_errno()));
 	return(SMB_ERR_READ);
 }
 
@@ -407,7 +407,7 @@ int SMBCALL smb_putstatus(smb_t* smb)
 	if(i==sizeof(smbstatus_t))
 		return(SMB_SUCCESS);
 	safe_snprintf(smb->last_error,sizeof(smb->last_error)
-		,"%d (%s) writing status",ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+		,"%d (%s) writing status",get_errno(),STRERROR(get_errno()));
 	return(SMB_ERR_WRITE);
 }
 
@@ -526,7 +526,7 @@ int SMBCALL smb_getmsgidx(smb_t* smb, smbmsg_t* msg)
 		if(smb_fread(smb,&msg->idx,sizeof(idxrec_t),smb->sid_fp)!=sizeof(idxrec_t)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading index at offset %lu (byte %lu)"
-				,ferror(smb->sid_fp),STRERROR(ferror(smb->sid_fp))
+				,get_errno(),STRERROR(get_errno())
 				,msg->offset,msg->offset*sizeof(idxrec_t));
 			return(SMB_ERR_READ);
 		}
@@ -552,7 +552,7 @@ int SMBCALL smb_getmsgidx(smb_t* smb, smbmsg_t* msg)
 		if(smb_fread(smb,&idx,sizeof(idxrec_t),smb->sid_fp)!=sizeof(idxrec_t)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading index at offset %lu (byte %lu)"
-				,ferror(smb->sid_fp),STRERROR(ferror(smb->sid_fp)),l,l*sizeof(idxrec_t));
+				,get_errno(),STRERROR(get_errno()),l,l*sizeof(idxrec_t));
 			return(SMB_ERR_READ);
 		}
 		if(bot==top-1 && idx.number!=msg->hdr.number) {
@@ -596,7 +596,7 @@ int SMBCALL smb_getfirstidx(smb_t* smb, idxrec_t *idx)
 	if(smb_fread(smb,idx,sizeof(idxrec_t),smb->sid_fp)!=sizeof(idxrec_t)) {
 		safe_snprintf(smb->last_error,sizeof(smb->last_error)
 			,"%d (%s) reading first index"
-			,ferror(smb->sid_fp),STRERROR(ferror(smb->sid_fp)));
+			,get_errno(),STRERROR(get_errno()));
 		return(SMB_ERR_READ);
 	}
 	return(SMB_SUCCESS);
@@ -630,7 +630,7 @@ int SMBCALL smb_getlastidx(smb_t* smb, idxrec_t *idx)
 	if(smb_fread(smb,idx,sizeof(idxrec_t),smb->sid_fp)!=sizeof(idxrec_t)) {
 		safe_snprintf(smb->last_error,sizeof(smb->last_error)
 			,"%d (%s) reading last index"
-			,ferror(smb->sid_fp),STRERROR(ferror(smb->sid_fp)));
+			,get_errno(),STRERROR(get_errno()));
 		return(SMB_ERR_READ);
 	}
 	return(SMB_SUCCESS);
@@ -870,7 +870,7 @@ int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg)
 	if(smb_fread(smb,&msg->hdr,sizeof(msghdr_t),smb->shd_fp)!=sizeof(msghdr_t)) {
 		safe_snprintf(smb->last_error,sizeof(smb->last_error)
 			,"%d (%s) reading msg header"
-			,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+			,get_errno(),STRERROR(get_errno()));
 		return(SMB_ERR_READ);
 	}
 	if(memcmp(msg->hdr.id,SHD_HEADER_ID,LEN_HEADER_ID)) {
@@ -900,7 +900,7 @@ int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg)
 			smb_freemsgmem(msg);
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading data field %d"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)),i);
+				,get_errno(),STRERROR(get_errno()),i);
 			return(SMB_ERR_READ); 
 		}
 		i++;
@@ -936,7 +936,7 @@ int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg)
 			smb_freemsgmem(msg);
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading header field"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_READ); 
 		}
 		l+=sizeof(hfield_t);
@@ -955,7 +955,7 @@ int SMBCALL smb_getmsghdr(smb_t* smb, smbmsg_t* msg)
 			smb_freemsgmem(msg);
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) reading header field data"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_READ); 
 		}
 		set_convenience_ptr(msg,msg->hfield[i].type,msg->hfield_dat[i]);
@@ -1443,7 +1443,7 @@ int SMBCALL smb_putmsgidx(smb_t* smb, smbmsg_t* msg)
 	if(!fwrite(&msg->idx,sizeof(idxrec_t),1,smb->sid_fp)) {
 		safe_snprintf(smb->last_error,sizeof(smb->last_error)
 			,"%d (%s) writing index"
-			,ferror(smb->sid_fp),STRERROR(ferror(smb->sid_fp)));
+			,get_errno(),STRERROR(get_errno()));
 		return(SMB_ERR_WRITE);
 	}
 	fflush(smb->sid_fp);
@@ -1507,7 +1507,7 @@ int SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg)
 	if(!fwrite(&msg->hdr,sizeof(msghdr_t),1,smb->shd_fp)) {
 		safe_snprintf(smb->last_error,sizeof(smb->last_error)
 			,"%d (%s) writing fixed portion of header record"
-			,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+			,get_errno(),STRERROR(get_errno()));
 		return(SMB_ERR_WRITE);
 	}
 
@@ -1518,7 +1518,7 @@ int SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg)
 		if(!fwrite(&msg->dfield[i],sizeof(dfield_t),1,smb->shd_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing data field"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_WRITE);
 		}
 
@@ -1529,14 +1529,14 @@ int SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg)
 		if(!fwrite(&msg->hfield[i],sizeof(hfield_t),1,smb->shd_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing header field"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_WRITE);
 		}
 		if(msg->hfield[i].length					 /* more then 0 bytes long */
 			&& !fwrite(msg->hfield_dat[i],msg->hfield[i].length,1,smb->shd_fp)) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) writing header field data"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_WRITE); 
 		}
 	}
@@ -1545,7 +1545,7 @@ int SMBCALL smb_putmsghdr(smb_t* smb, smbmsg_t* msg)
 		if(fputc(0,smb->shd_fp)!=0) {
 			safe_snprintf(smb->last_error,sizeof(smb->last_error)
 				,"%d (%s) padding header block"
-				,ferror(smb->shd_fp),STRERROR(ferror(smb->shd_fp)));
+				,get_errno(),STRERROR(get_errno()));
 			return(SMB_ERR_WRITE); 			   /* pad block with NULL */
 		}
 		hdrlen++; 
-- 
GitLab