static PRN *get_dotdir_printer (char **pfname, int *err) { const char *dotdir = gretl_dotdir(); char *fname = NULL; FILE *fp = NULL; PRN *prn = NULL; fname = malloc(strlen(dotdir) + 16); if (fname == NULL) { *err = E_ALLOC; } else { sprintf(fname, "%sprntmp.XXXXXX", dotdir); fp = gretl_mktemp(fname, "w"); if (fp == NULL) { *err = E_FOPEN; free(fname); fname = NULL; } } if (fp != NULL) { prn = gretl_print_new_with_stream(fp); *pfname = fname; } return prn; }
static int add_unique_output_file (MODEL *pmod, const char *path) { char outname[FILENAME_MAX]; char unique[FILENAME_MAX]; char line[256]; FILE *f0, *f1; sprintf(outname, "%s.out", path); f0 = gretl_fopen(outname, "r"); if (f0 == NULL) { return E_FOPEN; } sprintf(unique, "%s.XXXXXX", outname); f1 = gretl_mktemp(unique, "w"); if (f1 == NULL) { fclose(f0); return E_FOPEN; } while (fgets(line, sizeof line, f0)) { fputs(line, f1); } fclose(f0); fclose(f1); gretl_remove(outname); gretl_model_set_data(pmod, "x12a_output", g_strdup(unique), GRETL_TYPE_STRING, strlen(unique) + 1); return 0; }
static int prn_add_tempfile (PRN *prn) { const char *dotdir = gretl_dotdir(); int n = strlen(dotdir) + 16; int err = 0; prn->fname = malloc(n); if (prn->fname == NULL) { return E_ALLOC; } sprintf(prn->fname, "%sprntmp.XXXXXX", dotdir); prn->fp = gretl_mktemp(prn->fname, "w"); #if PRN_DEBUG fprintf(stderr, "prn_add_tempfile: '%s' at %p\n", prn->fname, (void *) prn->fp); #endif if (prn->fp == NULL) { free(prn->fname); prn->fname = NULL; err = E_FOPEN; } return err; }
static FILE *ztempfile (char *templ) { char *p = strrchr(templ, G_DIR_SEPARATOR); FILE *fp = NULL; if (p != NULL) { *p = '\0'; #ifdef G_OS_WIN32 if (lastchar(templ) != '\\') { strncat(templ, "\\", 1); } #else if (lastchar(templ) != '/') { strncat(templ, "/", 1); } #endif } strncat(templ, "ziXXXXXX", 8); fp = gretl_mktemp(templ, "wb"); return fp; }