bool slice_reader::open_file(const path_type & file) { log_info << "Opening \"" << color::cyan << file.string() << color::reset << '"'; ifs.close(); ifs.clear(); ifs.open(file, std::ios_base::in | std::ios_base::binary | std::ios_base::ate); if(ifs.fail()) { return false; } std::streampos file_size = ifs.tellg(); ifs.seekg(0); char magic[8]; if(ifs.read(magic, 8).fail()) { ifs.close(); throw slice_error("could not read slice magic number in \"" + file.string() + "\""); } bool found = false; for(size_t i = 0; boost::size(slice_ids); i++) { if(!std::memcmp(magic, slice_ids[i], 8)) { found = true; break; } } if(!found) { ifs.close(); throw slice_error("bad slice magic number in \"" + file.string() + "\""); } slice_size = util::load<boost::uint32_t>(ifs); if(ifs.fail()) { ifs.close(); throw slice_error("could not read slice size in \"" + file.string() + "\""); } else if(std::streampos(slice_size) > file_size) { ifs.close(); std::ostringstream oss; oss << "bad slice size in " << file << ": " << slice_size << " > " << file_size; throw slice_error(oss.str()); } else if(std::streampos(slice_size) < ifs.tellg()) { ifs.close(); std::ostringstream oss; oss << "bad slice size in " << file << ": " << slice_size << " < " << ifs.tellg(); throw slice_error(oss.str()); } slice_file = file; last_dir = file.parent_path(); return true; }
bool server_type::match_path(path_type const& path, file_type type) { return type == file_type::regular_file && path.parent_path() == "/tcp" && path.filename().string()[0] == '*'; }