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
No related branches found
No related tags found
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.
Finish editing this message first!
Please register or to comment