HylaFAX The world's most advanced open source fax server

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Can not open document file




I have also experience this "cannot open document" problem.  Here is my
patch to fix it.  Note that this works on a Linux 2.0.28 box.  It has not
been tested on anything else.

=-=-=-=-=-=-=-=-=-=-=-=-=- cut here -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

*** faxd/faxQCleanApp.c++-orig	Wed Mar  5 12:23:40 1997
--- faxd/faxQCleanApp.c++	Wed Mar  5 12:25:19 1997
***************
*** 1,4 ****
--- 1,6 ----
+ #include <string>
+ 
  /*	$Id: faxQCleanApp.c++,v 1.8 1996/08/21 21:53:43 sam Rel $ */
  /*
   * Copyright (c) 1990-1996 Sam Leffler
   * Copyright (c) 1991-1996 Silicon Graphics, Inc.
***************
*** 284,292 ****
  		    (const char*) file);
  	    continue;
  	}
  	/*
! 	 * Document files should only have on link to them except
  	 * during the job preparation stage (i.e. when hfaxd has
  	 * original in the tmp directory and a link in the docq
  	 * directory).  Therefore if file has multiple links then
  	 * it's not a candidate for removal.  Note that this assumes
--- 286,294 ----
  		    (const char*) file);
  	    continue;
  	}
  	/*
! 	 * Document files should only have one link to them except
  	 * during the job preparation stage (i.e. when hfaxd has
  	 * original in the tmp directory and a link in the docq
  	 * directory).  Therefore if file has multiple links then
  	 * it's not a candidate for removal.  Note that this assumes
***************
*** 333,340 ****
--- 335,345 ----
  			printf("%s: file looks to be referenced by job\n",
  			    (const char*) file);
  		    continue;			// skip, in use
  		}
+ 		else if (trace)
+ 		  printf("%s: file has no matching %s\n", 
+ 			 (const char*) file, (const char*)qfile);
  	    } else if (strcmp(&file[l], "cover") == 0) {
  		/*
  		 * Cover page document has a jobid suffix
  		 * at the front; look to see if the job still
***************
*** 347,354 ****
--- 352,394 ----
  			printf("%s: file looks to be referenced by job\n",
  			    (const char*) file);
  		    continue;			// skip, in use
  		}
+ 	    }
+ 	    else if(((l = file.nextR(file.length(), ';')) != 0) &&
+ 		    l < file.length()) {
+ 	      // Check to make sure we don't delete a file with a ';'
+ 	      // suffix, when the PS.jobid version of the file still
+ 	      // exists.
+ 	      string      base(&file[5], (l -= 6));
+ 	      bool        got_match = false;
+ 	      DIR        *dir1 = Sys::opendir(docDir);
+ 
+ 	      if(dir1 == 0) {
+ 		printf("%s: Could not scan directory for base file.\n",
+ 		       (const char *) docDir);
+ 		continue;
+ 	      }
+ 	      for(dirent *dp1 = readdir(dir1); dp1; dp1 = readdir(dir1)) {
+ 		if(trace)
+ 		  printf("    Compare \"%s\" to \"%s\". (l=%d, dp1->d_name[l]=%c\n",
+ 			 dp1->d_name, base.c_str(), l, dp1->d_name[l]);
+ 		if(strlen(dp1->d_name) > l && dp1->d_name[l] == '.' &&
+ 		   base == string(dp1->d_name, l)) {
+ 		  // Found match
+ 		  if(trace)
+ 		    printf("%s: found match to base '%s', skipping.\n",
+ 			   (const char *)file, dp1->d_name);
+ 		  got_match = true;
+ 		  break;
+ 		}
+ 	      }
+ 	      closedir(dir1);
+ 	      if(got_match)
+ 		continue;
+ 	      if(trace)
+ 		printf("%s: did not find base '%s' match.\n", 
+ 		       (const char *) file, base.c_str());
  	    }
  	}
  	if (nowork || Sys::unlink(file) >= 0) {
  	    if (verbose)

=-=-=-=-=-=-=-=-=-=-=-=-=- cut here -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

This seems to take care of the problem for me.  Your milage may vary.

John
--

|         |
+--+  ==  |  John Patrick Poet          Blue Sky Tours
|  |      |  System Admin/programmer    10832 Prospect Ave., N.E.
|     +---+  john@BlueSkyTours.COM      Albuquerque, N.M. 87112
|     |      Ph. 505 293 9462           Fx. 505 293 6902




Project hosted by iFAX Solutions