@@ -1203,6 +1203,8 @@ static REBCNT EncodedU32_Size(u32 value) {
1203
1203
SET_INT32 (temp , cp [0 ] + (cp [1 ] << 8 ) + (cp [2 ] << 16 ));
1204
1204
break ;
1205
1205
case SYM_BYTES :
1206
+ case SYM_OCTAL_BYTES :
1207
+ case SYM_STRING_BYTES :
1206
1208
//puts("bytes");
1207
1209
next = ++ value ;
1208
1210
if (IS_GET_WORD (next )) next = Get_Var (next );
@@ -1218,10 +1220,27 @@ static REBCNT EncodedU32_Size(u32 value) {
1218
1220
ASSERT_READ_SIZE (value , cp , ep , n );
1219
1221
readNBytes :
1220
1222
//printf("num: %i\n", n);
1221
- VAL_SET (temp , REB_BINARY );
1222
- bin_new = Copy_Series_Part (bin , VAL_INDEX (buffer_read ), n );
1223
- VAL_SERIES (temp ) = bin_new ;
1224
- VAL_INDEX (temp ) = 0 ;
1223
+ if (cmd == SYM_BYTES || cmd == SYM_STRING_BYTES ) {
1224
+
1225
+ bin_new = Copy_Series_Part (bin , VAL_INDEX (buffer_read ), n );
1226
+ VAL_SERIES (temp ) = bin_new ;
1227
+ VAL_INDEX (temp ) = 0 ;
1228
+ if (cmd == SYM_BYTES ) {
1229
+ VAL_SET (temp , REB_BINARY );
1230
+ }
1231
+ else {
1232
+ VAL_SET (temp , REB_STRING );
1233
+ VAL_TAIL (temp ) = strnlen (VAL_BIN (temp ), n );
1234
+ }
1235
+ }
1236
+ else {// octal number
1237
+ u = 0 ;
1238
+ i = 0 ;
1239
+ while ((i < n ) && cp [i ]) {
1240
+ u = (u << 3 ) | (u64 )(cp [i ++ ] - '0' );
1241
+ }
1242
+ SET_INTEGER (temp , u );
1243
+ }
1225
1244
break ;
1226
1245
case SYM_STRING :
1227
1246
bp = cp ;
@@ -1403,7 +1422,6 @@ static REBCNT EncodedU32_Size(u32 value) {
1403
1422
+ mst -> time .minute * 60
1404
1423
+ mst -> time .hour * 3600 );
1405
1424
break ;
1406
-
1407
1425
default :
1408
1426
Trap1 (RE_INVALID_SPEC , value );
1409
1427
}
0 commit comments