| ︙ | | |
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
|
-
+
|
if (Tcl_IsShared(objPtr)) {
Tcl_Panic("%s called with shared object", "Tcl_SetByteArrayObj");
}
TclFreeIntRep(objPtr);
Tcl_InvalidateStringRep(objPtr);
length = (length < 0) ? 0 : length;
byteArrayPtr = (ByteArray *) ckalloc(BYTEARRAY_SIZE(length));
byteArrayPtr = ckalloc(BYTEARRAY_SIZE(length));
memset(byteArrayPtr, 0, BYTEARRAY_SIZE(length));
byteArrayPtr->used = length;
byteArrayPtr->allocated = length;
if (bytes && length) {
memcpy(byteArrayPtr->bytes, bytes, (size_t) length);
}
|
| ︙ | | |
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
|
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
|
-
-
+
|
}
if (objPtr->typePtr != &tclByteArrayType) {
SetByteArrayFromAny(NULL, objPtr);
}
byteArrayPtr = GET_BYTEARRAY(objPtr);
if (length > byteArrayPtr->allocated) {
byteArrayPtr = (ByteArray *)
ckrealloc((char *) byteArrayPtr, BYTEARRAY_SIZE(length));
byteArrayPtr = ckrealloc(byteArrayPtr, BYTEARRAY_SIZE(length));
byteArrayPtr->allocated = length;
SET_BYTEARRAY(objPtr, byteArrayPtr);
}
Tcl_InvalidateStringRep(objPtr);
byteArrayPtr->used = length;
return byteArrayPtr->bytes;
}
|
| ︙ | | |
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
|
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
|
-
+
|
ByteArray *byteArrayPtr;
Tcl_UniChar ch;
if (objPtr->typePtr != &tclByteArrayType) {
src = TclGetStringFromObj(objPtr, &length);
srcEnd = src + length;
byteArrayPtr = (ByteArray *) ckalloc(BYTEARRAY_SIZE(length));
byteArrayPtr = ckalloc(BYTEARRAY_SIZE(length));
for (dst = byteArrayPtr->bytes; src < srcEnd; ) {
src += Tcl_UtfToUniChar(src, &ch);
*dst++ = UCHAR(ch);
}
byteArrayPtr->used = dst - byteArrayPtr->bytes;
byteArrayPtr->allocated = length;
|
| ︙ | | |
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
|
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
|
-
+
|
*----------------------------------------------------------------------
*/
static void
FreeByteArrayInternalRep(
Tcl_Obj *objPtr) /* Object with internal rep to free. */
{
ckfree((char *) GET_BYTEARRAY(objPtr));
ckfree(GET_BYTEARRAY(objPtr));
objPtr->typePtr = NULL;
}
/*
*----------------------------------------------------------------------
*
* DupByteArrayInternalRep --
|
| ︙ | | |
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
|
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
|
-
+
|
{
int length;
ByteArray *srcArrayPtr, *copyArrayPtr;
srcArrayPtr = GET_BYTEARRAY(srcPtr);
length = srcArrayPtr->used;
copyArrayPtr = (ByteArray *) ckalloc(BYTEARRAY_SIZE(length));
copyArrayPtr = ckalloc(BYTEARRAY_SIZE(length));
copyArrayPtr->used = length;
copyArrayPtr->allocated = length;
memcpy(copyArrayPtr->bytes, srcArrayPtr->bytes, (size_t) length);
SET_BYTEARRAY(copyPtr, copyArrayPtr);
copyPtr->typePtr = &tclByteArrayType;
}
|
| ︙ | | |
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
|
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
|
-
+
|
size++;
}
}
if (size < 0) {
Tcl_Panic("max size for a Tcl value (%d bytes) exceeded", INT_MAX);
}
dst = (char *) ckalloc((unsigned) (size + 1));
dst = ckalloc(size + 1);
objPtr->bytes = dst;
objPtr->length = size;
if (size == length) {
memcpy(dst, src, (size_t) size);
dst[size] = '\0';
} else {
|
| ︙ | | |
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
|
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
|
-
+
-
-
+
-
+
|
} else {
do {
attempt *= 2;
} while (attempt < used+len);
}
if (BYTEARRAY_SIZE(attempt) > BYTEARRAY_SIZE(used)) {
tmpByteArrayPtr = (ByteArray *)
tmpByteArrayPtr = attemptckrealloc(byteArrayPtr,
attemptckrealloc((char *) byteArrayPtr,
BYTEARRAY_SIZE(attempt));
BYTEARRAY_SIZE(attempt));
}
if (tmpByteArrayPtr == NULL) {
attempt = used + len;
if (BYTEARRAY_SIZE(attempt) < BYTEARRAY_SIZE(used)) {
Tcl_Panic("attempt to allocate a bigger buffer than we can handle");
}
tmpByteArrayPtr = (ByteArray *) ckrealloc((char *) byteArrayPtr,
tmpByteArrayPtr = ckrealloc(byteArrayPtr,
BYTEARRAY_SIZE(attempt));
}
byteArrayPtr = tmpByteArrayPtr;
byteArrayPtr->allocated = attempt;
byteArrayPtr->used = used;
SET_BYTEARRAY(objPtr, byteArrayPtr);
|
| ︙ | | |