void attribute_hidden InitEd() { #ifdef Win32 DefaultFileName = R_tmpnam2("Redit", R_TempDir, ".R"); #else DefaultFileName = R_tmpnam2(NULL, R_TempDir, ".R"); #endif }
SEXP attribute_hidden do_tempfile(SEXP call, SEXP op, SEXP args, SEXP env) { SEXP ans, pattern, fileext, tempdir; const char *tn, *td, *te; char *tm; int i, n1, n2, n3, slen; checkArity(op, args); pattern = CAR(args); n1 = length(pattern); args = CDR(args); tempdir = CAR(args); n2 = length(tempdir); args = CDR(args); fileext = CAR(args); n3 = length(fileext); if (!isString(pattern)) error(_("invalid filename pattern")); if (!isString(tempdir)) error(_("invalid '%s' value"), "tempdir"); if (!isString(fileext)) error(_("invalid file extension")); if (n1 < 1) error(_("no 'pattern'")); if (n2 < 1) error(_("no 'tempdir'")); if (n3 < 1) error(_("no 'fileext'")); slen = (n1 > n2) ? n1 : n2; slen = (n3 > slen) ? n3 : slen; PROTECT(ans = allocVector(STRSXP, slen)); for(i = 0; i < slen; i++) { tn = translateChar( STRING_ELT( pattern , i%n1 ) ); td = translateChar( STRING_ELT( tempdir , i%n2 ) ); te = translateChar( STRING_ELT( fileext , i%n3 ) ); /* try to get a new file name */ tm = R_tmpnam2(tn, td, te); SET_STRING_ELT(ans, i, mkChar(tm)); if(tm) free(tm); } UNPROTECT(1); return (ans); }
char * R_tmpnam(const char * prefix, const char * tempdir) { return R_tmpnam2(prefix, tempdir, ""); }