/*
  $NiH: zip_new_meta.c,v 1.5 2003/03/16 10:21:40 wiz Exp $

  zip_new_meta.c -- create and init struct zip_meta
  Copyright (C) 1999 Dieter Baron and Thomas Klausner

  This file is part of libzip, a library to manipulate ZIP archives.
  The authors can be contacted at <nih@giga.or.at>

  Redistribution and use in source and binary forms, with or without
  modification, are permitted provided that the following conditions
  are met:
  1. Redistributions of source code must retain the above copyright
     notice, this list of conditions and the following disclaimer.
  2. Redistributions in binary form must reproduce the above copyright
     notice, this list of conditions and the following disclaimer in
     the documentation and/or other materials provided with the
     distribution.
  3. The names of the authors may not be used to endorse or promote
     products derived from this software without specific prior
     written permission.
 
  THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS
  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY
  DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
  IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/



#include <stdlib.h>
#include "zip.h"

struct zip_meta *
zip_new_meta(void)
{
    struct zip_meta *meta;
    
    if ((meta=(struct zip_meta *)malloc(sizeof(struct zip_meta)))==NULL) {
	zip_err = ZERR_MEMORY;
	return NULL;
    }

    meta->version_made = meta->version_need = meta->bitflags = -1;
    meta->comp_method = meta->disknrstart = meta->int_attr = -1;
    meta->crc = meta->comp_size = meta->uncomp_size = -1;
    meta->ext_attr = meta->local_offset = -1;
    meta->ef_len = meta->lef_len = meta->fc_len = -1;

    meta->last_mod = 0;
    meta->ef = meta->lef = meta->fc = NULL;

    return meta;
}
