]> mj.ucw.cz Git - libucw.git/commitdiff
adapted to the new version of sighandler.c
authorRobert Spalek <robert@ucw.cz>
Thu, 24 Jun 2004 12:30:38 +0000 (12:30 +0000)
committerRobert Spalek <robert@ucw.cz>
Thu, 24 Jun 2004 12:30:38 +0000 (12:30 +0000)
lib/lizard-safe.c
lib/lizard.h

index 6d0b10c952b585e0cd93cf9bd24583f53fd9fb67..e265e96a7f647169facb7aebff3632c8efa1a5cd 100644 (file)
@@ -28,7 +28,8 @@ lizard_alloc(uns max_len)
     die("mmap(anonymous): %m");
   if (mprotect(buf->start + buf->len, PAGE_SIZE, PROT_NONE) < 0)
     die("mprotect: %m");
-  buf->old_sigsegv_handler = handle_signal(SIGSEGV);
+  buf->old_sigsegv_handler = xmalloc(sizeof(struct sigaction));
+  handle_signal(SIGSEGV, buf->old_sigsegv_handler);
   return buf;
 }
 
@@ -36,16 +37,18 @@ void
 lizard_free(struct lizard_buffer *buf)
 {
   munmap(buf->start, buf->len + PAGE_SIZE);
-  signal(SIGSEGV, buf->old_sigsegv_handler);
+  sigaction(SIGSEGV, buf->old_sigsegv_handler, NULL);
+  xfree(buf->old_sigsegv_handler);
   xfree(buf);
 }
 
 static jmp_buf safe_decompress_jump;
-static void
-sigsegv_handler(void)
+static int
+sigsegv_handler(int signal UNUSED)
 {
   log(L_ERROR, "SIGSEGV caught in lizard_decompress()");
   longjmp(safe_decompress_jump, 1);
+  return 1;
 }
 
 int
@@ -61,7 +64,7 @@ lizard_decompress_safe(byte *in, struct lizard_buffer *buf, uns expected_length)
     errno = EFBIG;
     return -1;
   }
-  volatile my_sighandler_t old_handler = signal_handler[SIGSEGV];
+  volatile sh_sighandler_t old_handler = signal_handler[SIGSEGV];
   signal_handler[SIGSEGV] = sigsegv_handler;
   int len, err;
   if (!setjmp(safe_decompress_jump))
index 35200c08232049a92d6dfacaeca45fee5a87eba2..fc3631ac1103f829263fced390c8281a3cffba8b 100644 (file)
@@ -28,10 +28,11 @@ int lizard_compress(byte *in, uns in_len, byte *out);
 int lizard_decompress(byte *in, byte *out);
 
 /* lizard-safe.c */
+struct sigaction;
 struct lizard_buffer {
   uns len;
   void *start, *ptr;
-  void *old_sigsegv_handler;
+  struct sigaction *old_sigsegv_handler;
 };
 
 struct lizard_buffer *lizard_alloc(uns max_len);