Changeset 1089 for trunk/dll/init.c


Ignore:
Timestamp:
Jul 21, 2008, 12:42:39 AM (17 years ago)
Author:
Gregg Young
Message:

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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    }
Note: See TracChangeset for help on using the changeset viewer.