]> mj.ucw.cz Git - libucw.git/commitdiff
- lizard.c split into lizard.c and lizard-safe.c
authorRobert Spalek <robert@ucw.cz>
Tue, 15 Jun 2004 09:17:36 +0000 (09:17 +0000)
committerRobert Spalek <robert@ucw.cz>
Tue, 15 Jun 2004 09:17:36 +0000 (09:17 +0000)
- added LGPL header

lib/lizard.c
lib/lizard.h

index ad1a7897eca9ec0b58e725efa657d1d0fe2421a2..d707db3edec0b1daf58ec7c24dd4caa96710c450 100644 (file)
@@ -3,6 +3,9 @@
  *
  *     (c) 2004, Robert Spalek <robert@ucw.cz>
  *
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
+ *
  *     The file format is based on LZO1X and 
  *     the compression method is based on zlib.
  */
 #include "lib/lizard.h"
 
 #include <string.h>
-#include <stdlib.h>
-#include <sys/mman.h>
-#include <sys/user.h>
-#include <fcntl.h>
-#include <signal.h>
 
 typedef u16 hash_ptr_t;
 struct hash_record {
@@ -399,50 +397,6 @@ perform_copy_command:
   return out - out_start;
 }
 
-struct lizard_buffer *
-lizard_alloc(uns max_len)
-{
-  int fd = open("/dev/zero", O_RDWR);
-  if (fd < 0)
-    die("open(/dev/zero): %m");
-  struct lizard_buffer *buf = xmalloc(sizeof(struct lizard_buffer));
-  buf->len = (max_len + 2*PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE;
-  buf->ptr = mmap(NULL, buf->len, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
-  if (buf->ptr == MAP_FAILED)
-    die("mmap(/dev/zero): %m");
-  return buf;
-}
-
-void
-lizard_free(struct lizard_buffer *buf)
-{
-  munmap(buf->ptr, buf->len);
-  xfree(buf);
-}
-
-static void
-sigsegv_handler(int UNUSED whatsit)
-{
-  die("SIGSEGV caught when decompressing.");
-}
-
-int
-lizard_decompress_safe(byte *in, struct lizard_buffer *buf, uns expected_length)
-  /* Decompresses into buf->ptr and returns the length of the uncompressed
-   * file.  Negative return values signalise errors.  If something goes wrong
-   * and buffer would overflow, SIGSEGV is raised.  */
-{
-  uns lock_offset = (expected_length + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE;
-  if (lock_offset + PAGE_SIZE > buf->len)
-    return -1;
-  mprotect(buf->ptr, lock_offset, PROT_READ | PROT_WRITE);
-  mprotect(buf->ptr + lock_offset, PAGE_SIZE, PROT_READ);
-  sighandler_t old_handler = signal(SIGSEGV, sigsegv_handler);
-  int len = lizard_decompress(in, buf->ptr);
-  signal(SIGSEGV, old_handler);
-  return len;
-}
-
 /*
 
 Description of the LZO1X format :
index d0f8ba09c5c517bc15d60872af7d552699460d3f..52ddf8b397d9eeeb191b33504b15ad8a8c779151 100644 (file)
@@ -3,8 +3,8 @@
  *
  *     (c) 2004, Robert Spalek <robert@ucw.cz>
  *
- *     The file format is based on LZO1X and 
- *     the compression method is based on zlib.
+ *     This software may be freely distributed and used according to the terms
+ *     of the GNU Lesser General Public License.
  */
 
 #define        LIZARD_NEEDS_CHARS      8
    * total length is 2(header) + 2(link) + 19(string) = 23.
    */
 
+/* lizard.c */
 int lizard_compress(byte *in, uns in_len, byte *out);
 int lizard_decompress(byte *in, byte *out);
 
+/* lizard-safe.c */
 struct lizard_buffer {
   uns len;
   void *ptr;