static Packer* try_unpack(Packer *p, void *user) { if (p == NULL) return NULL; InputFile *f = (InputFile *) user; p->assertPacker(); try { p->initPackHeader(); f->seek(0,SEEK_SET); int r = p->canUnpack(); if (r > 0) { f->seek(0,SEEK_SET); return p; } if (r < 0) { // FIXME - could stop testing all other unpackers at this time // see canUnpack() in packer.h } } catch (const IOException&) { } catch (...) { delete p; throw; } delete p; return NULL; }
static Packer* try_pack(Packer *p, void *user) { if (p == NULL) return NULL; InputFile *f = (InputFile *) user; p->assertPacker(); try { p->initPackHeader(); f->seek(0,SEEK_SET); if (p->canPack()) { if (opt->cmd == CMD_COMPRESS) p->updatePackHeader(); f->seek(0,SEEK_SET); return p; } } catch (const IOException&) { } catch (...) { delete p; throw; } delete p; return NULL; }