Handle<Value> ZipFile::New(const Arguments& args) { if (!args.IsConstructCall()) return ThrowException(String::New("Cannot call constructor as function, you need to use 'new' keyword")); if (args.Length() != 1 || !args[0]->IsString()) return ThrowException(Exception::TypeError( String::New("first argument must be a path to a zipfile"))); std::string input_file = TOSTR(args[0]); struct zip *za; int err; char errstr[1024]; if ((za=zip_open(input_file.c_str(), ZIP_CREATE, &err)) == NULL) { zip_error_to_str(errstr, sizeof(errstr), err, errno); std::stringstream s; s << "cannot open file: " << input_file << " error: " << errstr << "\n"; return ThrowException(Exception::Error( String::New(s.str().c_str()))); } ZipFile* zf = new ZipFile(input_file); zf->archive = za; zf->GetNames(); zf->Wrap(args.This()); return args.This(); }
Handle<Value> ZipFile::New(const Arguments& args) { HandleScope scope; if (!args.IsConstructCall()) return ThrowException(String::New("Cannot call constructor as function, you need to use 'new' keyword")); if (args.Length() != 1 || !args[0]->IsString()) return ThrowException(Exception::TypeError( String::New("first argument must be a path to a zipfile"))); std::string input_file = TOSTR(args[0]); struct zip *za; int err; char errstr[1024]; if ((za = zip_open(input_file.c_str(), 0, &err)) == NULL) { zip_error_to_str(errstr, sizeof(errstr), err, errno); std::stringstream s; s << "cannot open file: " << input_file << " error: " << errstr << "\n"; return ThrowException(Exception::Error( String::New(s.str().c_str()))); } ZipFile* zf = new ZipFile(input_file); int num = zip_get_num_files(za); zf->names_.reserve(num); int i = 0; for (i = 0; i < num; i++) { struct zip_stat st; zip_stat_index(za, i, 0, &st); zf->names_.push_back(st.name); } zf->archive_ = za; zf->Wrap(args.This()); return args.This(); }