Archive* Archive::Open(const char* filename) { if (filename == NULL) { return NULL; } Archive* result = new Archive(filename); if (result->Init() >= 0) { return result; } else { delete result; return NULL; } }