diff --git a/src/module_support.c b/src/module_support.c
index 91507758a2aca17b59959ff3b73c6b379e443492..a4202915ff2ed96957b1b4940386d043a91c8bbc 100644
--- a/src/module_support.c
+++ b/src/module_support.c
@@ -6,7 +6,7 @@
 #include "pike_types.h"
 #include "error.h"
 
-RCSID("$Id: module_support.c,v 1.34 2000/07/28 17:16:55 hubbe Exp $");
+RCSID("$Id: module_support.c,v 1.35 2000/08/11 13:35:00 grubba Exp $");
 
 /* Checks that args_to_check arguments are OK.
  * Returns 1 if everything worked ok, zero otherwise.
@@ -171,13 +171,20 @@ int va_get_args(struct svalue *s,
       if(s->type == T_INT)
 	 *va_arg(ap, int *)=s->u.integer;
       else if(s->type == T_FLOAT)
-        *va_arg(ap, int *)=(int)s->u.float_number;
+        *va_arg(ap, int *)=
+	  DO_NOT_WARN((int)s->u.float_number);
       else 
       {
         push_text( "int" );
         push_svalue( s );
         f_cast( );
-        *va_arg(ap, int *)=sp[-1].u.integer;
+	if(sp[-1].type == T_INT)
+	  *va_arg(ap, int *)=sp[-1].u.integer;
+	else if(s->type == T_FLOAT)
+	  *va_arg(ap, int *)=
+	    DO_NOT_WARN((int)sp[-1].u.float_number);
+	else
+	  error("Cast to int failed.\n");
         pop_stack();
       }
       break;
@@ -185,13 +192,19 @@ int va_get_args(struct svalue *s,
       if(s->type == T_INT)
 	 *va_arg(ap, INT_TYPE *)=s->u.integer;
       else if(s->type == T_FLOAT)
-        *va_arg(ap, INT_TYPE *)=(int)s->u.float_number;
+        *va_arg(ap, INT_TYPE *)=(INT_TYPE)s->u.float_number;
       else 
       {
         push_text( "int" );
         push_svalue( s );
         f_cast( );
-        *va_arg(ap, INT_TYPE *)=sp[-1].u.integer;
+	if(sp[-1].type == T_INT)
+	  *va_arg(ap, INT_TYPE *)=sp[-1].u.integer;
+	else if(s->type == T_FLOAT)
+	  *va_arg(ap, INT_TYPE *)=
+	    DO_NOT_WARN((INT_TYPE)sp[-1].u.float_number);
+	else
+	  error("Cast to int failed.\n");
         pop_stack();
       }
       break;
@@ -311,7 +324,7 @@ PMOD_EXPORT void get_all_args(char *fname, INT32 args, char *format,  ... )
   va_start(ptr, format);
   ret=va_get_args(sp-args, args, format, ptr);
   va_end(ptr);
-  if((long)ret*2 != (long)strlen(format)) {
+  if((ptrdiff_t)ret*2 != (ptrdiff_t)strlen(format)) {
     char *expected_type;
     switch(format[ret*2+1]) {
     case 'd': case 'i': expected_type = "int"; break;
@@ -338,7 +351,7 @@ PMOD_EXPORT void get_all_args(char *fname, INT32 args, char *format,  ... )
 	sp+ret-args,
 	"Bad argument %d to %s(). Expected %s\n",
 	ret+1, fname, expected_type);
-    } else if ((long)(args*2) < (long)strlen(format)) {
+    } else if ((ptrdiff_t)(args*2) < (ptrdiff_t)strlen(format)) {
       bad_arg_error(
 	fname, sp-args, args,
 	ret+1,
diff --git a/src/pike_memory.h b/src/pike_memory.h
index 7e3c7bc4eec1ed0ce489c3c7fb439658fb164ca8..8998c0a58f192670326b1650ef48883d765b94a0 100644
--- a/src/pike_memory.h
+++ b/src/pike_memory.h
@@ -5,7 +5,7 @@
 \*/
 
 /*
- * $Id: pike_memory.h,v 1.18 2000/08/11 13:25:03 grubba Exp $
+ * $Id: pike_memory.h,v 1.19 2000/08/11 13:27:01 grubba Exp $
  */
 #ifndef MEMORY_H
 #define MEMORY_H
@@ -33,7 +33,7 @@ struct mem_searcher
 {
   enum methods method;
   char *needle;
-  SIZE_T needlelen;
+  size_t needlelen;
   unsigned INT32 hsize, max;
   struct link links[MEMSEARCH_LINKS];
   struct link *set[MEMSEARCH_LINKS];