--- crashme-2.4.orig/crashme.1
+++ crashme-2.4/crashme.1
@@ -1,4 +1,4 @@
-.TH CRASHME 1C LOCAL 
+.TH CRASHME 1 LOCAL 
 .SH NAME
 crashme \- test operating environment software robustness
 .SH SYNOPSIS
--- crashme-2.4.orig/debian/copyright
+++ crashme-2.4/debian/copyright
@@ -0,0 +1,25 @@
+This package was created by Jay Kominek <jkominek@debian.org> on Sunday
+the 7th of June, 1998.
+
+The copyright for crashme is as follows, taken verbatim from crashme.c:
+
+ *
+ *             COPYRIGHT (c) 1990-1994 BY        *
+ *  GEORGE J. CARRETTE, CONCORD, MASSACHUSETTS.  *
+ *             ALL RIGHTS RESERVED               *
+
+Permission to use, copy, modify, distribute and sell this software
+and its documentation for any purpose and without fee is hereby
+granted, provided that the above copyright notice appear in all copies
+and that both that copyright notice and this permission notice appear
+in supporting documentation, and that the name of the author
+not be used in advertising or publicity pertaining to distribution
+of the software without specific, written prior permission.
+
+THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HE BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
--- crashme-2.4.orig/debian/README.debian
+++ crashme-2.4/debian/README.debian
@@ -0,0 +1,23 @@
+                    _                    
+  ___ _ __ __ _ ___| |__  _ __ ___   ___ 
+ / __| '__/ _` / __| '_ \| '_ ` _ \ / _ \
+| (__| | | (_| \__ \ | | | | | | | |  __/
+ \___|_|  \__,_|___/_| |_|_| |_| |_|\___|
+                  ... for Debian!
+
+ So, you want to crash your computer, but pulling the processor out is
+getting boring? crashme is for you! crashme works by generating strings of
+random bytes, and then (here is the fun part) trying to execute the
+bytes!
+
+*** WARNING ***
+ If you run crashme, your system could very well crash. YOU COULD LOSE
+YOUR ALL OF YOUR DATA!!! I (Jay Kominek), the author of crashme, Debian,
+SPI and its officers take no responsibility if you lose data by running
+crashme. Note: crashme is installed into /usr/bin, world executable.
+Joe Random User could very well execute it and crash your system!
+
+
+  --- Jay Kominek
+       jkominek@debian.org
+       jfk@acm.org
--- crashme-2.4.orig/debian/compat
+++ crashme-2.4/debian/compat
@@ -0,0 +1 @@
+4
--- crashme-2.4.orig/debian/rules
+++ crashme-2.4/debian/rules
@@ -0,0 +1,46 @@
+#!/usr/bin/make -f
+# Originally generated by debmake, and then converted to use debhelper
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+CFLAGS = -Wall -g
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -O0
+else
+	CFLAGS += -O2
+endif
+
+build: crashme
+
+clean:
+	dh_testdir
+	dh_testroot
+
+	rm -f crashme
+
+	dh_clean
+
+binary-indep:
+# Nothing to do
+
+binary-arch:	build
+	dh_testdir
+	dh_testroot
+	dh_clean
+	dh_installdirs
+	dh_install crashme usr/bin
+	dh_installdocs crashme.html
+	dh_installman crashme.1
+	dh_installchangelogs
+	dh_strip
+	dh_compress
+	dh_fixperms
+	dh_installdeb
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary
--- crashme-2.4.orig/debian/control
+++ crashme-2.4/debian/control
@@ -0,0 +1,17 @@
+Source: crashme
+Section: devel
+Priority: optional
+Maintainer: Aurélien GÉRÔME <ag@roxor.cx>
+Standards-Version: 3.7.2
+Build-Depends: debhelper (>= 4)
+
+Package: crashme
+Architecture: any
+Depends: ${shlibs:Depends}
+Description: Stress tests operating system stability
+ crashme generates strings of random bytes and then attempts to execute
+ them. Used to test kernel stability.
+ .
+ **WARNING** While Linux has been known to survive days and weeks of crashme,
+ IT IS NOT GUARANTEED THAT YOUR SYSTEM WILL SURVIVE! DO NOT USE THIS PROGRAM
+ UNLESS YOU REALLY WANT TO CRASH YOUR COMPUTER
--- crashme-2.4.orig/debian/changelog
+++ crashme-2.4/debian/changelog
@@ -0,0 +1,75 @@
+crashme (2.4-9) unstable; urgency=low
+
+  * Adopt the package (Closes: #353388).
+  * Conform to policy with CFLAGS set to "-O2 -g -Wall".
+  * Fix resulting gcc warnings from turning on "-Wall".
+
+ -- Aurélien GÉRÔME <ag@roxor.cx>  Mon, 31 Jul 2006 14:41:43 +0200
+
+crashme (2.4-8) unstable; urgency=low
+
+  * QA upload.
+  * debian/postinst: Remove; /usr/doc already handled by the old prerm.
+  * debian/rules:
+    - Add support for DEB_BUILD_OPTIONS=noopt.
+    - Use dh_install.
+
+ -- Matej Vela <vela@debian.org>  Sun, 30 Jul 2006 22:14:56 +0200
+
+crashme (2.4-7) unstable; urgency=low
+
+  * QA upload.
+  * s/PAQUETE/crashme/g in postinst. Sorry 
+
+ -- Amaya Rodrigo Sastre <amaya@debian.org>  Wed, 12 Jul 2006 21:44:04 +0200
+
+crashme (2.4-6) unstable; urgency=low
+
+  * QA upload.
+  * This package is orphaned as of #353388, so setting the Maintainer field
+    accordingly to QA.
+  * Fix typo in package description (Closes: #363215).
+  * Get rid of the /usr/doc link (Closes: #359371).
+  * Stop echoing warnings and stuff on console in postinst. Debconf should be
+    used instead. Somebody please fix this.
+  * Bumped Standards version to 3.7.2. No changes needed.
+  * Fixed manual section 
+
+ -- Amaya Rodrigo Sastre <amaya@debian.org>  Wed, 12 Jul 2006 18:47:31 +0200
+
+crashme (2.4-5) unstable; urgency=low
+
+  * New maintainer (Closes: #81889)
+  * Bump up Standards-Version
+  * Add Build-Depends (Closes: #70344)
+  * Remove pddet from the package since it has no manpage and does not seem to
+    be useful, even for the build process.
+
+ -- Aaron Lehmann <aaronl@vitelus.com>  Wed, 10 Jan 2001 19:29:36 -0800
+
+crashme (2.4-4) unstable; urgency=low
+
+  * Replaced execl call with execlp. (Fixes bug #37304)
+  * Removed access to an obsolete structure member. (Fixes bug #37446)
+
+ -- Jay Kominek <jay.kominek@colorado.edu>  Tue, 25 May 1999 09:32:17 -0600
+
+crashme (2.4-3) unstable; urgency=low
+
+  * Switched binary-arch and binary-indep to what they should be.
+    (Fixes bug #25452)
+
+ -- Jay Kominek <jkominek@debian.org>  Thu,  6 Aug 1998 03:34:49 -0600
+
+crashme (2.4-2) unstable; urgency=low
+
+  * Changed extended package description to format sanely in dselect.
+    (Fixes bug #23666)
+
+ -- Jay Kominek <jkominek@debian.org>  Thu, 18 Jun 1998 02:57:30 -0400
+
+crashme (2.4-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Jay Kominek <jkominek@debian.org>  Sat,  6 Jun 1998 19:12:44 -0400
--- crashme-2.4.orig/crashme.c
+++ crashme-2.4/crashme.c
@@ -151,6 +151,8 @@
 #include <unistd.h>
 #endif
 
+#include <sys/wait.h>
+
 typedef void (*BADBOY)();
 
 BADBOY badboy;
@@ -260,10 +262,7 @@
 #else
  struct sigaction act;
  act.sa_handler = func;
- act.sa_mask = 0;
-#ifdef linux
- act.sa_restorer = 0;
-#endif /* linux */
+ bzero(&act.sa_mask,sizeof(sigset_t));
  act.sa_flags = SA_NOMASK;
 #ifdef SA_RESTART
  act.sa_flags |= SA_RESTART;
@@ -272,7 +271,7 @@
 #endif /* SA_ONESHOT */
 }
  
-set_up_signals()
+void set_up_signals()
 {my_signal(SIGILL,again_handler);
 #ifdef SIGTRAP
  my_signal(SIGTRAP,again_handler);
@@ -295,7 +294,7 @@
 
 #endif
 
-compute_badboy_1(n)
+void compute_badboy_1(n)
      long n;
 {long j;
  if (malloc_flag == 1)
@@ -347,7 +346,7 @@
 #endif
   return((BADBOY)dat);}
 
-compute_badboy()
+void compute_badboy()
 {long n;
  n = (nbytes < 0) ? - nbytes : nbytes;
  if (incptr == 0)
@@ -369,7 +368,7 @@
                          the_data,(nbytes < 0) ? - nbytes : nbytes);
 */
 
-try_one_crash()
+void try_one_crash()
 {if (nbytes > 0)
    (*badboy)();
  else if (nbytes == 0)
@@ -377,7 +376,7 @@
 
 char *subprocess_ind = "subprocess";
  
-main(argc,argv)
+int main(argc,argv)
      int argc; char **argv;
 {long nsubs,hrs,mns,scs,tflag,j,m;
  note_buffer = (char *) malloc(512);
@@ -411,21 +410,23 @@
     note(1);
     record_note();
     if (strchr(argv[4],':'))
-      {sscanf(argv[4],"%d:%d:%d",&hrs,&mns,&scs);
+      {sscanf(argv[4],"%ld:%ld:%ld",&hrs,&mns,&scs);
        tflag = 1;
        nsubs = (((hrs * 60) + mns) * 60) + scs;
-       sprintf(notes,"Subprocess run for %d seconds (%d %02d:%02d:%02d)",
+       sprintf(notes,"Subprocess run for %ld seconds (%ld %02ld:%02ld:%02ld)",
 	       nsubs, hrs / 24, hrs % 24,mns,scs);}
     else
       {tflag = 0;
        nsubs = atol(argv[4]);
-       sprintf(notes,"Creating %d crashme subprocesses",nsubs);}
+       sprintf(notes,"Creating %ld crashme subprocesses",nsubs);}
     note(1);
     vfork_main(tflag,nsubs,argv[0],argv[1],atol(argv[2]),argv[3]);}
  else
    {sprintf(notes,
 	    "crashme [+]<nbytes>[.inc] <srand> <ntrys> [nsub] [verbose]");
-    note(0);}}
+    note(0);}
+ return 0;
+}
 
 void copyright_note(n)
      long n;
@@ -440,19 +441,19 @@
 {char *ptr;
  copyright_note(3);
  nbytes = atol(argv[1]);
- if (ptr = strchr(argv[1],'.'))
+ if ((ptr = strchr(argv[1],'.')))
    incptr = atol(&ptr[1]);
  if (argv[1][0] == '+') malloc_flag = 1;
  nseed = atol(argv[2]);
  ntrys = atol(argv[3]);
- sprintf(notes,"crashme %s%ld.%d %ld %ld",
+ sprintf(notes,"crashme %s%ld.%ld %ld %ld",
 	 (malloc_flag == 0) ? "" : "+",nbytes,incptr,nseed,ntrys);
  note(3);
  record_note();
  if (malloc_flag == 0)
    {the_data = bad_malloc((nbytes < 0) ? -nbytes : nbytes);
     badboy = castaway(the_data);
-    sprintf(notes,"Badboy at %d. 0x%X",badboy,badboy);
+    sprintf(notes,"Badboy at %d. 0x%X",(int) badboy,(unsigned int) badboy);
     note(3);}
  srand(nseed);
 #ifdef WIN32
@@ -481,9 +482,9 @@
  for(i=0;i<ntrys;++i)
    {compute_badboy();
     if (offset)
-      sprintf(notes,"try %d, offset %d",i,offset);
+      sprintf(notes,"try %d, offset %ld",i,offset);
     else if (malloc_flag == 1)
-      sprintf(notes,"try %d, Badboy at %d. 0x%X",i,badboy,badboy);
+      sprintf(notes,"try %d, Badboy at %d. 0x%X",i,(int) badboy,(unsigned int) badboy);
     else
       sprintf(notes,"try %d",i);
     note(5);
@@ -514,7 +515,7 @@
 
 struct status_list *slist = NULL;
 
-record_status(n)
+int record_status(n)
      long n;
 {struct status_list *l;
  for(l=slist;l != NULL; l = l->next)
@@ -527,13 +528,13 @@
  slist = l;
  return(1);}
 
-summarize_status()
+void summarize_status()
 {struct status_list *l;
  sprintf(notes,"exit status ... number of cases");
  note(2);
  for(l=slist;l != NULL; l = l->next)
    {sprintf(notes,"exit status ... number of cases");
-    sprintf(notes,"%11d ... %5d",l->status,l->count);
+    sprintf(notes,"%11ld ... %5ld",l->status,l->count);
     note(2);}}
 
 #ifndef WIN32
@@ -552,7 +553,7 @@
  if (monitor_active)
    {++monitor_count;
     if (monitor_count >= monitor_limit)
-      {sprintf(notes,"time limit reached on pid %d 0x%X. using kill.",
+      {sprintf(notes,"time limit reached on pid %ld 0x%lX. using kill.",
 	       monitor_pid,monitor_pid);
        note(3);
        status = kill(monitor_pid,SIGKILL);
@@ -581,24 +582,24 @@
    {my_signal(SIGALRM,monitor_fcn);
     alarm(monitor_period);}
  time(&before_time);
- sprintf(arg5,"%d",verbose_level);
+ sprintf(arg5,"%ld",verbose_level);
  for(j=0;j<n;++j)
-   {sprintf(arg2,"%d",sr+j);
-    sprintf(arg4,"%d",j+1);
+   {sprintf(arg2,"%ld",sr+j);
+    sprintf(arg4,"%ld",j+1);
 #ifdef VMS
     status = vfork();
 #else
     status = fork();
 #endif
     if (status == 0)
-      {status = execl(cmd,cmd,nb,arg2,nt,arg4,arg5,subprocess_ind,0);
+      {status = execlp(cmd,cmd,nb,arg2,nt,arg4,arg5,subprocess_ind,NULL);
        if (status == -1)
 	 {perror(cmd);
 	  exit(1);}}
     else if (status < 0)
       perror(cmd);
     else
-      {sprintf(notes,"pid = %d 0x%X (subprocess %d)",status,status,j+1);
+      {sprintf(notes,"pid = %d 0x%X (subprocess %ld)",status,status,j+1);
        note(3);
        if (seq == 1)
 	 {monitor_pid = status;
@@ -606,19 +607,19 @@
 	  monitor_active = 1;
 	  while((pid = wait(&status)) > 0)
 	    {monitor_active = 0;
-	     sprintf(notes,"pid %d 0x%X exited with status %d",pid,pid,status);
+	     sprintf(notes,"pid %ld 0x%lX exited with status %d",pid,pid,status);
 	     note(3);
 	     record_status(status);}}
        if (tflag == 1)
 	 {time(&after_time);
 	  total_time = after_time - before_time;
 	  if (total_time >= nsubs)
-	    {sprintf(notes,"Time limit reached after run %d",j+1);
+	    {sprintf(notes,"Time limit reached after run %ld",j+1);
 	     note(2);
 	     break;}}}}
  if (seq == 0)
    while((pid = wait(&status)) > 0)
-     {sprintf(notes,"pid %d 0x%X exited with status %d",pid,pid,status);
+     {sprintf(notes,"pid %ld 0x%lX exited with status %d",pid,pid,status);
       note(3);
       record_status(status);}
  time(&after_time);
@@ -632,7 +633,7 @@
  hrs = hrs % 24;
  open_record();
  sprintf(notes,
-	 "Test complete, total real time: %d seconds (%d %02d:%02d:%02d)",
+	 "Test complete, total real time: %ld seconds (%ld %02ld:%02ld:%02ld)",
 	 total_time,dys,hrs,mns,scs);
  note(1);
  summarize_status();
