static void upb_fielddef_init_default(upb_fielddef *f) { f->default_is_string = false; switch (upb_fielddef_type(f)) { case UPB_TYPE(DOUBLE): upb_value_setdouble(&f->defaultval, 0); break; case UPB_TYPE(FLOAT): upb_value_setfloat(&f->defaultval, 0); break; case UPB_TYPE(UINT64): case UPB_TYPE(FIXED64): upb_value_setuint64(&f->defaultval, 0); break; case UPB_TYPE(INT64): case UPB_TYPE(SFIXED64): case UPB_TYPE(SINT64): upb_value_setint64(&f->defaultval, 0); break; case UPB_TYPE(ENUM): case UPB_TYPE(INT32): case UPB_TYPE(SINT32): case UPB_TYPE(SFIXED32): upb_value_setint32(&f->defaultval, 0); break; case UPB_TYPE(UINT32): case UPB_TYPE(FIXED32): upb_value_setuint32(&f->defaultval, 0); break; case UPB_TYPE(BOOL): upb_value_setbool(&f->defaultval, false); break; case UPB_TYPE(STRING): case UPB_TYPE(BYTES): upb_value_setbyteregion(&f->defaultval, upb_byteregion_new("")); f->default_is_string = true; break; case UPB_TYPE(GROUP): case UPB_TYPE(MESSAGE): upb_value_setptr(&f->defaultval, NULL); break; case UPB_TYPE_NONE: break; } }
static void upb_fielddef_init_default(upb_fielddef *f) { f->default_is_string = false; switch (upb_fielddef_type(f)) { case UPB_TYPE_DOUBLE: upb_value_setdouble(&f->defaultval, 0); break; case UPB_TYPE_FLOAT: upb_value_setfloat(&f->defaultval, 0); break; case UPB_TYPE_UINT64: upb_value_setuint64(&f->defaultval, 0); break; case UPB_TYPE_INT64: upb_value_setint64(&f->defaultval, 0); break; case UPB_TYPE_ENUM: case UPB_TYPE_INT32: upb_value_setint32(&f->defaultval, 0); break; case UPB_TYPE_UINT32: upb_value_setuint32(&f->defaultval, 0); break; case UPB_TYPE_BOOL: upb_value_setbool(&f->defaultval, false); break; case UPB_TYPE_STRING: case UPB_TYPE_BYTES: upb_value_setptr(&f->defaultval, newstr("", 0)); f->default_is_string = true; break; case UPB_TYPE_MESSAGE: upb_value_setptr(&f->defaultval, NULL); break; } }
static void upb_fielddef_init_default(upb_fielddef *f) { switch (upb_fielddef_type(f)) { case UPB_TYPE(DOUBLE): upb_value_setdouble(&f->defaultval, 0); break; case UPB_TYPE(FLOAT): upb_value_setfloat(&f->defaultval, 0); break; case UPB_TYPE(UINT64): case UPB_TYPE(FIXED64): upb_value_setuint64(&f->defaultval, 0); break; case UPB_TYPE(INT64): case UPB_TYPE(SFIXED64): case UPB_TYPE(SINT64): upb_value_setint64(&f->defaultval, 0); break; case UPB_TYPE(ENUM): case UPB_TYPE(INT32): case UPB_TYPE(SINT32): case UPB_TYPE(SFIXED32): upb_value_setint32(&f->defaultval, 0); break; case UPB_TYPE(UINT32): case UPB_TYPE(FIXED32): upb_value_setuint32(&f->defaultval, 0); break; case UPB_TYPE(BOOL): upb_value_setbool(&f->defaultval, false); break; case UPB_TYPE(STRING): case UPB_TYPE(BYTES): upb_value_setstrref(&f->defaultval, upb_strref_new("")); break; case UPB_TYPE(GROUP): case UPB_TYPE(MESSAGE): upb_value_setptr(&f->defaultval, NULL); break; } f->default_is_symbolic = false; }
// Converts the default value in string "str" into "d". Passes a ref on str. // Returns true on success. static bool parse_default(char *str, upb_value *d, int type) { bool success = true; if (str) { switch(type) { case UPB_TYPE(INT32): case UPB_TYPE(SINT32): case UPB_TYPE(SFIXED32): upb_value_setint32(d, 0); break; case UPB_TYPE(INT64): case UPB_TYPE(SINT64): case UPB_TYPE(SFIXED64): upb_value_setint64(d, 0); break; case UPB_TYPE(UINT32): case UPB_TYPE(FIXED32): upb_value_setuint32(d, 0); case UPB_TYPE(UINT64): case UPB_TYPE(FIXED64): upb_value_setuint64(d, 0); break; case UPB_TYPE(DOUBLE): upb_value_setdouble(d, 0); break; case UPB_TYPE(FLOAT): upb_value_setfloat(d, 0); break; case UPB_TYPE(BOOL): upb_value_setbool(d, false); break; default: abort(); } } else { char *end; switch (type) { case UPB_TYPE(INT32): case UPB_TYPE(SINT32): case UPB_TYPE(SFIXED32): { long val = strtol(str, &end, 0); if (val > INT32_MAX || val < INT32_MIN || errno == ERANGE || *end) success = false; else upb_value_setint32(d, val); break; } case UPB_TYPE(INT64): case UPB_TYPE(SINT64): case UPB_TYPE(SFIXED64): upb_value_setint64(d, strtoll(str, &end, 0)); if (errno == ERANGE || *end) success = false; break; case UPB_TYPE(UINT32): case UPB_TYPE(FIXED32): { unsigned long val = strtoul(str, &end, 0); if (val > UINT32_MAX || errno == ERANGE || *end) success = false; else upb_value_setuint32(d, val); break; } case UPB_TYPE(UINT64): case UPB_TYPE(FIXED64): upb_value_setuint64(d, strtoull(str, &end, 0)); if (errno == ERANGE || *end) success = false; break; case UPB_TYPE(DOUBLE): upb_value_setdouble(d, strtod(str, &end)); if (errno == ERANGE || *end) success = false; break; case UPB_TYPE(FLOAT): upb_value_setfloat(d, strtof(str, &end)); if (errno == ERANGE || *end) success = false; break; case UPB_TYPE(BOOL): { if (strcmp(str, "false") == 0) upb_value_setbool(d, false); else if (strcmp(str, "true") == 0) upb_value_setbool(d, true); else success = false; } default: abort(); } } return success; }