Fossil

Diff
Login

Differences From Artifact [ea2c37550c]:

To Artifact [12e1e2904f]:


29
30
31
32
33
34
35


36
37
38
39
40
41
42
** For the fossil_timer_xxx() family of functions...
*/
#ifdef _WIN32
# include <windows.h>
#else
# include <sys/time.h>
# include <sys/resource.h>


# include <unistd.h>
# include <fcntl.h>
# include <errno.h>
#endif

/*
** Exit.  Take care to close the database first.







>
>







29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
** For the fossil_timer_xxx() family of functions...
*/
#ifdef _WIN32
# include <windows.h>
#else
# include <sys/time.h>
# include <sys/resource.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <unistd.h>
# include <fcntl.h>
# include <errno.h>
#endif

/*
** Exit.  Take care to close the database first.
644
645
646
647
648
649
650
651







652





653



654
655


656
657








658

659
660
661
662
663
664
665
666
** Construct a temporary filename.
**
** The returned string is obtained from sqlite3_malloc() and must be
** freed by the caller.
*/
char *fossil_temp_filename(void){
  char *zTFile = 0;
  sqlite3 *db;







  if( g.db ){





    db = g.db;



  }else{
    sqlite3_open("",&db);


  }
  sqlite3_file_control(db, 0, SQLITE_FCNTL_TEMPFILENAME, (void*)&zTFile);








  if( g.db==0 ) sqlite3_close(db);

  return zTFile;
}

/*
** Turn memory limits for stack and heap on and off.  The argument
** is true to turn memory limits on and false to turn them off.
**
** Memory limits should be enabled at startup, but then turned off







|
>
>
>
>
>
>
>

>
>
>
>
>
|
>
>
>

<
>
>

<
>
>
>
>
>
>
>
>
|
>
|







646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671

672
673
674

675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
** Construct a temporary filename.
**
** The returned string is obtained from sqlite3_malloc() and must be
** freed by the caller.
*/
char *fossil_temp_filename(void){
  char *zTFile = 0;
  const char *zDir;
  u64 r[2];
  int i;
#ifdef _WIN32
  char zTempDir[1000];
#else
  static const char *azTmp[] = {"/var/tmp","/usr/tmp","/tmp"};
#endif
  if( g.db ){
    sqlite3_file_control(g.db, 0, SQLITE_FCNTL_TEMPFILENAME, (void*)&zTFile);
    if( zTFile ) return zTFile;
  }
  sqlite3_randomness(sizeof(r), &r);
#if _WIN32
  zTempDir[0] = 0;
  GetTempPathA(sizeof(zTempDir), zTempDir);
  if( zTempDir[0] ){
    zDir = zTempDir;
  }else{

    zDir = fossil_getenv("LOCALAPPDATA");
    if( zDir==0 ) zDir = ".";
  }

#else
  for(i=0; i<sizeof(azTmp)/sizeof(azTmp[0]); i++){
    struct stat buf;
    zDir = azTmp[i];
    if( stat(zDir,&buf)==0 && S_ISDIR(buf.st_mode) && access(zDir,03)==0 ){
      break;
    }
  }
  if( i>=sizeof(azTmp)/sizeof(azTmp[0]) ) zDir = ".";
#endif
  return sqlite3_mprintf("%s/fossil%016llx%016llx", zDir, r[0], r[1]);
}

/*
** Turn memory limits for stack and heap on and off.  The argument
** is true to turn memory limits on and false to turn them off.
**
** Memory limits should be enabled at startup, but then turned off