void backup_fun(const char *fn, void *x, int (*fun)(void *x, struct fout *ff)) { struct fout ff; int r; if (v_flag) { puts(fn); } if (!fout_setup(&ff, dst_cf, fn)) goto FAIL; if (fun != NULL) { r = fun(x, &ff); } else { r = 1; } if (!fout_close(&ff)) goto FAIL; if (r) goto SUCCESS; FAIL: if (c_flag) { SetLastError(ERROR_SUCCESS); goto SUCCESS; } win32_perror(fn); exit(EXIT_FAILURE); SUCCESS: return; }
static int backupf(const char *fn, const char *sfn) { struct fout ff; int r; if (!fout_setup(&ff, dst_cf, sfn)) return 0; r = backup1(&ff, fn); if (!fout_close(&ff)) return 0; return r; }
static int backupf3(FILE *fp, const char *sfn) { struct fout ff; int r; if (!fout_setup(&ff, dst_cf, sfn)) return 0; while (!feof(fp)) { r = fread(buffer, 1, sizeof(buffer), fp); if (r > 0) { if (!fout(&ff, buffer, r)) { return 0; } } } return fout_close(&ff); }
/* * Print n randomly selected sequences from file(s) containing k sequences. */ int sample(double f, unsigned int n, unsigned int k, char *fin1, char *fin2, char *fout1, char *fout2) { FILE *fs_out1, *fs_out2; gzFile fp1, fp2 = NULL; kseq_t *ks1, *ks2 = NULL; int ret; int paired = (fin2 != NULL); fp1 = gzopen(fin1, "r"); if (fp1 == NULL) { fprintf(stderr, "gzopen: %s: %s\n", fin1, strerror(errno)); ret = -1; goto err0; } ks1 = kseq_init(fp1); if (paired) { fp2 = gzopen(fin2, "r"); if (fp2 == NULL) { fprintf(stderr, "gzopen: %s: %s\n", fin2, strerror(errno)); ret = -2; goto err1; } ks2 = kseq_init(fp2); } if (fout_open(fout1, fout2, &fs_out1, &fs_out2) < 0) { ret = -3; goto err2; } if (n != -1) { if (sample_n(n, k, ks1, ks2, fs_out1, fs_out2, paired) < 0) { ret = -4; goto err3; } } else { if (sample_f(f, ks1, ks2, fs_out1, fs_out2, paired) < 0) { ret = -5; goto err3; } } ret = 0; err3: fout_close(fs_out1, fs_out2); err2: if (fin2) { kseq_destroy(ks2); gzclose(fp2); } err1: kseq_destroy(ks1); gzclose(fp1); err0: return ret; }