⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zipfile.c

📁 linux下建立JAVA虚拟机的源码KAFFE
💻 C
字号:
/* * java.util.zip.ZipFile.c * * Copyright (c) 1996, 1997, 1998 *      Transvirtual Technologies, Inc.  All rights reserved. * * See the file "license.terms" for information on usage and redistribution * of this file. */#include "config.h"#include "config-std.h"#include "config-io.h"#include "config-mem.h"#include "errors.h"#include "exception.h"#include "gc.h"#include "gtypes.h"#include "itypes.h"#include "jar.h"#include "java_util_zip_ZipEntry.h"#include "java_util_zip_ZipFile.h"#include "java_util_Vector.h"static Hjava_util_zip_ZipEntry* makeZipEntry(jarEntry*);struct Horg_kaffe_util_Ptr*java_util_zip_ZipFile_openZipFile0(Hjava_lang_String* fname){	jarFile* zip;	char* str;	str = checkPtr(stringJava2C(fname));	zip = openJarFile(str);	gc_free(str);	return ((struct Horg_kaffe_util_Ptr*)zip);}voidjava_util_zip_ZipFile_closeZipFile0(struct Horg_kaffe_util_Ptr* zip){	closeJarFile((jarFile*)zip);}jintjava_util_zip_ZipFile_getZipFileSize0(struct Horg_kaffe_util_Ptr* zip){	return ((jarFile*)zip)->count;}struct Hjava_util_zip_ZipEntry*java_util_zip_ZipFile_getZipEntry0(struct Horg_kaffe_util_Ptr* zip, Hjava_lang_String* zname){	jarEntry* entry;	char* str;	Hjava_util_zip_ZipEntry* zentry;	str = checkPtr(stringJava2C(zname));	entry = lookupJarFile((jarFile*)zip, str);	gc_free(str);	if (entry == NULL) {		return (NULL);	}	zentry = makeZipEntry(entry);	return (zentry);}HArrayOfByte*java_util_zip_ZipFile_getZipData0(struct Horg_kaffe_util_Ptr* zip, struct Hjava_util_zip_ZipEntry* zentry){	jarEntry entry;	HArrayOfByte* array;	uint8* buf = NULL;	jlong size;	size = unhand(zentry)->size;	if (size < 0) {                throwException(NegativeArraySizeException);        }	if( size > 0 )	{		entry.fileName = NULL;		entry.uncompressedSize = size;		entry.compressionMethod = unhand(zentry)->method;		entry.compressedSize = unhand(zentry)->csize;		entry.localHeaderOffset = unhand(zentry)->offset;				buf = getDataJarFile((jarFile*)zip, &entry);		if (buf == 0) {			return (NULL);		}	}	array = (HArrayOfByte*)AllocArray((jsize)size, TYPE_Byte);	if( buf )	{		memcpy(unhand_array(array)->body, buf, (size_t)size);		gc_free(buf);	}	return (array);}Hjava_util_Vector*java_util_zip_ZipFile_getZipEntries0(struct Horg_kaffe_util_Ptr* zip){	Hjava_util_Vector* vec;	jarFile* zfile;	jarEntry* entry;	HObject** elems;	int i = 0;	unsigned int j;	zfile = (jarFile*)zip;	vec = (Hjava_util_Vector*)execute_java_constructor("java.util.Vector",	    NULL, NULL, "(I)V", zfile->count);	elems = unhand_array(unhand(vec)->elementData)->body;	for (j = 0; j < zfile->tableSize; j++) {		entry = zfile->table[j];		while( entry )		{			elems[i] = (HObject*)makeZipEntry(entry);			i++;			entry = entry->next;		}	}	unhand(vec)->elementCount = zfile->count;	return (vec);}staticHjava_util_zip_ZipEntry*makeZipEntry(jarEntry* entry){	Hjava_util_zip_ZipEntry* zentry;	zentry = (Hjava_util_zip_ZipEntry*)	    execute_java_constructor("java.util.zip.ZipEntry", NULL, NULL, "()V");	unhand(zentry)->name =	    checkPtr(stringC2Java(entry->fileName));	unhand(zentry)->crc = 0;	unhand(zentry)->size = entry->uncompressedSize;	unhand(zentry)->method = entry->compressionMethod;	unhand(zentry)->extra = NULL;	unhand(zentry)->comment = NULL;	unhand(zentry)->flag = 0;	unhand(zentry)->version = 0;	unhand(zentry)->csize = entry->compressedSize;	unhand(zentry)->offset = entry->localHeaderOffset;	unhand(zentry)->dosTime = entry->dosTime;	return (zentry);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -