some fixes: calloc was wrong; catch traps, and let divides
authorceriel <none@none>
Mon, 20 Feb 1989 18:01:33 +0000 (18:01 +0000)
committerceriel <none@none>
Mon, 20 Feb 1989 18:01:33 +0000 (18:01 +0000)
by 0 generate a signal, if on a unix machine

lang/cem/libcc/gen/calloc.c
lang/cem/libcc/gen/head_cc.e
lang/cem/libcc/gen/rename.c [new file with mode: 0644]

index 23262d4..a63e3f2 100644 (file)
@@ -1,5 +1,5 @@
 /* $Header$ */
-#define ALIGN(sz)      (((sz) + (sizeof(long) - 1) / sizeof(long)) * sizeof(long))
+#define ALIGN(sz)      ((((sz) + (sizeof(long) - 1)) / sizeof(long)) * sizeof(long))
 char *
 calloc(nelem, elsize)
        unsigned int nelem, elsize;
index 44f06dc..e1e9c17 100644 (file)
@@ -1,4 +1,5 @@
 #
+#include "em_abs.h"
 /*
  * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
  *
@@ -43,6 +44,11 @@ _penvp
  loi EM_PSIZE
  lae _penvp
  sti EM_PSIZE
+#if unix && ! (em22 || em24 || em44)
+ lpi $_ctch_
+ sig
+ asp EM_PSIZE
+#endif
  lal EM_WSIZE+EM_PSIZE
  loi EM_PSIZE
  lal EM_WSIZE
@@ -54,3 +60,31 @@ _penvp
  lfr EM_WSIZE
  cal $exit
  end
+
+#if unix && ! (em22 || em24 || em44)
+ exp $_ctch_
+ pro $_ctch_,0
+ lol 0
+ loc EIDIVZ
+ beq *1
+ lol 0
+ loc EFDIVZ
+ beq *1
+ bra *2
+2
+ lol 0
+ trp
+ bra *3
+1
+ loc 8
+ cal $getpid
+ lfr EM_WSIZE
+ cal $kill
+ asp 2*EM_WSIZE
+3
+ lpi $_ctch_
+ sig
+ asp EM_WSIZE
+ rtt
+ end 0
+#endif
diff --git a/lang/cem/libcc/gen/rename.c b/lang/cem/libcc/gen/rename.c
new file mode 100644 (file)
index 0000000..f703e45
--- /dev/null
@@ -0,0 +1,9 @@
+int
+rename(from, to)
+       char *from, *to;
+{
+       (void) unlink(to);
+       if (link(from, to) < 0) return -1;
+       (void) unlink(from);
+       return 0;
+}