[Rd] Overriding InitTempDir

Jeffrey Horner jeff.horner at vanderbilt.edu
Fri Sep 1 00:07:32 CEST 2006


For embedded projects, one may want to eliminate the per-session temp 
directory created by InitTempDir() and just use a system-specific temp 
directory. Here's my solution:

extern char *R_TempDir;

void my_InitTempDir()
{
     char *tmp;

     if (R_TempDir){
         if (rmdir(R_TempDir) != 0){
             perror("Fatal Error: could not remove R's TempDir!");
             exit(1);
         }
     }

     tmp = getenv("TMPDIR");
     if (tmp == NULL) {
         tmp = getenv("TMP");
             if (tmp == NULL) {
                 tmp = getenv("TEMP");
                 if (tmp == NULL)
                     tmp = "/tmp";
             }
     }

     R_TempDir=tmp;

     if (setenv("R_SESSION_TMPDIR",tmp,1) != 0){
         perror("Fatal Error: couldn't set/replace R_SESSION_TMPDIR!");
         exit(1);
     }
}

This function is called after Rf_initEmbeddedR; it's seems like a hack 
but it works. Does anyone have other solutions?

Maybe InitTempDir could check if R_TempDir was not NULL and then just 
return.

-- 
http://biostat.mc.vanderbilt.edu/JeffreyHorner




More information about the R-devel mailing list