diff --git a/src/modules/files/file.c b/src/modules/files/file.c index ed749d1179be89c191ec6b752ced167dc2189263..0d744e12cd07ba18fea8593d0f55ab9e66590d4c 100644 --- a/src/modules/files/file.c +++ b/src/modules/files/file.c @@ -2,12 +2,12 @@ || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information. -|| $Id: file.c,v 1.318 2004/04/14 11:34:02 grubba Exp $ +|| $Id: file.c,v 1.319 2004/05/13 22:15:12 nilsson Exp $ */ #define NO_PIKE_SHORTHAND #include "global.h" -RCSID("$Id: file.c,v 1.318 2004/04/14 11:34:02 grubba Exp $"); +RCSID("$Id: file.c,v 1.319 2004/05/13 22:15:12 nilsson Exp $"); #include "fdlib.h" #include "pike_netlib.h" #include "interpret.h" @@ -1060,28 +1060,28 @@ static void file_write(INT32 args) ptrdiff_t written, i; struct pike_string *str; - if(args<1 || ((Pike_sp[-args].type != PIKE_T_STRING) && (Pike_sp[-args].type != PIKE_T_ARRAY))) - Pike_error("Bad argument 1 to file->write().\n" - "Type is %s. Expected string or array(string)\n", - get_name_of_type(Pike_sp[-args].type)); + if(args<1 || ((Pike_sp[-args].type != PIKE_T_STRING) && + (Pike_sp[-args].type != PIKE_T_ARRAY))) + SIMPLE_BAD_ARG_ERROR("Stdio.File->write()", 1, "string|array(string)"); if(FD < 0) Pike_error("File not open for write.\n"); if (Pike_sp[-args].type == PIKE_T_ARRAY) { struct array *a = Pike_sp[-args].u.array; + + if(a->type_field & ~BIT_STRING) { + array_fix_type_field(a); + if(a->type_field & ~BIT_STRING) + SIMPLE_BAD_ARG_ERROR("Stdio.File->write()", 1, "string|array(string)"); + } + i = a->size; - while(i--) { - if (a->item[i].type != PIKE_T_STRING) { + while(i--) + if (a->item[i].u.string->size_shift) Pike_error("Bad argument 1 to file->write().\n" - "Element %ld is not a string.\n", - DO_NOT_WARN((long)i)); - } else if (a->item[i].u.string->size_shift) { - Pike_error("Bad argument 1 to file->write().\n" - "Element %ld is a wide string.\n", - DO_NOT_WARN((long)i)); - } - } + "Element %ld is a wide string.\n", + DO_NOT_WARN((long)i)); #ifdef HAVE_WRITEV if (args > 1) { @@ -1308,7 +1308,7 @@ static void file_write_oob(INT32 args) struct pike_string *str; if(args<1 || Pike_sp[-args].type != PIKE_T_STRING) - Pike_error("Bad argument 1 to file->write().\n"); + SIMPLE_BAD_ARG_ERROR("Stdio.File->write_oob()",1,"string"); if(args > 1) {