return ret;
}
-void from_zval_write_int(const zval *arr_value, char *field, ser_context *ctx)
+static void from_zval_write_int(const zval *arr_value, char *field, ser_context *ctx)
{
long lval;
int ival;
ival = (uint32_t)lval;
memcpy(field, &ival, sizeof(ival));
}
+void from_zval_write_uint8(const zval *arr_value, char *field, ser_context *ctx)
+{
+ long lval;
+ uint8_t ival;
+
+ lval = from_zval_integer_common(arr_value, ctx);
+ if (ctx->err.has_error) {
+ return;
+ }
+
+ if (lval < 0 || lval > 0xFF) {
+ do_from_zval_err(ctx, "%s", "given PHP integer is out of bounds "
+ "for an unsigned 8-bit integer");
+ return;
+ }
+
+ ival = (uint8_t)lval;
+ memcpy(field, &ival, sizeof(ival));
+}
static void from_zval_write_net_uint16(const zval *arr_value, char *field, ser_context *ctx)
{
long lval;
memcpy(field, &ival, sizeof(ival));
}
-void to_zval_read_int(const char *data, zval *zv, res_context *ctx)
+static void to_zval_read_int(const char *data, zval *zv, res_context *ctx)
{
int ival;
memcpy(&ival, data, sizeof(ival));
ZVAL_LONG(zv, (long)ival);
}
+void to_zval_read_uint8(const char *data, zval *zv, res_context *ctx)
+{
+ uint8_t ival;
+ memcpy(&ival, data, sizeof(ival));
+
+ ZVAL_LONG(zv, (long)ival);
+}
static void to_zval_read_net_uint16(const char *data, zval *zv, res_context *ctx)
{
uint16_t ival;
void allocations_dispose(zend_llist **allocations);
/* CONVERSION FUNCTIONS */
-void from_zval_write_int(const zval *arr_value, char *field, ser_context *ctx);
-void to_zval_read_int(const char *data, zval *zv, res_context *ctx);
+void from_zval_write_uint8(const zval *arr_value, char *field, ser_context *ctx);
+void to_zval_read_uint8(const char *data, zval *zv, res_context *ctx);
#ifdef IPV6_PKTINFO
void from_zval_write_in6_pktinfo(const zval *container, char *in6_pktinfo_c, ser_context *ctx);
#endif
#ifdef IPV6_HOPLIMIT
- PUT_ENTRY(sizeof(int), 0, 0, from_zval_write_int,
- to_zval_read_int, IPPROTO_IPV6, IPV6_HOPLIMIT);
+ PUT_ENTRY(sizeof(int), 0, 0, from_zval_write_uint8,
+ to_zval_read_uint8, IPPROTO_IPV6, IPV6_HOPLIMIT);
#endif
- PUT_ENTRY(sizeof(int), 0, 0, from_zval_write_int,
- to_zval_read_int, IPPROTO_IPV6, IPV6_TCLASS);
+#ifdef IPV6_TCLASS
+ PUT_ENTRY(sizeof(int), 0, 0, from_zval_write_uint8,
+ to_zval_read_uint8, IPPROTO_IPV6, IPV6_TCLASS);
+#endif
#ifdef SO_PASSCRED
PUT_ENTRY(sizeof(struct ucred), 0, 0, from_zval_write_ucred,