From 7bfa4fee51fa6aaa2b33be6e72da9c8597bb7eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?= <grubba@grubba.org> Date: Tue, 9 Mar 1999 01:07:51 +0100 Subject: [PATCH] Fixed a few warnings. Rev: src/cpp.c:1.49 --- src/cpp.c | 780 +++++++++++++++++++++++++++--------------------------- 1 file changed, 390 insertions(+), 390 deletions(-) diff --git a/src/cpp.c b/src/cpp.c index 6a661151e5..0a8f9fe921 100644 --- a/src/cpp.c +++ b/src/cpp.c @@ -5,7 +5,7 @@ \*/ /* - * $Id: cpp.c,v 1.48 1999/03/08 23:35:03 grubba Exp $ + * $Id: cpp.c,v 1.49 1999/03/09 00:07:51 grubba Exp $ */ #include "global.h" #include "language.h" @@ -462,299 +462,6 @@ while(1) \ break; \ }while(1) -static INT32 low_cpp(struct cpp *this, void *data, INT32 len, int shift, - int flags, int auto_convert, struct pike_string *charset); - -#define SHIFT 0 -#include "preprocessor.h" -#undef SHIFT - -#define SHIFT 1 -#include "preprocessor.h" -#undef SHIFT - -#define SHIFT 2 -#include "preprocessor.h" -#undef SHIFT - -static INT32 low_cpp(struct cpp *this, void *data, INT32 len, int shift, - int flags, int auto_convert, struct pike_string *charset) -{ - switch(shift) { - case 0: - return lower_cpp0(this, (p_wchar0 *)data, len, - flags, auto_convert, charset); - case 1: - return lower_cpp1(this, (p_wchar1 *)data, len, - flags, auto_convert, charset); - case 2: - return lower_cpp2(this, (p_wchar2 *)data, len, - flags, auto_convert, charset); - default: - fatal("low_cpp(): Bad shift: %d\n", shift); - } -} - -void free_one_define(struct hash_entry *h) -{ - int e; - struct define *d=BASEOF(h, define, link); - - for(e=0;e<d->num_parts;e++) - free_string(d->parts[e].postfix); - if(d->first) - free_string(d->first); - free((char *)d); -} - -/*** Magic defines ***/ -static void insert_current_line(struct cpp *this, - struct define *def, - struct define_argument *args, - struct string_builder *tmp) -{ - char buf[20]; - sprintf(buf," %ld ",(long)this->current_line); - string_builder_binary_strcat(tmp, buf, strlen(buf)); -} - -static void insert_current_file_as_string(struct cpp *this, - struct define *def, - struct define_argument *args, - struct string_builder *tmp) -{ - PUSH_STRING_SHIFT(this->current_file->str, this->current_file->len, - this->current_file->size_shift, tmp); -} - -static void insert_current_time_as_string(struct cpp *this, - struct define *def, - struct define_argument *args, - struct string_builder *tmp) -{ - /* FIXME: Is this code safe? */ - time_t tmp2; - char *buf; - time(&tmp2); - buf=ctime(&tmp2); - - PUSH_STRING0(buf+11, 8, tmp); -} - -static void insert_current_date_as_string(struct cpp *this, - struct define *def, - struct define_argument *args, - struct string_builder *tmp) -{ - /* FIXME: Is this code safe? */ - time_t tmp2; - char *buf; - time(&tmp2); - buf=ctime(&tmp2); - - PUSH_STRING0(buf+19, 5, tmp); - PUSH_STRING0(buf+4, 6, tmp); -} - -static void check_defined(struct cpp *this, - struct define *def, - struct define_argument *args, - struct string_builder *tmp) -{ - struct pike_string *s; - switch(args[0].arg.shift) { - case 0: - s=binary_findstring((p_wchar0 *)args[0].arg.ptr, args[0].len); - break; - case 1: - s=binary_findstring1((p_wchar1 *)args[0].arg.ptr, args[0].len); - break; - case 2: - s=binary_findstring2((p_wchar2 *)args[0].arg.ptr, args[0].len); - break; - default: - fatal("cpp(): Symbol has unsupported shift: %d\n", args[0].arg.shift); - break; - } - if(s && find_define(s)) - { - string_builder_binary_strcat(tmp, " 1 ", 3); - }else{ - string_builder_binary_strcat(tmp, " 0 ", 3); - } -} - -static void dumpdef(struct cpp *this, - struct define *def, - struct define_argument *args, - struct string_builder *tmp) -{ - struct pike_string *s; - struct define *d; - - switch(args[0].arg.shift) { - case 0: - s=binary_findstring((p_wchar0 *)args[0].arg.ptr, args[0].len); - break; - case 1: - s=binary_findstring1((p_wchar1 *)args[0].arg.ptr, args[0].len); - break; - case 2: - s=binary_findstring2((p_wchar2 *)args[0].arg.ptr, args[0].len); - break; - default: - fatal("cpp(): Bad shift in macroname: %d\n", args[0].arg.shift); - break; - } - if(s && (d=find_define(s))) - { - int e; - char buffer[42]; - PUSH_STRING_SHIFT(d->link.s->str, d->link.s->len, - d->link.s->size_shift, tmp); - if(d->magic) - { - string_builder_binary_strcat(tmp, " defined magically ", 19); - }else{ - string_builder_binary_strcat(tmp, " defined as ", 12); - - if(d->first) - PUSH_STRING_SHIFT(d->first->str, d->first->len, - d->first->size_shift, tmp); - for(e=0;e<d->num_parts;e++) - { - if(!(d->parts[e].argument & DEF_ARG_NOPRESPACE)) - string_builder_putchar(tmp, ' '); - - if(d->parts[e].argument & DEF_ARG_STRINGIFY) - string_builder_putchar(tmp, '#'); - - sprintf(buffer,"%ld",(long)(d->parts[e].argument & DEF_ARG_MASK)); - string_builder_binary_strcat(tmp, buffer, strlen(buffer)); - - if(!(d->parts[e].argument & DEF_ARG_NOPOSTSPACE)) - string_builder_putchar(tmp, ' '); - - PUSH_STRING_SHIFT(d->parts[e].postfix->str, d->parts[e].postfix->len, - d->parts[e].postfix->size_shift, tmp); - } - } - }else{ - string_builder_binary_strcat(tmp, " 0 ", 3); - } -} - -static int do_safe_index_call(struct pike_string *s); - -static void check_constant(struct cpp *this, - struct define *def, - struct define_argument *args, - struct string_builder *tmp) -{ - struct svalue *save_stack=sp; - struct svalue *sv; - PCHARP data=args[0].arg; - int res,dlen,len=args[0].len; - struct pike_string *s; - int c; - - while(len && ((c = EXTRACT_PCHARP(data))< 256) && isspace(c)) { - INC_PCHARP(data, 1); - len--; - } - - if(!len) - cpp_error(this,"#if constant() with empty argument.\n"); - - for(dlen=0;dlen<len;dlen++) - if(!isidchar(INDEX_PCHARP(data, dlen))) - break; - - s = begin_wide_shared_string(dlen, data.shift); - MEMCPY(s->str, data.ptr, dlen<<data.shift); - push_string(end_shared_string(s)); -#ifdef PIKE_DEBUG - s = NULL; -#endif /* PIKE_DEBUG */ - if((sv=low_mapping_string_lookup(get_builtin_constants(), - sp[-1].u.string))) - { - pop_stack(); - push_svalue(sv); - res=1; - }else if(get_master()) { - ref_push_string(this->current_file); - SAFE_APPLY_MASTER("resolv",2); - - res=(throw_value.type!=T_STRING) && - (!(IS_ZERO(sp-1) && sp[-1].subtype == NUMBER_UNDEFINED)); - }else{ - res=0; - } - - while(1) - { - INC_PCHARP(data, dlen); - len-=dlen; - - while(len && ((c = EXTRACT_PCHARP(data)) < 256) && isspace(c)) { - INC_PCHARP(data, 1); - len--; - } - - if(!len) break; - - if(EXTRACT_PCHARP(data) == '.') - { - INC_PCHARP(data, 1); - len--; - - while(len && ((c = EXTRACT_PCHARP(data)) < 256) && isspace(c)) { - INC_PCHARP(data, 1); - len--; - } - - for(dlen=0; dlen<len; dlen++) - if(!isidchar(INDEX_PCHARP(data, dlen))) - break; - - if(res) - { - struct pike_string *s = begin_wide_shared_string(dlen, data.shift); - MEMCPY(s->str, data.ptr, dlen<<data.shift); - s = end_shared_string(s); - res=do_safe_index_call(s); - free_string(s); - } - }else{ - cpp_error(this, "Garbage characters in constant()\n"); - } - } - - pop_n_elems(sp-save_stack); - - string_builder_binary_strcat(tmp, res?" 1 ":" 0 ", 3); -} - - -static int do_safe_index_call(struct pike_string *s) -{ - int res; - JMP_BUF recovery; - if(!s) return 0; - - if (SETJMP(recovery)) { - res = 0; - } else { - ref_push_string(s); - f_index(2); - - res=!(IS_ZERO(sp-1) && sp[-1].subtype == NUMBER_UNDEFINED); - } - UNSETJMP(recovery); - return res; -} - static struct pike_string *recode_string(struct pike_string *data) { /* Observations: @@ -912,126 +619,419 @@ static struct pike_string *recode_string(struct pike_string *data) return data; } - p += CONSTANT_STRLEN("charset") + 1; + p += CONSTANT_STRLEN("charset") + 1; + + while (*p && isspace(*((unsigned char *)p))) { + p++; + } + + if (!*p) { + pop_stack(); + return data; + } + + /* Build a string of the trailing data + * NOTE: + * Keep the newline, so the linenumber info stays correct. + */ + + new_str = begin_shared_string(data->len - len); + + MEMCPY(new_str->str, data->str + len, data->len - len); + + push_string(end_shared_string(new_str)); + + stack_swap(); + + /* Build a string of the charset name */ + + p2 = p; + while(*p2 && !isspace(*((unsigned char *)p2))) { + p2++; + } + + len = p2 - p; + + new_str = begin_shared_string(len); + + MEMCPY(new_str->str, p, len); + + pop_stack(); + push_string(end_shared_string(new_str)); + + /* Decode the string */ + + SAFE_APPLY_MASTER("decode_charset", 2); + + if (sp[-1].type != T_STRING) { + pop_stack(); + return data; + } + + /* Accept the new string */ + + free_string(data); + add_ref(data = sp[-1].u.string); + pop_stack(); + } + return data; +} + +static struct pike_string *filter_bom(struct pike_string *data) +{ + /* More notes: + * + * * Character 0xfeff (ZERO WIDTH NO-BREAK SPACE = BYTE ORDER MARK = BOM) + * needs to be filtered away before processing continues. + */ + int i; + int j = 0; + int len = data->len; + struct string_builder buf; + + /* Add an extra reference to data here, since we may return it as is. */ + add_ref(data); + + if (!data->size_shift) { + return(data); + } + + init_string_builder(&buf, data->size_shift); + if (data->size_shift == 1) { + /* 16 bit string */ + p_wchar1 *ptr = STR1(data); + for(i = 0; i<len; i++) { + if (ptr[i] == 0xfeff) { + if (i != j) { + string_builder_append(&buf, MKPCHARP(ptr + j, 1), i - j); + j = i+1; + } + } + } + if ((j) && (i != j)) { + /* Add the trailing string */ + string_builder_append(&buf, MKPCHARP(ptr + j, 1), i - j); + free_string(data); + data = finish_string_builder(&buf); + } else { + /* String didn't contain 0xfeff */ + free_string_builder(&buf); + } + } else { + /* 32 bit string */ + p_wchar2 *ptr = STR2(data); + for(i = 0; i<len; i++) { + if (ptr[i] == 0xfeff) { + if (i != j) { + string_builder_append(&buf, MKPCHARP(ptr + j, 2), i - j); + j = i+1; + } + } + } + if ((j) && (i != j)) { + /* Add the trailing string */ + string_builder_append(&buf, MKPCHARP(ptr + j, 2), i - j); + free_string(data); + data = finish_string_builder(&buf); + } else { + /* String didn't contain 0xfeff */ + free_string_builder(&buf); + } + } + return(data); +} + +static INT32 low_cpp(struct cpp *this, void *data, INT32 len, int shift, + int flags, int auto_convert, struct pike_string *charset); + +#define SHIFT 0 +#include "preprocessor.h" +#undef SHIFT + +#define SHIFT 1 +#include "preprocessor.h" +#undef SHIFT + +#define SHIFT 2 +#include "preprocessor.h" +#undef SHIFT + +static INT32 low_cpp(struct cpp *this, void *data, INT32 len, int shift, + int flags, int auto_convert, struct pike_string *charset) +{ + switch(shift) { + case 0: + return lower_cpp0(this, (p_wchar0 *)data, len, + flags, auto_convert, charset); + case 1: + return lower_cpp1(this, (p_wchar1 *)data, len, + flags, auto_convert, charset); + case 2: + return lower_cpp2(this, (p_wchar2 *)data, len, + flags, auto_convert, charset); + default: + fatal("low_cpp(): Bad shift: %d\n", shift); + } +} + +void free_one_define(struct hash_entry *h) +{ + int e; + struct define *d=BASEOF(h, define, link); + + for(e=0;e<d->num_parts;e++) + free_string(d->parts[e].postfix); + if(d->first) + free_string(d->first); + free((char *)d); +} + +/*** Magic defines ***/ +static void insert_current_line(struct cpp *this, + struct define *def, + struct define_argument *args, + struct string_builder *tmp) +{ + char buf[20]; + sprintf(buf," %ld ",(long)this->current_line); + string_builder_binary_strcat(tmp, buf, strlen(buf)); +} + +static void insert_current_file_as_string(struct cpp *this, + struct define *def, + struct define_argument *args, + struct string_builder *tmp) +{ + PUSH_STRING_SHIFT(this->current_file->str, this->current_file->len, + this->current_file->size_shift, tmp); +} + +static void insert_current_time_as_string(struct cpp *this, + struct define *def, + struct define_argument *args, + struct string_builder *tmp) +{ + /* FIXME: Is this code safe? */ + time_t tmp2; + char *buf; + time(&tmp2); + buf=ctime(&tmp2); + + PUSH_STRING0(buf+11, 8, tmp); +} + +static void insert_current_date_as_string(struct cpp *this, + struct define *def, + struct define_argument *args, + struct string_builder *tmp) +{ + /* FIXME: Is this code safe? */ + time_t tmp2; + char *buf; + time(&tmp2); + buf=ctime(&tmp2); + + PUSH_STRING0(buf+19, 5, tmp); + PUSH_STRING0(buf+4, 6, tmp); +} + +static void check_defined(struct cpp *this, + struct define *def, + struct define_argument *args, + struct string_builder *tmp) +{ + struct pike_string *s; + switch(args[0].arg.shift) { + case 0: + s=binary_findstring((p_wchar0 *)args[0].arg.ptr, args[0].len); + break; + case 1: + s=binary_findstring1((p_wchar1 *)args[0].arg.ptr, args[0].len); + break; + case 2: + s=binary_findstring2((p_wchar2 *)args[0].arg.ptr, args[0].len); + break; + default: + fatal("cpp(): Symbol has unsupported shift: %d\n", args[0].arg.shift); + break; + } + if(s && find_define(s)) + { + string_builder_binary_strcat(tmp, " 1 ", 3); + }else{ + string_builder_binary_strcat(tmp, " 0 ", 3); + } +} + +static void dumpdef(struct cpp *this, + struct define *def, + struct define_argument *args, + struct string_builder *tmp) +{ + struct pike_string *s; + struct define *d; - while (*p && isspace(*((unsigned char *)p))) { - p++; + switch(args[0].arg.shift) { + case 0: + s=binary_findstring((p_wchar0 *)args[0].arg.ptr, args[0].len); + break; + case 1: + s=binary_findstring1((p_wchar1 *)args[0].arg.ptr, args[0].len); + break; + case 2: + s=binary_findstring2((p_wchar2 *)args[0].arg.ptr, args[0].len); + break; + default: + fatal("cpp(): Bad shift in macroname: %d\n", args[0].arg.shift); + break; + } + if(s && (d=find_define(s))) + { + int e; + char buffer[42]; + PUSH_STRING_SHIFT(d->link.s->str, d->link.s->len, + d->link.s->size_shift, tmp); + if(d->magic) + { + string_builder_binary_strcat(tmp, " defined magically ", 19); + }else{ + string_builder_binary_strcat(tmp, " defined as ", 12); + + if(d->first) + PUSH_STRING_SHIFT(d->first->str, d->first->len, + d->first->size_shift, tmp); + for(e=0;e<d->num_parts;e++) + { + if(!(d->parts[e].argument & DEF_ARG_NOPRESPACE)) + string_builder_putchar(tmp, ' '); + + if(d->parts[e].argument & DEF_ARG_STRINGIFY) + string_builder_putchar(tmp, '#'); + + sprintf(buffer,"%ld",(long)(d->parts[e].argument & DEF_ARG_MASK)); + string_builder_binary_strcat(tmp, buffer, strlen(buffer)); + + if(!(d->parts[e].argument & DEF_ARG_NOPOSTSPACE)) + string_builder_putchar(tmp, ' '); + + PUSH_STRING_SHIFT(d->parts[e].postfix->str, d->parts[e].postfix->len, + d->parts[e].postfix->size_shift, tmp); + } } + }else{ + string_builder_binary_strcat(tmp, " 0 ", 3); + } +} - if (!*p) { - pop_stack(); - return data; - } +static int do_safe_index_call(struct pike_string *s); - /* Build a string of the trailing data - * NOTE: - * Keep the newline, so the linenumber info stays correct. - */ +static void check_constant(struct cpp *this, + struct define *def, + struct define_argument *args, + struct string_builder *tmp) +{ + struct svalue *save_stack=sp; + struct svalue *sv; + PCHARP data=args[0].arg; + int res,dlen,len=args[0].len; + struct pike_string *s; + int c; - new_str = begin_shared_string(data->len - len); + while(len && ((c = EXTRACT_PCHARP(data))< 256) && isspace(c)) { + INC_PCHARP(data, 1); + len--; + } - MEMCPY(new_str->str, data->str + len, data->len - len); + if(!len) + cpp_error(this,"#if constant() with empty argument.\n"); - push_string(end_shared_string(new_str)); + for(dlen=0;dlen<len;dlen++) + if(!isidchar(INDEX_PCHARP(data, dlen))) + break; - stack_swap(); + s = begin_wide_shared_string(dlen, data.shift); + MEMCPY(s->str, data.ptr, dlen<<data.shift); + push_string(end_shared_string(s)); +#ifdef PIKE_DEBUG + s = NULL; +#endif /* PIKE_DEBUG */ + if((sv=low_mapping_string_lookup(get_builtin_constants(), + sp[-1].u.string))) + { + pop_stack(); + push_svalue(sv); + res=1; + }else if(get_master()) { + ref_push_string(this->current_file); + SAFE_APPLY_MASTER("resolv",2); - /* Build a string of the charset name */ + res=(throw_value.type!=T_STRING) && + (!(IS_ZERO(sp-1) && sp[-1].subtype == NUMBER_UNDEFINED)); + }else{ + res=0; + } - p2 = p; - while(*p2 && !isspace(*((unsigned char *)p2))) { - p2++; + while(1) + { + INC_PCHARP(data, dlen); + len-=dlen; + + while(len && ((c = EXTRACT_PCHARP(data)) < 256) && isspace(c)) { + INC_PCHARP(data, 1); + len--; } - len = p2 - p; - - new_str = begin_shared_string(len); - - MEMCPY(new_str->str, p, len); + if(!len) break; - pop_stack(); - push_string(end_shared_string(new_str)); - - /* Decode the string */ + if(EXTRACT_PCHARP(data) == '.') + { + INC_PCHARP(data, 1); + len--; + + while(len && ((c = EXTRACT_PCHARP(data)) < 256) && isspace(c)) { + INC_PCHARP(data, 1); + len--; + } - SAFE_APPLY_MASTER("decode_charset", 2); + for(dlen=0; dlen<len; dlen++) + if(!isidchar(INDEX_PCHARP(data, dlen))) + break; - if (sp[-1].type != T_STRING) { - pop_stack(); - return data; + if(res) + { + struct pike_string *s = begin_wide_shared_string(dlen, data.shift); + MEMCPY(s->str, data.ptr, dlen<<data.shift); + s = end_shared_string(s); + res=do_safe_index_call(s); + free_string(s); + } + }else{ + cpp_error(this, "Garbage characters in constant()\n"); } + } - /* Accept the new string */ + pop_n_elems(sp-save_stack); - free_string(data); - add_ref(data = sp[-1].u.string); - pop_stack(); - } - return data; + string_builder_binary_strcat(tmp, res?" 1 ":" 0 ", 3); } -static struct pike_string *filter_bom(struct pike_string *data) -{ - /* More notes: - * - * * Character 0xfeff (ZERO WIDTH NO-BREAK SPACE = BYTE ORDER MARK = BOM) - * needs to be filtered away before processing continues. - */ - int i; - int j = 0; - int len = data->len; - struct string_builder buf; - - /* Add an extra reference to data here, since we may return it as is. */ - add_ref(data); - if (!data->size_shift) { - return(data); - } +static int do_safe_index_call(struct pike_string *s) +{ + int res; + JMP_BUF recovery; + if(!s) return 0; - init_string_builder(&buf, data->size_shift); - if (data->size_shift == 1) { - /* 16 bit string */ - p_wchar1 *ptr = STR1(data); - for(i = 0; i<len; i++) { - if (ptr[i] == 0xfeff) { - if (i != j) { - string_builder_append(&buf, MKPCHARP(ptr + j, 1), i - j); - j = i+1; - } - } - } - if ((j) && (i != j)) { - /* Add the trailing string */ - string_builder_append(&buf, MKPCHARP(ptr + j, 1), i - j); - free_string(data); - data = finish_string_builder(&buf); - } else { - /* String didn't contain 0xfeff */ - free_string_builder(&buf); - } + if (SETJMP(recovery)) { + res = 0; } else { - /* 32 bit string */ - p_wchar2 *ptr = STR2(data); - for(i = 0; i<len; i++) { - if (ptr[i] == 0xfeff) { - if (i != j) { - string_builder_append(&buf, MKPCHARP(ptr + j, 2), i - j); - j = i+1; - } - } - } - if ((j) && (i != j)) { - /* Add the trailing string */ - string_builder_append(&buf, MKPCHARP(ptr + j, 2), i - j); - free_string(data); - data = finish_string_builder(&buf); - } else { - /* String didn't contain 0xfeff */ - free_string_builder(&buf); - } + ref_push_string(s); + f_index(2); + + res=!(IS_ZERO(sp-1) && sp[-1].subtype == NUMBER_UNDEFINED); } - return(data); + UNSETJMP(recovery); + return res; } /* string cpp(string data, string|void current_file, int|string|void charset) */ -- GitLab