int main(int argc, char **argv) { int i; if (argc == 1) ProcessFiles(stdin, stdout); else { for (i = 1; i < argc; ++i) ProcessFilename(argv[i]); } return (0); }
void CSplitFile::SplitFileInternal(HANDLE hInputFile,const LARGE_INTEGER &lFileSize) { LARGE_INTEGER lRunningSplitSize = {0}; char *pBuffer = new char[m_uSplitSize]; bool bStop = false; int nSplitsMade = 1; while(lRunningSplitSize.QuadPart < lFileSize.QuadPart && !bStop) { DWORD dwNumberOfBytesRead; ReadFile(hInputFile,reinterpret_cast<LPVOID>(pBuffer),m_uSplitSize,&dwNumberOfBytesRead,NULL); std::wstring strOutputFullFilename; ProcessFilename(nSplitsMade,strOutputFullFilename); HANDLE hOutputFile = CreateFile(strOutputFullFilename.c_str(),GENERIC_WRITE,0,NULL,CREATE_NEW, FILE_ATTRIBUTE_NORMAL,NULL); if(hOutputFile != INVALID_HANDLE_VALUE) { DWORD dwNumberOfBytesWritten; WriteFile(hOutputFile,reinterpret_cast<LPCVOID>(pBuffer),dwNumberOfBytesRead, &dwNumberOfBytesWritten,NULL); CloseHandle(hOutputFile); } /* TODO: Wait for a set period of time before sending message (so as not to block the GUI). */ PostMessage(m_hDlg,NSplitFileDialog::WM_APP_SETCURRENTSPLITCOUNT,nSplitsMade,0); lRunningSplitSize.QuadPart += dwNumberOfBytesRead; nSplitsMade++; EnterCriticalSection(&m_csStop); if(m_bStopSplitting) { bStop = true; } LeaveCriticalSection(&m_csStop); } delete[] pBuffer; }
inline void Zip::ProcessDirectoryEntry() { Skip(8); // u2 version_made_by = GetU2(); // u2 version_needed_to_extract = GetU2(); // u2 general_purpose_bits = GetU2(); // u2 compression_method = GetU2(); u2 last_mod_file_time = GetU2(); u2 last_mod_file_date = GetU2(); Skip(4); // u4 crc32 = GetU4(); Skip(4); // u4 compressed_size = GetU4(); u4 uncompressed_size = GetU4(); u2 file_name_length = GetU2(); u2 extra_field_length = GetU2(); u2 file_comment_length = GetU2(); Skip(8); // u2 disk_number_start = GetU2(); // u2 internal_file_attributes = GetU2(); // u4 external_file_attributes = GetU4(); u4 relative_offset_of_local_header = GetU4(); u4 date_time = ((u4) last_mod_file_date) << 16 | last_mod_file_time; char *name = buffer_ptr; Skip(file_name_length + extra_field_length + file_comment_length); // // Note that we need to process all subdirectory entries // that appear in the zip file, and not just the ones that // contain java and class files. Recall that in java the // dot notation is used in specifying a package. Therefore, // in processing a qualified-name that represents a package, // we need to recognize each name as a subpackage. E.g., // when processing "java.lang", we need to recognize "java" // as a package before looking for "lang"... // start at the "." directory. DirectorySymbol *directory_symbol = root_directory; // -1 to remove last '/' if (name[file_name_length - 1] == U_SLASH) ProcessSubdirectoryEntries(directory_symbol, name, file_name_length - 1); else { bool java_file = (file_name_length >= FileSymbol::java_suffix_length && FileSymbol::IsJavaSuffix(&name[file_name_length - FileSymbol::java_suffix_length])), class_file = (file_name_length >= FileSymbol::class_suffix_length && FileSymbol::IsClassSuffix(&name[file_name_length - FileSymbol::class_suffix_length])); if (java_file || class_file) { int name_length = file_name_length - (java_file ? FileSymbol::java_suffix_length : FileSymbol::class_suffix_length); int i; for (i = name_length - 1; i >= 0 && name[i] != U_SLASH; i--) ; if (i > 0) // directory specified? directory_symbol = ProcessSubdirectoryEntries(directory_symbol, name, i); NameSymbol *name_symbol = ProcessFilename(&name[i + 1], name_length - (i + 1)); // // Search for a file of that name in the directory. // If one is not found, then insert ... Otherwise, // either a class file of that name was previously // processed and now we found a java file with the // same name or vice-versa... In that case keep // (or replace with) the file with the most recent // date stamp. // FileSymbol *file_symbol = directory_symbol -> FindFileSymbol(name_symbol); if (! file_symbol) { file_symbol = directory_symbol -> InsertFileSymbol(name_symbol); file_symbol -> directory_symbol = directory_symbol; if (java_file) file_symbol -> SetJava(); else file_symbol -> SetClassOnly(); file_symbol -> uncompressed_size = uncompressed_size; file_symbol -> offset = relative_offset_of_local_header; file_symbol -> date_time = date_time; } else if (file_symbol -> date_time < date_time) { if (java_file) file_symbol -> SetJava(); else file_symbol -> SetClass(); file_symbol -> uncompressed_size = uncompressed_size; file_symbol -> offset = relative_offset_of_local_header; file_symbol -> date_time = date_time; } } } }