Changeset 1089

Show
Ignore:
Timestamp:
07/21/08 00:42:39 (6 weeks ago)
Author:
gyoung
Message:

Delete orphaned tmp directories without deleting another active session's temp directory

Location:
trunk/dll
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/dll/fm3dll.h

    r1084 r1089  
    941941/* killproc.c */ 
    942942MRESULT EXPENTRY KillDlgProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2); 
     943CHAR *GetDosPgmName(PID pid, CHAR * string); 
     944 
    943945 
    944946/* sysinfo.c */ 
  • trunk/dll/init.c

    r1083 r1089  
    5353  19 Jul 08 GKY Use pFM2SaveDirectory, MakeTempName and move temp files to TMP subdirectory if (TMP). 
    5454  20 Jul 08 JBS Ticket 114: Support user-selectable env. strings in Tree container. 
     55  20 Jul 08 GKY Add support to delete orphaned tmp directories without deleting tmp of other 
     56                running sessions 
    5557 
    5658***********************************************************************/ 
     
    523525    strcat(s, "\\"); 
    524526  enddir = &s[strlen(s)]; 
    525   strcat(s, "$FM2LI$T"); 
     527  strcat(s, "$FM2LI$T."); 
    526528  strcat(s, "???"); 
    527529  search_handle = HDIR_CREATE; 
     
    666668    rc = DosQueryPathInfo(env, FIL_STANDARD, &fs3, sizeof(fs3)); 
    667669    if (!rc) { 
     670      CHAR *enddir, *p, szTempName[CCHMAXPATH], temp[CCHMAXPATH]; 
     671      FILEFINDBUF3 ffb; 
     672      HDIR search_handle; 
     673      ULONG num_matches, ul; 
     674 
     675      strcpy(szTempName, env); 
     676      if (szTempName[strlen(szTempName) - 1] != '\\') 
     677        strcat(szTempName, "\\"); 
     678      enddir = &szTempName[strlen(szTempName)]; 
     679      strcat(szTempName, "$FM2????."); 
     680      strcat(szTempName, "???"); 
     681      search_handle = HDIR_CREATE; 
     682      num_matches = 1; 
     683      if (!DosFindFirst(szTempName, 
     684                        &search_handle, 
     685                        FILE_NORMAL | FILE_DIRECTORY | 
     686                        FILE_SYSTEM | FILE_READONLY | FILE_HIDDEN | 
     687                        FILE_ARCHIVED, 
     688                        &ffb, sizeof(ffb), &num_matches, FIL_STANDARD)) { 
     689        do { 
     690          strcpy(enddir, ffb.achName); 
     691          p = strrchr(szTempName, '.'); 
     692          if (p) { 
     693            p++; 
     694            ul = strtol(p, &p + 2, 16); 
     695            GetDosPgmName(ul, temp); 
     696            if (!strstr(temp, "FM/2") && 
     697                !strstr(temp, "AV/2")) { 
     698              wipeallf("%s\\*", szTempName); 
     699              DosDeleteDir(szTempName); 
     700            } 
     701          } 
     702        } 
     703      while (!DosFindNext(search_handle, 
     704                          &ffb, sizeof(ffb), &num_matches)); 
     705      DosFindClose(search_handle); 
     706    } 
    668707      if (fs3.attrFile & FILE_DIRECTORY) { 
    669         CHAR szTempName[CCHMAXPATH]; 
    670708        APIRET ret = 0; 
    671         // 17 Jul 08 SHL fixme to check writable someday 
    672709        strcpy(szTempName, env); 
    673         //if (szTempName[strlen(szTempName) - 1] != '\\') 
    674         //  strcat(szTempName, "\\"); 
    675710        MakeTempName(szTempName, NULL, 1); 
    676711        ret = DosCreateDir(szTempName, 0); 
    677         if (!ret) { 
     712        if (!ret) {   //check writable 
    678713          pTmpDir = xstrdup(szTempName, pszSrcFile, __LINE__); 
    679         } 
     714        } //fixme to check freespace > 5 MB 
    680715      } 
    681716    }