Commit a83563aa authored by Alexandre Julliard's avatar Alexandre Julliard

widl: Long constants must be 32-bit on all platforms.

parent bd6f2181
......@@ -117,7 +117,7 @@ expr_t *make_expr(enum expr_type type)
return e;
}
expr_t *make_exprl(enum expr_type type, long val)
expr_t *make_exprl(enum expr_type type, int val)
{
expr_t *e = xmalloc(sizeof(expr_t));
e->type = type;
......@@ -218,7 +218,7 @@ expr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr)
{
unsigned int align = 0;
unsigned int cast_type_bits = type_memsize(tref, &align) * 8;
unsigned long cast_mask;
unsigned int cast_mask;
e->is_const = TRUE;
if (is_signed_integer_type(tref))
......@@ -699,10 +699,10 @@ void write_expr(FILE *h, const expr_t *e, int brackets,
case EXPR_VOID:
break;
case EXPR_NUM:
fprintf(h, "%lu", e->u.lval);
fprintf(h, "%u", e->u.lval);
break;
case EXPR_HEXNUM:
fprintf(h, "0x%lx", e->u.lval);
fprintf(h, "0x%x", e->u.lval);
break;
case EXPR_DOUBLE:
fprintf(h, "%#.15g", e->u.dval);
......
......@@ -26,7 +26,7 @@ struct expr_loc
};
extern expr_t *make_expr(enum expr_type type);
extern expr_t *make_exprl(enum expr_type type, long val);
extern expr_t *make_exprl(enum expr_type type, int val);
extern expr_t *make_exprd(enum expr_type type, double val);
extern expr_t *make_exprs(enum expr_type type, char *val);
extern expr_t *make_exprt(enum expr_type type, var_t *var, expr_t *expr);
......
......@@ -100,7 +100,7 @@ void *get_attrp(const attr_list_t *list, enum attr_type t)
return NULL;
}
unsigned long get_attrv(const attr_list_t *list, enum attr_type t)
unsigned int get_attrv(const attr_list_t *list, enum attr_type t)
{
const attr_t *attr;
if (list) LIST_FOR_EACH_ENTRY( attr, list, const attr_t, entry )
......@@ -334,7 +334,7 @@ void write_type_right(FILE *h, type_t *t, int is_field)
}
break;
case TYPE_BITFIELD:
fprintf(h, " : %lu", type_bitfield_get_bits(t)->cval);
fprintf(h, " : %u", type_bitfield_get_bits(t)->cval);
break;
case TYPE_VOID:
case TYPE_BASIC:
......
......@@ -27,7 +27,7 @@ extern int is_ptrchain_attr(const var_t *var, enum attr_type t);
extern int is_aliaschain_attr(const type_t *var, enum attr_type t);
extern int is_attr(const attr_list_t *list, enum attr_type t);
extern void *get_attrp(const attr_list_t *list, enum attr_type t);
extern unsigned long get_attrv(const attr_list_t *list, enum attr_type t);
extern unsigned int get_attrv(const attr_list_t *list, enum attr_type t);
extern int is_void(const type_t *t);
extern int is_conformant_array(const type_t *t);
extern int is_declptr(const type_t *t);
......
......@@ -85,15 +85,15 @@ int import_stack_ptr = 0;
/* converts an integer in string form to an unsigned long and prints an error
* on overflow */
static unsigned long xstrtoul(const char *nptr, char **endptr, int base)
static unsigned int xstrtoul(const char *nptr, char **endptr, int base)
{
unsigned long l;
unsigned long val;
errno = 0;
l = strtoul(nptr, endptr, base);
if (l == ULONG_MAX && errno == ERANGE)
val = strtoul(nptr, endptr, base);
if ((val == ULONG_MAX && errno == ERANGE) || ((unsigned int)val != val))
error_loc("integer constant %s is too large\n", nptr);
return l;
return val;
}
UUID *parse_uuid(const char *u)
......
......@@ -97,7 +97,7 @@ static attr_list_t *append_attr(attr_list_t *list, attr_t *attr);
static attr_list_t *append_attr_list(attr_list_t *new_list, attr_list_t *old_list);
static decl_spec_t *make_decl_spec(type_t *type, decl_spec_t *left, decl_spec_t *right, attr_t *attr, enum storage_class stgclass);
static attr_t *make_attr(enum attr_type type);
static attr_t *make_attrv(enum attr_type type, unsigned long val);
static attr_t *make_attrv(enum attr_type type, unsigned int val);
static attr_t *make_attrp(enum attr_type type, void *val);
static expr_list_t *append_expr(expr_list_t *list, expr_t *expr);
static array_dims_t *append_array(array_dims_t *list, expr_t *expr);
......@@ -1248,7 +1248,7 @@ static attr_t *make_attr(enum attr_type type)
return a;
}
static attr_t *make_attrv(enum attr_type type, unsigned long val)
static attr_t *make_attrv(enum attr_type type, unsigned int val)
{
attr_t *a = xmalloc(sizeof(attr_t));
a->type = type;
......
......@@ -988,13 +988,13 @@ static unsigned int write_conf_or_var_desc(FILE *file, const type_t *structure,
if (expr->is_const)
{
if (expr->cval > UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX)
error("write_conf_or_var_desc: constant value %ld is greater than "
error("write_conf_or_var_desc: constant value %d is greater than "
"the maximum constant size of %d\n", expr->cval,
UCHAR_MAX * (USHRT_MAX + 1) + USHRT_MAX);
print_file(file, 2, "0x%x, /* Corr desc: constant, val = %ld */\n",
print_file(file, 2, "0x%x, /* Corr desc: constant, val = %d */\n",
RPC_FC_CONSTANT_CONFORMANCE, expr->cval);
print_file(file, 2, "0x%lx,\n", expr->cval >> 16);
print_file(file, 2, "0x%x,\n", expr->cval >> 16);
print_file(file, 2, "NdrFcShort(0x%hx),\n", (unsigned short)expr->cval);
return 4;
......@@ -2655,7 +2655,7 @@ static unsigned int write_union_tfs(FILE *file, type_t *type, unsigned int *tfso
/* MIDL doesn't check for duplicate cases, even though that seems
like a reasonable thing to do, it just dumps them to the TFS
like we're going to do here. */
print_file(file, 2, "NdrFcLong(0x%lx),\t/* %ld */\n", c->cval, c->cval);
print_file(file, 2, "NdrFcLong(0x%x),\t/* %d */\n", c->cval, c->cval);
*tfsoff += 4;
write_branch_type(file, ft, tfsoff);
}
......@@ -2793,8 +2793,8 @@ static unsigned int write_range_tfs(FILE *file, const attr_list_t *attrs,
print_file(file, 0, "/* %u */\n", *typeformat_offset);
print_file(file, 2, "0x%x,\t/* FC_RANGE */\n", RPC_FC_RANGE);
print_file(file, 2, "0x%x,\t/* %s */\n", fc, string_of_type(fc));
print_file(file, 2, "NdrFcLong(0x%lx),\t/* %lu */\n", range_min->cval, range_min->cval);
print_file(file, 2, "NdrFcLong(0x%lx),\t/* %lu */\n", range_max->cval, range_max->cval);
print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", range_min->cval, range_min->cval);
print_file(file, 2, "NdrFcLong(0x%x),\t/* %u */\n", range_max->cval, range_max->cval);
*typeformat_offset += 10;
return start_offset;
......@@ -3604,9 +3604,9 @@ static void write_remoting_arg(FILE *file, int indent, const var_t *func, const
print_file(file, indent, "if ((%s%s < (", local_var_prefix, var->name);
write_type_decl(file, var->type, NULL);
fprintf(file, ")0x%lx) || (%s%s > (", range_min->cval, local_var_prefix, var->name);
fprintf(file, ")0x%x) || (%s%s > (", range_min->cval, local_var_prefix, var->name);
write_type_decl(file, var->type, NULL);
fprintf(file, ")0x%lx))\n", range_max->cval);
fprintf(file, ")0x%x))\n", range_max->cval);
print_file(file, indent, "{\n");
print_file(file, indent+1, "RpcRaiseException(RPC_S_INVALID_BOUND);\n");
print_file(file, indent, "}\n");
......
......@@ -255,7 +255,7 @@ struct str_list_entry_t
struct _attr_t {
enum attr_type type;
union {
unsigned long ival;
unsigned int ival;
void *pval;
} u;
/* parser-internal */
......@@ -266,7 +266,7 @@ struct _expr_t {
enum expr_type type;
const expr_t *ref;
union {
long lval;
int lval;
double dval;
const char *sval;
const expr_t *ext;
......@@ -274,7 +274,7 @@ struct _expr_t {
} u;
const expr_t *ext2;
int is_const;
long cval;
int cval;
/* parser-internal */
struct list entry;
};
......
......@@ -1157,7 +1157,7 @@ static int encode_var(
return 0;
}
static unsigned long get_ulong_val(unsigned long val, int vt)
static unsigned int get_ulong_val(unsigned int val, int vt)
{
switch(vt) {
case VT_I2:
......@@ -1188,7 +1188,7 @@ static void write_value(msft_typelib_t* typelib, int *out, int vt, const void *v
case VT_HRESULT:
case VT_PTR:
{
const unsigned long lv = get_ulong_val(*(const unsigned long*)value, vt);
const unsigned int lv = get_ulong_val(*(const unsigned int *)value, vt);
if((lv & 0x3ffffff) == lv) {
*out = 0x80000000;
*out |= vt << 26;
......@@ -1226,7 +1226,7 @@ static void write_value(msft_typelib_t* typelib, int *out, int vt, const void *v
}
static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
int vt, void *value, int *offset)
int vt, int value, int *offset)
{
MSFT_GuidEntry guidentry;
int guidoffset;
......@@ -1240,7 +1240,7 @@ static HRESULT set_custdata(msft_typelib_t *typelib, REFGUID guid,
guidentry.next_hash = -1;
guidoffset = ctl2_alloc_guid(typelib, &guidentry);
write_value(typelib, &data_out, vt, value);
write_value(typelib, &data_out, vt, &value);
custoffset = ctl2_alloc_segment(typelib, MSFT_SEG_CUSTDATAGUID, 12, 0);
......@@ -1484,7 +1484,7 @@ static HRESULT add_func_desc(msft_typeinfo_t* typeinfo, var_t *func, int index)
}
else
{
chat("default value %ld\n", expr->cval);
chat("default value %d\n", expr->cval);
write_value(typeinfo->typelib, defaultdata, vt, &expr->cval);
}
break;
......@@ -2599,8 +2599,8 @@ int create_msft_typelib(typelib_t *typelib)
and midl's version number */
time_override = getenv( "WIDL_TIME_OVERRIDE");
cur_time = time_override ? atol( time_override) : time(NULL);
set_custdata(msft, &midl_time_guid, VT_UI4, &cur_time, &msft->typelib_header.CustomDataOffset);
set_custdata(msft, &midl_version_guid, VT_UI4, &version, &msft->typelib_header.CustomDataOffset);
set_custdata(msft, &midl_time_guid, VT_UI4, cur_time, &msft->typelib_header.CustomDataOffset);
set_custdata(msft, &midl_version_guid, VT_UI4, version, &msft->typelib_header.CustomDataOffset);
if (typelib->stmts)
LIST_FOR_EACH_ENTRY( stmt, typelib->stmts, const statement_t, entry )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment