libclamav/zziplib/zzip-info.c
b151ef55
 /*
  * Author: 
  *      Guido Draheim <guidod@gmx.de>
  *
  * Copyright (c) 2000,2001,2002 Guido Draheim
  *          All rights reserved,
  *          use under the restrictions of the
  *          Lesser GNU General Public License
  *          note the additional license information 
  *          that can be found in COPYING.ZZIP
  */
 
8b242bb9
 #if HAVE_CONFIG_H
 #include "clamav-config.h"
 #endif
 
b151ef55
 #include <zzip.h>                                   /* exported... */
 #include <zzip-file.h>
 #include <zzipformat.h>
 
 #ifdef ZZIP_HAVE_SYS_STAT_H
 #include <sys/stat.h>
 #else
 #include <stdlib.h>
 #include <stdio.h>
 #endif
 
 /** 
  *  just returns dir->errcode of the ZZIP_DIR handle 
  *  see: => zzip_dir_open, => zzip_diropen, => zzip_readdir, => zzip_dir_read
  */
 int 
 zzip_error(ZZIP_DIR * dir)   
 {   
     return dir->errcode; 
 }
 
 /** => zzip_error
  *  This function just does dir->errcode = errcode 
  */
 void 
 zzip_seterror(ZZIP_DIR * dir, int errcode)   
 { dir->errcode = errcode; }
 
 /** 
  * This function will just return fp->dir 
  *
  * If a ZZIP_FILE is contained within a zip-file that one will be a valid
  * pointer, otherwise a NULL is returned and the ZZIP_FILE wraps a real file.
  */
 ZZIP_DIR * 
 zzip_dirhandle(ZZIP_FILE * fp)   
 { 
     return fp->dir; 
 }
 
 /** => zzip_dirhandle
  *  This function will just return dir->fd 
  *
  * If a ZZIP_DIR does point to a zipfile then the file-descriptor of that
  * zipfile is returned, otherwise a NULL is returned and the ZZIP_DIR wraps 
  * a real directory DIR (if you have dirent on your system).
  */
 int 
 zzip_dirfd(ZZIP_DIR* dir)   
 { 
     return dir->fd; 
 }
 
 /**
  * return static const string of the known compression methods, 
  * otherwise just "zipped" is returned
  */
 zzip_char_t*
 zzip_compr_str(int compr)
 {
     switch(compr)
     {
     case ZZIP_IS_STORED:		return "stored";
     case ZZIP_IS_SHRUNK:		return "shrunk";
     case ZZIP_IS_REDUCEDx1:
     case ZZIP_IS_REDUCEDx2:
     case ZZIP_IS_REDUCEDx3:
     case ZZIP_IS_REDUCEDx4:		return "reduced";
     case ZZIP_IS_IMPLODED:		return "imploded";
     case ZZIP_IS_TOKENIZED:		return "tokenized";
     case ZZIP_IS_DEFLATED:		return "deflated";
     case ZZIP_IS_DEFLATED_BETTER:	return "deflatedX";
     case ZZIP_IS_IMPLODED_BETTER:	return "implodedX";
     default:
         if (0 < compr && compr < 256)   return "zipped"; 
         else
         {
 #	ifdef S_ISDIR
             if (S_ISDIR(compr))		return "directory";
 #	endif
 #	ifdef S_ISCHR
             if (S_ISCHR(compr))		return "is/chr";
 #	endif
 #	ifdef S_ISBLK
             if (S_ISBLK(compr))		return "is/blk";
 #	endif
 #	ifdef S_ISFIFO
             if (S_ISFIFO(compr))	return "is/fifo";
 #	endif
 #	ifdef S_ISSOCK
             if (S_ISSOCK(compr))	return "is/sock";
 #	endif
 #	ifdef S_ISLNK
             if (S_ISLNK(compr))		return "is/lnk";
 #	endif
             return "special";
         }
     }/*switch*/
 }
 
 /** => zzip_file_real
  * This function checks if the ZZIP_DIR-handle is wrapping 
  * a real directory or a zip-archive. 
  * Returns 1 for a stat'able directory, and 0 for a handle to zip-archive.
  */ 
 int
 zzip_dir_real(ZZIP_DIR* dir)
 {
     return dir->realdir != 0;
 }
 
 /**
  * This function checks if the ZZIP_FILE-handle is wrapping 
  * a real file or a zip-contained file. 
  * Returns 1 for a stat'able file, and 0 for a file inside a zip-archive.
  */
 int
 zzip_file_real(ZZIP_FILE* fp)
 {
     return fp->dir == 0; /* ie. not dependent on a zip-arch-dir  */
 }
 
 /** => zzip_file_real
  * This function returns the posix DIR* handle (if one exists).
  * Check before with => zzip_dir_real if the
  * the ZZIP_DIR points to a real directory.
  */
 void*
 zzip_realdir(ZZIP_DIR* dir)
 {
     return dir->realdir;
 }
 
 /** => zzip_file_real
  * This function returns the posix file descriptor (if one exists).
  * Check before with => zzip_file_real if the
  * the ZZIP_FILE points to a real file.
  */
 int
 zzip_realfd(ZZIP_FILE* fp)
 {
     return fp->fd;
 }
 
 /* 
  * Local variables:
  * c-file-style: "stroustrup"
  * End:
  */