コード例 #1
0
ファイル: szddd.c プロジェクト: hilarycheng/ring3k
/***************************************
 * SZDDD_DECOMPRESS
 ***************************************
 * unpacks directly from input to output
 */
static int szddd_decompress(struct msszdd_decompressor *self,
			    char *input, char *output)
{
  struct msszdd_decompressor_p *this = (struct msszdd_decompressor_p *) self;
  struct msszddd_header_p szdd;
  struct mspack_system *sys;
  struct mspack_file *fh;
  int error = MSPACK_ERR_OK;

  if (!this) return MSPACK_ERR_ARGS;
  sys = this->system;

  if ((fh = sys->open(sys, input, MSPACK_SYS_OPEN_READ))) {
    szdd.fh = fh;
    error = szddd_read_headers(sys, fh, (struct msszddd_header *) &szdd);
    if (error == MSPACK_ERR_OK) {
      error = szddd_extract(self, (struct msszddd_header *) &szdd, output);
    }
    sys->close(fh);
  }
  else {
    error = MSPACK_ERR_OPEN;
  }
  return this->error = error;
}
コード例 #2
0
ファイル: szddd.c プロジェクト: hilarycheng/ring3k
/***************************************
 * SZDDD_OPEN
 ***************************************
 * opens an SZDD file without decompressing, reads header
 */
static struct msszddd_header *szddd_open(struct msszdd_decompressor *self,
					 char *filename)
{
  struct msszdd_decompressor_p *this = (struct msszdd_decompressor_p *) self;
  struct msszddd_header_p *szdd = NULL;
  struct mspack_system *sys;
  struct mspack_file *fh;
  int error;

  if (!this) return NULL;
  sys = this->system;

  if ((fh = sys->open(sys, filename, MSPACK_SYS_OPEN_READ))) {
    if ((szdd = sys->alloc(sys, sizeof(struct msszddd_header_p)))) {
      szdd->fh = fh;
      error = szddd_read_headers(sys, fh, (struct msszddd_header *) szdd);
      if (error) {
	szddd_close(self, (struct msszddd_header *) szdd);
	szdd = NULL;
      }
      this->error = error;
    }
    else {
      this->error = MSPACK_ERR_NOMEMORY;
    }
    sys->close(fh);
  }
  else {
    this->error = MSPACK_ERR_OPEN;
  }
  return (struct msszddd_header *) szdd;
}
コード例 #3
0
ファイル: szddd.c プロジェクト: MiKTeX/miktex
/***************************************
 * SZDDD_OPEN
 ***************************************
 * opens an SZDD file without decompressing, reads header
 */
static struct msszddd_header *szddd_open(struct msszdd_decompressor *base,
					 const char *filename)
{
    struct msszdd_decompressor_p *self = (struct msszdd_decompressor_p *) base;
    struct msszddd_header *hdr;
    struct mspack_system *sys;
    struct mspack_file *fh;

    if (!self) return NULL;
    sys = self->system;

    fh  = sys->open(sys, filename, MSPACK_SYS_OPEN_READ);
    hdr = (struct msszddd_header *) sys->alloc(sys, sizeof(struct msszddd_header_p));
    if (fh && hdr) {
	((struct msszddd_header_p *) hdr)->fh = fh;
	self->error = szddd_read_headers(sys, fh, hdr);
    }
    else {
	if (!fh)  self->error = MSPACK_ERR_OPEN;
	if (!hdr) self->error = MSPACK_ERR_NOMEMORY;
    }
    
    if (self->error) {
	if (fh) sys->close(fh);
	sys->free(hdr);
	hdr = NULL;
    }

    return hdr;
}