Browse code

improve error handling in cli_rmdirs()

git-svn: trunk@2303

Tomasz Kojm authored on 2006/09/23 06:47:15
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Fri Sep 22 23:42:09 CEST 2006 (tk)
2
+----------------------------------
3
+  * libclamav/others.c: improve error handling in cli_rmdirs()
4
+
1 5
 Thu Sep 21 17:39:29 BST 2006 (njh)
2 6
 ----------------------------------
3 7
   * libclamav/mbox.c:	Experimental mode now no longer uses libcurl to
... ...
@@ -617,6 +617,7 @@ int cli_rmdirs(const char *dirname)
617 617
 #endif
618 618
 	struct stat maind, statbuf;
619 619
 	char *fname;
620
+	int ret;
620 621
 
621 622
 
622 623
     chmod(dirname, 0700);
... ...
@@ -626,7 +627,7 @@ int cli_rmdirs(const char *dirname)
626 626
 	    if(errno != ENOTEMPTY && errno != EEXIST && errno != EBADF) {
627 627
 		cli_errmsg("Can't remove temporary directory %s: %s\n", dirname, strerror(errno));
628 628
 		closedir(dd);
629
-		return 0;
629
+		return -1;
630 630
 	    }
631 631
 
632 632
 #ifdef HAVE_READDIR_R_3
... ...
@@ -661,13 +662,23 @@ int cli_rmdirs(const char *dirname)
661 661
 					cli_errmsg("Can't remove some temporary directories due to access problem.\n");
662 662
 					closedir(dd);
663 663
 					free(fname);
664
-					return 0;
664
+					return -1;
665
+				    }
666
+				    ret = cli_rmdirs(fname);
667
+				    if(ret) {
668
+					cli_warnmsg("Can't remove directory %s\n", fname);
669
+					free(fname);
670
+					closedir(dd);
671
+					return -1;
665 672
 				    }
666
-				    cli_rmdirs(fname);
667 673
 				}
668 674
 			    } else
669
-				if(unlink(fname) < 0)
675
+				if(unlink(fname) < 0) {
670 676
 				    cli_warnmsg("Couldn't remove %s: %s\n", fname, strerror(errno));
677
+				    free(fname);
678
+				    closedir(dd);
679
+				    return -1;
680
+				}
671 681
 			}
672 682
 
673 683
 			free(fname);