/** * Mount directory and check that we mounted the right directory. */ static int seunshare_mount(const char *src, const char *dst, struct stat *src_st) { int flags = 0; int is_tmp = 0; if (verbose) printf(_("Mounting %s on %s\n"), src, dst); if (strcmp("/tmp", dst) == 0) { flags = flags | MS_NODEV | MS_NOSUID | MS_NOEXEC; is_tmp = 1; } /* mount directory */ if (mount(src, dst, NULL, MS_BIND | flags, NULL) < 0) { fprintf(stderr, _("Failed to mount %s on %s: %s\n"), src, dst, strerror(errno)); return -1; } /* verify whether we mounted what we expected to mount */ if (verify_directory(dst, src_st, NULL) < 0) return -1; /* bind mount /tmp on /var/tmp too */ if (is_tmp) { if (verbose) printf(_("Mounting /tmp on /var/tmp\n")); if (mount("/tmp", "/var/tmp", NULL, MS_BIND | flags, NULL) < 0) { fprintf(stderr, _("Failed to mount /tmp on /var/tmp: %s\n"), strerror(errno)); return -1; } } return 0; }
int main(int argc, char *argv[] ) { char archive[1024]; char *p; if ( argc < 3 ) { #ifndef PLAT_UNIX printf( "Usage: %s archive_name src_dir\n", argv[0] ); printf( "Example: %s freespace c:\\freespace\\data\n", argv[0] ); printf( "Creates an archive named freespace out of the\nfreespace data tree\n" ); printf( "Press any key to exit...\n" ); getch(); return 1; #else print_instructions(); #endif } strcpy( archive, argv[1] ); p = strchr( archive, '.' ); if (p) *p = 0; // remove extension strcpy( archive_dat, archive ); strcat( archive_dat, ".vp" ); strcpy( archive_hdr, archive ); strcat( archive_hdr, ".hdr" ); fp_out = fopen( archive_dat, "wb" ); if ( !fp_out ) { printf( "Couldn't open '%s'!\n", archive_dat ); #ifndef PLAT_UNIX printf( "Press any key to exit...\n" ); getch(); return 1; #else exit(1); #endif } fp_out_hdr = fopen( archive_hdr, "wb" ); if ( !fp_out_hdr ) { printf( "Couldn't open '%s'!\n", archive_hdr ); #ifndef PLAT_UNIX printf( "Press any key to exit...\n" ); getch(); return 1; #else exit(2); #endif } if ( verify_directory( argv[2] ) != 0 ) { printf("Warning! Last directory must be named \"data\" (not case sensitive)\n"); exit(3); } write_header(); pack_directory( argv[2] ); // in case the directory doesn't exist if ( no_dir ) exit(4); write_header(); fclose(fp_out); fclose(fp_out_hdr); printf( "Data files written, appending index...\n" ); if (!write_index(archive_hdr, archive_dat)) { printf("Error appending index!\n"); #ifndef PLAT_UNIX printf("Press any key to exit...\n"); getch(); #endif return 1; } printf( "%d total KB.\n", Total_size/1024 ); return 0; }
/*! \brief The main function of the **rm_reads** tool. */ int main(int argc, char ** argv) { Node root('0'); std::vector <std::pair<std::string, Node::Type> > patterns; std::string kmers, reads, out_dir; std::string reads1, reads2; char rez = 0; int length = 0; int polyG = 0; int dust_k = 4; int dust_cutoff = 0; int errors = 0; const struct option long_options[] = { {"fragments",required_argument,NULL,'f'}, {"errors",required_argument,NULL,'e'}, {NULL,0,NULL,0} }; while ((rez = getopt_long(argc, argv, "1:2:f:i:o:", long_options, NULL)) != -1) { switch (rez) { case 'f': kmers = optarg; break; case 'i': reads = optarg; break; case '1': reads1 = optarg; break; case '2': reads2 = optarg; break; case 'o': out_dir = optarg; break; case '?': print_help(); return -1; } } if (errors < 0 || errors > 2) { std::cerr << "possible errors count are 0, 1, 2" << std::endl; return -1; } if (kmers.empty() || out_dir.empty() || ( reads.empty() && (reads1.empty() || reads2.empty()))) { print_help(); return -1; } if (!verify_directory(out_dir)) { std::cerr << "Output directory does not exist, failed to create" << std::endl; return -1; } std::ifstream kmers_f (kmers.c_str()); if (!kmers_f.good()) { std::cerr << "Cannot open kmers file" << std::endl; print_help(); return -1; } init_type_names(length, polyG, dust_k, dust_cutoff); build_patterns(kmers_f, patterns); /* for (std::vector <std::string> ::iterator it = patterns.begin(); it != patterns.end(); ++it) { std::cout << *it << std::endl; } */ if (patterns.empty()) { std::cerr << "patterns are empty" << std::endl; return -1; } std::cerr << "Building trie..." << std::endl; build_trie(root, patterns, errors); add_failures(root); if (!reads.empty()) { std::string reads_base = basename(reads); std::ifstream reads_f (reads.c_str()); std::ofstream ok_f((out_dir + "/" + reads_base + ".ok.fastq").c_str(), std::ofstream::out); std::ofstream bad_f((out_dir + "/" + reads_base + ".filtered.fastq").c_str(), std::ofstream::out); if (!reads_f.good()) { std::cerr << "Cannot open reads file" << std::endl; print_help(); return -1; } if (!ok_f.good() || !bad_f.good()) { std::cerr << "Cannot open output file" << std::endl; print_help(); return -1; } Stats stats(reads); filter_single_reads(reads_f, ok_f, bad_f, stats, &root, patterns, length, dust_k, dust_cutoff, errors); std::cout << stats; ok_f.close(); bad_f.close(); reads_f.close(); } else { std::string reads1_base = basename(reads1); std::string reads2_base = basename(reads2); std::ifstream reads1_f(reads1.c_str()); std::ifstream reads2_f(reads2.c_str()); std::ofstream ok1_f((out_dir + "/" + reads1_base + ".ok.fastq").c_str(), std::ofstream::out); std::ofstream ok2_f((out_dir + "/" + reads2_base + ".ok.fastq").c_str(), std::ofstream::out); std::ofstream se1_f((out_dir + "/" + reads1_base + ".se.fastq").c_str(), std::ofstream::out); std::ofstream se2_f((out_dir + "/" + reads2_base + ".se.fastq").c_str(), std::ofstream::out); std::ofstream bad1_f((out_dir + "/" + reads1_base + ".filtered.fastq").c_str(), std::ofstream::out); std::ofstream bad2_f((out_dir + "/" + reads2_base + ".filtered.fastq").c_str(), std::ofstream::out); if (!reads1_f.good() || !reads2_f.good()) { std::cerr << "reads file is bad" << std::endl; print_help(); return -1; } if (!ok1_f.good() || !ok2_f.good() || !bad1_f.good() || !bad2_f.good() || !se1_f.good() || !se2_f.good()) { std::cerr << "out file is bad" << std::endl; print_help(); return -1; } Stats stats1(reads1); Stats stats2(reads2); filter_paired_reads(reads1_f, reads2_f, ok1_f, ok2_f, bad1_f, bad2_f, se1_f, se2_f, stats1, stats2, &root, patterns, length, dust_k, dust_cutoff, errors); std::cout << stats1; std::cout << stats2; ok1_f.close(); ok2_f.close(); bad1_f.close(); bad2_f.close(); reads1_f.close(); reads2_f.close(); } }