Skip to content
Snippets Groups Projects
Commit af13640b authored by Rob Swindell's avatar Rob Swindell :speech_balloon:
Browse files

Use (new) FILE_RETRY_ERRNO() macro to decide to retry sopen()

also retrying fread() and chsize(), but that seems harmless.
parent ac9c138a
Branches
Tags
No related merge requests found
Pipeline #7127 failed
......@@ -48,7 +48,7 @@ int nopen(const char* str, uint access)
access|=O_BINARY;
#endif
while(((file=sopen(str,access,share,DEFFILEMODE))==-1)
&& (errno==EACCES || errno==EAGAIN || errno==EDEADLOCK) && count++<LOOP_NOPEN)
&& FILE_RETRY_ERRNO(errno) && count++<LOOP_NOPEN)
SLEEP((count / 10) * 100);
return(file);
}
......
......@@ -84,7 +84,7 @@ size_t 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(feof(fp) || (get_errno()!=EDEADLOCK && get_errno()!=EACCES))
if(feof(fp) || !FILE_RETRY_ERRNO(get_errno()))
return(ret);
if(!start)
start=time(NULL);
......@@ -144,7 +144,7 @@ int smb_open_fp(smb_t* smb, FILE** fp, int share)
while(1) {
if((file=sopen(path,O_RDWR|O_CREAT|O_BINARY,share,DEFFILEMODE))!=-1)
break;
if(get_errno()!=EACCES && get_errno()!=EAGAIN) {
if(!FILE_RETRY_ERRNO(get_errno())) {
safe_snprintf(smb->last_error,sizeof(smb->last_error)
,"%s %d '%s' opening %s", __FUNCTION__
,get_errno(),strerror(get_errno()),path);
......
......@@ -240,7 +240,7 @@ int smb_trunchdr(smb_t* smb)
while(1) {
if(chsize(fileno(smb->shd_fp),0L)==0)
break;
if(get_errno()!=EACCES && get_errno()!=EAGAIN) {
if(!FILE_RETRY_ERRNO(get_errno())) {
safe_snprintf(smb->last_error,sizeof(smb->last_error)
,"%s %d '%s' changing header file size", __FUNCTION__
,get_errno(),strerror(get_errno()));
......@@ -1510,7 +1510,7 @@ int smb_addcrc(smb_t* smb, uint32_t crc)
while(1) {
if((file=sopen(str,O_RDWR|O_CREAT|O_BINARY,SH_DENYRW, DEFFILEMODE))!=-1)
break;
if(get_errno()!=EACCES && get_errno()!=EAGAIN) {
if(!FILE_RETRY_ERRNO(get_errno())) {
safe_snprintf(smb->last_error,sizeof(smb->last_error)
,"%s %d '%s' opening %s", __FUNCTION__
,get_errno(),strerror(get_errno()),str);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment