diff --git a/src/cpp.c b/src/cpp.c index 199cc5faa56211cf6e7cd223c6b3f390f77a164e..6a661151e563ff9030fa5c88359b7cc02e3f3345 100644 --- a/src/cpp.c +++ b/src/cpp.c @@ -5,7 +5,7 @@ \*/ /* - * $Id: cpp.c,v 1.47 1999/03/02 03:39:17 grubba Exp $ + * $Id: cpp.c,v 1.48 1999/03/08 23:35:03 grubba Exp $ */ #include "global.h" #include "language.h" @@ -463,7 +463,7 @@ while(1) \ }while(1) static INT32 low_cpp(struct cpp *this, void *data, INT32 len, int shift, - int flags); + int flags, int auto_convert, struct pike_string *charset); #define SHIFT 0 #include "preprocessor.h" @@ -478,15 +478,18 @@ static INT32 low_cpp(struct cpp *this, void *data, INT32 len, int shift, #undef SHIFT static INT32 low_cpp(struct cpp *this, void *data, INT32 len, int shift, - int flags) + int flags, int auto_convert, struct pike_string *charset) { switch(shift) { case 0: - return lower_cpp0(this, (p_wchar0 *)data, len, flags); + return lower_cpp0(this, (p_wchar0 *)data, len, + flags, auto_convert, charset); case 1: - return lower_cpp1(this, (p_wchar1 *)data, len, flags); + return lower_cpp1(this, (p_wchar1 *)data, len, + flags, auto_convert, charset); case 2: - return lower_cpp2(this, (p_wchar2 *)data, len, flags); + return lower_cpp2(this, (p_wchar2 *)data, len, + flags, auto_convert, charset); default: fatal("low_cpp(): Bad shift: %d\n", shift); } @@ -1039,6 +1042,7 @@ void f_cpp(INT32 args) struct svalue *save_sp = sp - args; struct cpp this; int auto_convert = 0; + struct pike_string *charset = NULL; if(args<1) error("Too few arguments to cpp()\n"); @@ -1056,9 +1060,9 @@ void f_cpp(INT32 args) if (args > 2) { if (sp[2-args].type == T_STRING) { - stack_dup(); + charset = sp[2 - args].u.string; ref_push_string(data); - stack_swap(); + ref_push_string(charset); SAFE_APPLY_MASTER("decode_charset", 2); if (sp[-1].type != T_STRING) { error("Unknown charset\n"); @@ -1123,7 +1127,8 @@ void f_cpp(INT32 args) this.current_file->size_shift, &this.buf); string_builder_putchar(&this.buf, '\n'); - low_cpp(&this, data->str, data->len, data->size_shift, 0); + low_cpp(&this, data->str, data->len, data->size_shift, + 0, auto_convert, charset); if(this.defines) free_hashtable(this.defines, free_one_define);