wok-current diff lzma/stuff/lzlib.u @ rev 1690

Add jfsutils
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Nov 11 09:02:11 2008 +0000 (2008-11-11)
parents
children
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/lzma/stuff/lzlib.u	Tue Nov 11 09:02:11 2008 +0000
     1.3 @@ -0,0 +1,202 @@
     1.4 +--- CPP/7zip/Compress/LZMA_Alone/makefile.gcc
     1.5 ++++ CPP/7zip/Compress/LZMA_Alone/makefile.gcc
     1.6 +@@ -1,6 +1,6 @@
     1.7 + PROG = lzma
     1.8 +-CXX = g++ -O2 -Wall
     1.9 +-CXX_C = gcc -O2 -Wall
    1.10 ++CXX = g++ -s -O2 -Wall
    1.11 ++CXX_C = gcc -s -O2 -Wall
    1.12 + LIB = -lm
    1.13 + RM = rm -f
    1.14 + CFLAGS = -c
    1.15 +@@ -46,8 +46,47 @@
    1.16 +   LzmaDecode.o \
    1.17 +   LzmaRamDecode.o \
    1.18 + 
    1.19 ++LIB = liblz.so.1.0.0
    1.20 ++LIB_OBJS = \
    1.21 ++  LzmaRamDecode.o \
    1.22 ++  LzmaDecode.o \
    1.23 ++  BranchX86.o \
    1.24 ++  Wrapper.o \
    1.25 ++  
    1.26 ++SHARED_OBJS = \
    1.27 ++  LzmaAlone.o \
    1.28 ++  LzmaBench.o \
    1.29 ++  LzmaBenchCon.o \
    1.30 ++  LZMADecoder.o \
    1.31 ++  LZMAEncoder.o \
    1.32 ++  LzmaRam.o \
    1.33 ++  InBuffer.o \
    1.34 ++  OutBuffer.o \
    1.35 ++  CRC.o \
    1.36 ++  IntToString.o \
    1.37 ++  MyString.o \
    1.38 ++  StringConvert.o \
    1.39 ++  StringToInt.o \
    1.40 ++  MyVector.o \
    1.41 ++  7zCrc.o \
    1.42 ++  Alloc.o \
    1.43 ++  MatchFinder.o \
    1.44 ++  StreamUtils.o \
    1.45 ++  LZOutWindow.o \
    1.46 ++  RangeCoderBit.o \
    1.47 ++  FileStreams.o \
    1.48 ++  $(FILE_IO).o \
    1.49 ++  CommandLineParser.o \
    1.50 ++
    1.51 ++all: $(PROG) $(LIB)
    1.52 ++
    1.53 ++$(LIB): $(LIB_OBJS)
    1.54 ++	$(CXX) -shared -Wl,-soname -Wl,liblz.so.1 -o $(LIB) $(LIB_OBJS) -lz
    1.55 ++	$(CXX) $(LDFLAGS) -o lzma-shared $(SHARED_OBJS) liblz.so.1.0.0 $(LIB) $(LIB2)
    1.56 ++
    1.57 ++Wrapper.o: Wrapper.c
    1.58 ++	$(CXX_C) $(CFLAGS) Wrapper.c
    1.59 + 
    1.60 +-all: $(PROG)
    1.61 + 
    1.62 + $(PROG): $(OBJS)
    1.63 + 	$(CXX) -o $(PROG) $(LDFLAGS) $(OBJS) $(LIB) $(LIB2)
    1.64 +	
    1.65 +--- CPP/7zip/Compress/LZMA_Alone/lzlib.h
    1.66 ++++ CPP/7zip/Compress/LZMA_Alone/lzlib.h
    1.67 +@@ -0,0 +1,15 @@
    1.68 ++#ifndef LZLIB_H
    1.69 ++#define LZLIB_H
    1.70 ++#include <zlib.h>
    1.71 ++typedef struct {
    1.72 ++	int handlertype;
    1.73 ++	unsigned long lzsize;
    1.74 ++	int fd;
    1.75 ++	gzFile gzfd;
    1.76 ++} *lzFile;
    1.77 ++
    1.78 ++extern lzFile lzdopen(int fd, const char *mode);
    1.79 ++extern lzFile lzopen(const char *path, const char *mode);
    1.80 ++extern void *lzgrab(lzFile file, unsigned long *size);
    1.81 ++extern int lzclose(lzFile file);
    1.82 ++#endif
    1.83 +
    1.84 +--- CPP/7zip/Compress/LZMA_Alone/Wrapper.c
    1.85 ++++ CPP/7zip/Compress/LZMA_Alone/Wrapper.c
    1.86 +@@ -0,0 +1,119 @@
    1.87 ++#include <stdlib.h>
    1.88 ++#include <unistd.h>
    1.89 ++#include <sys/types.h>
    1.90 ++#include <sys/stat.h>
    1.91 ++#include <fcntl.h>
    1.92 ++#include "lzlib.h"
    1.93 ++#include "LzmaRamDecode.h"
    1.94 ++
    1.95 ++#define LZ_READ		0
    1.96 ++#define LZ_GZREAD	1
    1.97 ++#define LZ_LZREAD	2
    1.98 ++
    1.99 ++#define LZMA_PROP	0x5d
   1.100 ++
   1.101 ++static int fullread(int fd, unsigned char *buffer, size_t len)
   1.102 ++{
   1.103 ++	int i, n;
   1.104 ++	for (n = 0; (i = read(fd, buffer + n, len - n)) > 0; n += i);
   1.105 ++	return n;
   1.106 ++}
   1.107 ++
   1.108 ++lzFile lzdopen(int fd, const char *mode)
   1.109 ++{
   1.110 ++	unsigned char tmp[13];
   1.111 ++	int n;
   1.112 ++	lzFile lzfd;
   1.113 ++	
   1.114 ++	if (fd < 0) return NULL;
   1.115 ++	n = fullread(fd, tmp, sizeof(tmp));
   1.116 ++	lzfd = malloc(sizeof(*lzfd));
   1.117 ++	if (!lzfd) return NULL;
   1.118 ++	lzfd->handlertype = LZ_READ;
   1.119 ++	if (n == sizeof(tmp) && tmp[0] == LZMA_PROP && 
   1.120 ++	    !LzmaRamGetUncompressedSize(tmp-1, sizeof(tmp)+1, &lzfd->lzsize))
   1.121 ++	    	lzfd->handlertype = LZ_LZREAD;
   1.122 ++	else if (n > 2 && tmp[0] == 0x1F && tmp[1] == 0x8B)
   1.123 ++		lzfd->handlertype = LZ_GZREAD;
   1.124 ++	lzfd->fd = fd;
   1.125 ++	lseek(fd, 0, SEEK_SET);
   1.126 ++	if (lzfd->handlertype != LZ_LZREAD) {
   1.127 ++		if (lzfd->handlertype == LZ_GZREAD) {
   1.128 ++			lzfd->gzfd = gzdopen(fd, mode);
   1.129 ++			if (lzfd->gzfd == Z_NULL) {
   1.130 ++				free(lzfd);
   1.131 ++				return NULL;
   1.132 ++			}
   1.133 ++		}
   1.134 ++	}
   1.135 ++	return lzfd;
   1.136 ++}
   1.137 ++
   1.138 ++lzFile lzopen(const char *path, const char *mode)
   1.139 ++{
   1.140 ++	int fd = open(path, O_RDONLY);
   1.141 ++	return lzdopen(fd, mode);
   1.142 ++}
   1.143 ++
   1.144 ++static int lzread(lzFile file, void *buf, unsigned len)
   1.145 ++{
   1.146 ++	if (file->handlertype == LZ_GZREAD)
   1.147 ++		return gzread(file->gzfd, buf, len);
   1.148 ++	return read(file->fd, buf, len);
   1.149 ++}
   1.150 ++
   1.151 ++void *lzgrab(lzFile file, unsigned long *size)
   1.152 ++{
   1.153 ++	unsigned int n, max;
   1.154 ++	unsigned char *output;
   1.155 ++	
   1.156 ++	if (!file) return NULL;
   1.157 ++	if (file->handlertype == LZ_LZREAD) {
   1.158 ++		unsigned char *input;
   1.159 ++		size_t outsize;
   1.160 ++
   1.161 ++		output = malloc(file->lzsize + file->lzsize/20); // 105%
   1.162 ++		if (!output) return NULL;
   1.163 ++		output[0] = 0;
   1.164 ++		max = 1 + fullread(file->fd, output+1, file->lzsize);
   1.165 ++		input = realloc(output, max);
   1.166 ++		output = malloc(file->lzsize);
   1.167 ++		if (!output || LzmaRamDecompress(input, max,
   1.168 ++		     output, file->lzsize, &outsize, malloc, free)) {
   1.169 ++			if (output) free(output);
   1.170 ++			free(input);
   1.171 ++			return NULL;
   1.172 ++		}
   1.173 ++		free(input);
   1.174 ++		*size = outsize;
   1.175 ++		return output;
   1.176 ++	}
   1.177 ++	max = 16384;
   1.178 ++	output = malloc(max);
   1.179 ++	if (!output) return NULL;
   1.180 ++	*size = 0;
   1.181 ++	while ((n = lzread(file, output + *size, max - *size)) > 0) {
   1.182 ++		*size += n;
   1.183 ++		if (*size == max) {
   1.184 ++			output = realloc(output, max *= 2);
   1.185 ++			if (!output) return NULL;
   1.186 ++		}
   1.187 ++	}
   1.188 ++	if (n < 0) {
   1.189 ++		free(output);
   1.190 ++		return NULL;
   1.191 ++        }
   1.192 ++	return realloc(output, *size);
   1.193 ++}
   1.194 ++
   1.195 ++int lzclose(lzFile file)
   1.196 ++{
   1.197 ++	int status = -1;
   1.198 ++	if (file) {
   1.199 ++		if (file->handlertype == LZ_GZREAD)
   1.200 ++			status = gzclose(file->gzfd);
   1.201 ++		else	status = close(file->fd);
   1.202 ++		free(file);
   1.203 ++	}
   1.204 ++	return status;
   1.205 ++}