void setup() { create_logfile(); ops_crypto_init(); // Create temp directory if (!mktmpdir()) return; assert(strlen(dir)); snprintf(gpgcmd, sizeof gpgcmd, "gpg --quiet --no-tty --homedir=%s --openpgp", dir); setup_test_keys(); setup_test_extra_dsa_keys(); setup_test_keyptrs(); }
/****************************************************************************** * the test itself *****************************************************************************/ int main(int argc, char *argv[]) { char *dir = mktmpdir(); void *sp = kv_spoolwriter_new(dir); if (!sp) exit(-1); void *set = kv_set_new(); kv_adds(set, "hello", "again"); kv_adds(set, "second", "life"); kv_spool_write(sp,set); /* scan spool to validate expected file creation */ scan_spool(0); /* replace a value in the set, spool the set out. it should append * to the spool file previously created. */ printf("spooling second frame\n"); kv_adds(set, "second", "time"); kv_spool_write(sp,set); kv_spoolwriter_free(sp); /* verify spool has updated according to expectation */ scan_spool(0); printf("clear set\n"); kv_set_clear(set); /* loop over them */ kv_t *kv = NULL; while ( (kv = kv_next(set, kv))) { printf("key [%.*s], val [%.*s]\n", kv->klen, kv->key, kv->vlen, kv->val); } printf("reading from spool\n"); /* now try reading the spool */ sp = kv_spoolreader_new(dir); int rc; while ( (rc=kv_spool_read(sp, set, 0)) == 1) { printf("reader read frame:\n"); kv = NULL; while ( (kv = kv_next(set, kv))) { printf(" key [%.*s], val [%.*s]\n", kv->klen, kv->key, kv->vlen, kv->val); } } printf("kv_spool_read returned %d\n", rc); kv_spoolreader_free(sp); /* now reset it and read again */ printf("resetting the spool directory for another round of reading\n"); sp_reset(dir); sp = kv_spoolreader_new(dir); while ( (rc=kv_spool_read(sp, set, 0)) == 1) { printf("reader read frame:\n"); kv = NULL; while ( (kv = kv_next(set, kv))) { printf(" key [%.*s], val [%.*s]\n", kv->klen, kv->key, kv->vlen, kv->val); } } printf("kv_spool_read returned %d\n", rc); kv_spoolreader_free(sp); kv_set_free(set); scan_spool(1); return 0; }
int main(int argc, char **argv) { int ret = EXIT_SUCCESS; const char *tmpdir; size_t fails = 0; progname = argv[0]; setup_sys(); init_env(); parse_opts(argc, argv); bool partial = opts.E || opts.ast_dump || opts.ir_dump || opts.S || opts.c; if (argc == 1) { usage(); return EXIT_SUCCESS; } else if (vec_len(inputs) == 0) { fprintf(stderr, "no input file.\n"); return EXIT_FAILURE; } else if (output && vec_len(inputs) > 1 && partial) { fprintf(stderr, "mcc: cannot specify -o when generating multiple output files\n"); return EXIT_FAILURE; } if (!(tmpdir = mktmpdir())) die("Can't make temporary directory."); struct vector *objects = vec_new(); for (int i = 0; i < vec_len(inputs); i++) { const char *ifile = vec_at(inputs, i); const char *iname = basename(xstrdup(ifile)); const char *ofile = NULL; int ret; if (opts.E || opts.ast_dump || opts.ir_dump) { if (output) ofile = output; ret = translate(ifile, ofile); } else if (opts.S) { if (output) ofile = output; else ofile = replace_suffix(iname, "s"); ret = translate(ifile, ofile); } else if (opts.c) { if (output) ofile = output; else ofile = replace_suffix(iname, "o"); const char *sfile = tempname(tmpdir, replace_suffix(ifile, "s")); ret = translate(ifile, sfile); if (ret == 0) ret = assemble(sfile, ofile); } else { const char *sfile = tempname(tmpdir, replace_suffix(ifile, "s")); ret = translate(ifile, sfile); if (ret == 0) { ofile = tempname(tmpdir, replace_suffix(ifile, "o")); ret = assemble(sfile, ofile); vec_push(objects, (char *)ofile); } } if (ret == EXIT_FAILURE) fails++; } if (fails) { ret = EXIT_FAILURE; fprintf(stderr, "%lu succeed, %lu failed.\n", vec_len(inputs) - fails, fails); } else if (!partial) { // link ret = link(objects, output, opts.ld_options); } if (tmpdir) rmdir(tmpdir); return ret; }
std::string tmpdir(const char *prefix) { return mktmpdir(prefix); }