Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Minor changes: whitespace/formatting improvements. |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk | main |
| Files: | files | file ages | folders |
| SHA3-256: |
32db600597134575d616d3a2e814c175 |
| User & Date: | dkf 2025-11-28 16:09:45.353 |
Context
|
2025-11-30
| ||
| 12:57 | Better comments on the Tcl_ObjType instances check-in: 44e8e5ff97 user: dkf tags: trunk, main | |
|
2025-11-28
| ||
| 16:09 | Minor changes: whitespace/formatting improvements. check-in: 32db600597 user: dkf tags: trunk, main | |
|
2025-11-27
| ||
| 14:30 | Remove all SEH handling. See [https://core.tcl-lang.org/tk/tktview/44b34c6152|44b34c6152] for the re... check-in: 4b58b7b792 user: jan.nijtmans tags: trunk, main | |
Changes
Changes to generic/tcl.h.
| ︙ | ︙ | |||
876 877 878 879 880 881 882 | * Type values returned by Tcl_GetNumberFromObj * TCL_NUMBER_INT Representation is a Tcl_WideInt * TCL_NUMBER_BIG Representation is an mp_int * TCL_NUMBER_DOUBLE Representation is a double * TCL_NUMBER_NAN Value is NaN. */ | | | | | | 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 | * Type values returned by Tcl_GetNumberFromObj * TCL_NUMBER_INT Representation is a Tcl_WideInt * TCL_NUMBER_BIG Representation is an mp_int * TCL_NUMBER_DOUBLE Representation is a double * TCL_NUMBER_NAN Value is NaN. */ #define TCL_NUMBER_INT 2 #define TCL_NUMBER_BIG 3 #define TCL_NUMBER_DOUBLE 4 #define TCL_NUMBER_NAN 5 /* * Flag values passed to Tcl_ConvertElement. * TCL_DONT_USE_BRACES forces it not to enclose the element in braces, but to * use backslash quoting instead. * TCL_DONT_QUOTE_HASH disables the default quoting of the '#' character. It * is safe to leave the hash unquoted when the element is not the first |
| ︙ | ︙ | |||
940 941 942 943 944 945 946 | */ #define TCL_NO_EVAL 0x010000 #define TCL_EVAL_GLOBAL 0x020000 #define TCL_EVAL_DIRECT 0x040000 #define TCL_EVAL_INVOKE 0x080000 #define TCL_CANCEL_UNWIND 0x100000 | | | 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 | */ #define TCL_NO_EVAL 0x010000 #define TCL_EVAL_GLOBAL 0x020000 #define TCL_EVAL_DIRECT 0x040000 #define TCL_EVAL_INVOKE 0x080000 #define TCL_CANCEL_UNWIND 0x100000 #define TCL_EVAL_NOERR 0x200000 /* * Special freeProc values that may be passed to Tcl_SetResult (see the man * page for details): */ #define TCL_VOLATILE ((Tcl_FreeProc *) 1) |
| ︙ | ︙ | |||
2226 2227 2228 2229 2230 2231 2232 | #define TCL_INDEX_NONE ((Tcl_Size)-1) /* *---------------------------------------------------------------------------- * Single public declaration for NRE. */ | | < | 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 | #define TCL_INDEX_NONE ((Tcl_Size)-1) /* *---------------------------------------------------------------------------- * Single public declaration for NRE. */ typedef int (Tcl_NRPostProc) (void *data[], Tcl_Interp *interp, int result); /* *---------------------------------------------------------------------------- * The following constant is used to test for older versions of Tcl in the * stubs tables. */ |
| ︙ | ︙ |
Changes to generic/tclDate.h.
| ︙ | ︙ | |||
386 387 388 389 390 391 392 | # define CLOCK_FMT_SCN_STORAGE_GC_SIZE 0 #endif #define CLOCK_MIN_TOK_CHAIN_BLOCK_SIZE 2 typedef struct ClockScanToken ClockScanToken; | < | < | | 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 |
# define CLOCK_FMT_SCN_STORAGE_GC_SIZE 0
#endif
#define CLOCK_MIN_TOK_CHAIN_BLOCK_SIZE 2
typedef struct ClockScanToken ClockScanToken;
typedef int (ClockScanTokenProc)(ClockFmtScnCmdArgs *opts,
DateInfo *info, const ClockScanToken *tok);
typedef enum {
CTOKT_INT = 1, CTOKT_WIDE, CTOKT_PARSER, CTOKT_SPACE, CTOKT_WORD, CTOKT_CHAR,
CFMTT_PROC
} CLCKTOK_TYPE;
typedef struct ClockScanTokenMap {
|
| ︙ | ︙ | |||
442 443 444 445 446 447 448 |
CLFMT_DECR = (1 << 4),
CLFMT_CALC = (1 << 5),
CLFMT_LOCALE_INDX = (1 << 8)
};
typedef struct ClockFormatToken ClockFormatToken;
| < | | < < | 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 |
CLFMT_DECR = (1 << 4),
CLFMT_CALC = (1 << 5),
CLFMT_LOCALE_INDX = (1 << 8)
};
typedef struct ClockFormatToken ClockFormatToken;
typedef int (ClockFormatTokenProc)(ClockFmtScnCmdArgs *opts,
DateFormat *dateFmt, ClockFormatToken *tok, int *val);
typedef struct ClockFormatTokenMap {
unsigned short type;
const char *tostr;
unsigned short width;
unsigned short flags;
unsigned short divider;
|
| ︙ | ︙ |
Changes to generic/tclDictObj.c.
| ︙ | ︙ | |||
145 146 147 148 149 150 151 |
FreeDictInternalRep, /* freeIntRepProc */
DupDictInternalRep, /* dupIntRepProc */
UpdateStringOfDict, /* updateStringProc */
SetDictFromAny, /* setFromAnyProc */
TCL_OBJTYPE_V0
};
| | | | | | | | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
FreeDictInternalRep, /* freeIntRepProc */
DupDictInternalRep, /* dupIntRepProc */
UpdateStringOfDict, /* updateStringProc */
SetDictFromAny, /* setFromAnyProc */
TCL_OBJTYPE_V0
};
#define DictSetInternalRep(objPtr, dictRepPtr) \
do { \
Tcl_ObjInternalRep ir; \
ir.twoPtrValue.ptr1 = (dictRepPtr); \
ir.twoPtrValue.ptr2 = NULL; \
Tcl_StoreInternalRep((objPtr), &tclDictType, &ir); \
} while (0)
#define DictGetInternalRep(objPtr, dictRepPtr) \
do { \
const Tcl_ObjInternalRep *irPtr; \
irPtr = TclFetchInternalRep((objPtr), &tclDictType); \
(dictRepPtr) = irPtr ? (Dict *)irPtr->twoPtrValue.ptr1 : NULL; \
} while (0)
/*
* The type of the specially adapted version of the Tcl_Obj*-containing hash
|
| ︙ | ︙ |
Changes to generic/tclIcu.c.
| ︙ | ︙ | |||
947 948 949 950 951 952 953 |
Tcl_DStringSetLength(dsOutPtr, normLen * sizeof(UCharx));
return TCL_OK;
}
/*
* Common function for parsing convert options.
*/
| > | | 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 |
Tcl_DStringSetLength(dsOutPtr, normLen * sizeof(UCharx));
return TCL_OK;
}
/*
* Common function for parsing convert options.
*/
static int
IcuParseConvertOptions(
Tcl_Interp *interp,
int objc,
Tcl_Obj *const objv[],
int *strictPtr,
Tcl_Obj **failindexVarPtr)
{
if (objc < 3) {
|
| ︙ | ︙ |
Changes to generic/tclInt.h.
| ︙ | ︙ | |||
3536 3537 3538 3539 3540 3541 3542 | MODULE_SCOPE void TclNsDecrRefCount(Namespace *nsPtr); MODULE_SCOPE int TclNamespaceDeleted(Namespace *nsPtr); MODULE_SCOPE void TclObjVarErrMsg(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, const char *operation, const char *reason, Tcl_Size index); MODULE_SCOPE int TclObjUnsetVar2(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, int flags); | | | 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 | MODULE_SCOPE void TclNsDecrRefCount(Namespace *nsPtr); MODULE_SCOPE int TclNamespaceDeleted(Namespace *nsPtr); MODULE_SCOPE void TclObjVarErrMsg(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, const char *operation, const char *reason, Tcl_Size index); MODULE_SCOPE int TclObjUnsetVar2(Tcl_Interp *interp, Tcl_Obj *part1Ptr, Tcl_Obj *part2Ptr, int flags); MODULE_SCOPE Tcl_Size TclParseBackslash(const char *src, Tcl_Size numBytes, Tcl_Size *readPtr, char *dst); MODULE_SCOPE int TclParseNumber(Tcl_Interp *interp, Tcl_Obj *objPtr, const char *expected, const char *bytes, Tcl_Size numBytes, const char **endPtrPtr, int flags); MODULE_SCOPE void TclParseInit(Tcl_Interp *interp, const char *string, Tcl_Size numBytes, Tcl_Parse *parsePtr); MODULE_SCOPE Tcl_Size TclParseAllWhiteSpace(const char *src, Tcl_Size numBytes); |
| ︙ | ︙ |
Changes to generic/tclListTypes.c.
| ︙ | ︙ | |||
373 374 375 376 377 378 379 |
* IMPORTANT - current implementation is read-only except for reverseProc.
* That is, the functions below that set or modify elements must be NULL. If
* you change this, be aware that both the object and internal
* representation (targetObj) may be shared and must be checked before
* modification.
*/
static const Tcl_ObjType lreverseType = {
| | | | | | | | | | | | | | | 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 |
* IMPORTANT - current implementation is read-only except for reverseProc.
* That is, the functions below that set or modify elements must be NULL. If
* you change this, be aware that both the object and internal
* representation (targetObj) may be shared and must be checked before
* modification.
*/
static const Tcl_ObjType lreverseType = {
"reversedList", // name
LreverseFreeIntrep, // freeIntRepProc
LreverseDupIntrep, // dupIntRepProc
TclAbstractListUpdateString, // updateStringProc
NULL, // setFromAnyProc
TCL_OBJTYPE_V2(LreverseTypeLength, // lengthProc
LreverseTypeIndex, // indexProc
NULL, // sliceProc
LreverseTypeReverse, // reverseProc
NULL, // getElementsProc
NULL, // setElementProc - FUTURES
NULL, // replaceProc - FUTURES
LreverseTypeInOper) // inOperProc
};
static void
LreverseFreeIntrep(
Tcl_Obj *objPtr)
{
Tcl_DecrRefCount((Tcl_Obj *)objPtr->internalRep.ptrAndSize.ptr);
|
| ︙ | ︙ | |||
580 581 582 583 584 585 586 |
/*
* IMPORTANT - current implementation is read-only. That is, the
* functions below that set or modify elements are NULL. If you change
* this, be aware that both the object and internal representation
* may be shared must be checked before modification.
*/
static const Tcl_ObjType lrepeatType = {
| | | | | | | | | | | | | | | 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 |
/*
* IMPORTANT - current implementation is read-only. That is, the
* functions below that set or modify elements are NULL. If you change
* this, be aware that both the object and internal representation
* may be shared must be checked before modification.
*/
static const Tcl_ObjType lrepeatType = {
"repeatedList", // name
LrepeatFreeIntrep, // freeIntRepProc
LrepeatDupIntrep, // dupIntRepProc
TclAbstractListUpdateString, // updateStringProc
NULL, // setFromAnyProc
TCL_OBJTYPE_V2(LrepeatTypeLength, // lengthProc
LrepeatTypeIndex, // indexProc
NULL, // sliceProc
NULL, // Must be NULL - see above comment
NULL, // getElementsProc
NULL, // Must be NULL - see above comment
NULL, // Must be NULL - see above comment
LrepeatTypeInOper) // inOperProc
};
static void
LrepeatFreeIntrep(
Tcl_Obj *objPtr)
{
TclObjArrayUnref((TclObjArray *)objPtr->internalRep.ptrAndSize.ptr);
|
| ︙ | ︙ | |||
792 793 794 795 796 797 798 |
/*
* IMPORTANT - current implementation is read-only. That is, the
* functions below that set or modify elements are NULL. If you change
* this, be aware that both the object and internal representation
* may be shared and must be checked before modification.
*/
static const Tcl_ObjType lrangeType = {
| | | | | | | | | | | | | | | 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 |
/*
* IMPORTANT - current implementation is read-only. That is, the
* functions below that set or modify elements are NULL. If you change
* this, be aware that both the object and internal representation
* may be shared and must be checked before modification.
*/
static const Tcl_ObjType lrangeType = {
"rangeList", // name
LrangeFreeIntrep, // freeIntRepProc
LrangeDupIntrep, // dupIntRepProc
TclAbstractListUpdateString, // updateStringProc
NULL, // setFromAnyProc
TCL_OBJTYPE_V2(LrangeTypeLength, // lengthProc
LrangeTypeIndex, // indexProc
LrangeSlice, // sliceProc
NULL, // reverseProc, see above comment
NULL, // getElementsProc
NULL, // setElementProc, see above comment
NULL, // replaceProc, see above comment
NULL) // inOperProc
};
static inline int
LrangeMeetsLengthCriteria(
Tcl_Size rangeLen,
Tcl_Size srcLen)
{
|
| ︙ | ︙ |
Changes to generic/tclObj.c.
| ︙ | ︙ | |||
92 93 94 95 96 97 98 | * that a Tcl_Obj was not allocated by some * other thread. */ #endif /* TCL_MEM_DEBUG && TCL_THREADS */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; | | | 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | * that a Tcl_Obj was not allocated by some * other thread. */ #endif /* TCL_MEM_DEBUG && TCL_THREADS */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; static void TclThreadFinalizeContLines(void *clientData); static ThreadSpecificData *TclGetContLineTable(void); /* * Nested Tcl_Obj deletion management support * * All context references used in the object freeing code are pointers to this * structure; every thread will have its own structure instance. The purpose |
| ︙ | ︙ |
Changes to generic/tclTest.c.
| ︙ | ︙ | |||
290 291 292 293 294 295 296 | static Tcl_ObjCmdProc TestChannelEventCmd; static Tcl_ObjCmdProc TestSocketCmd; static Tcl_ObjCmdProc TestFilesystemCmd; static Tcl_ObjCmdProc TestSimpleFilesystemCmd; static void TestReport(const char *cmd, Tcl_Obj *arg1, Tcl_Obj *arg2); static Tcl_Obj * TestReportGetNativePath(Tcl_Obj *pathPtr); | | | | | | > | | | | 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 | static Tcl_ObjCmdProc TestChannelEventCmd; static Tcl_ObjCmdProc TestSocketCmd; static Tcl_ObjCmdProc TestFilesystemCmd; static Tcl_ObjCmdProc TestSimpleFilesystemCmd; static void TestReport(const char *cmd, Tcl_Obj *arg1, Tcl_Obj *arg2); static Tcl_Obj * TestReportGetNativePath(Tcl_Obj *pathPtr); static Tcl_FSStatProc TestReportStat; static Tcl_FSAccessProc TestReportAccess; static Tcl_FSOpenFileChannelProc TestReportOpenFileChannel; static Tcl_FSMatchInDirectoryProc TestReportMatchInDirectory; static Tcl_FSChdirProc TestReportChdir; static Tcl_FSLstatProc TestReportLstat; static Tcl_FSCopyFileProc TestReportCopyFile; static Tcl_FSDeleteFileProc TestReportDeleteFile; static Tcl_FSRenameFileProc TestReportRenameFile; static Tcl_FSCreateDirectoryProc TestReportCreateDirectory; static Tcl_FSCopyDirectoryProc TestReportCopyDirectory; static Tcl_FSRemoveDirectoryProc TestReportRemoveDirectory; static int TestReportLoadFile(Tcl_Interp *interp, Tcl_Obj *pathPtr, Tcl_LoadHandle *handlePtr, Tcl_FSUnloadFileProc **unloadProcPtr); static Tcl_FSLinkProc TestReportLink; static Tcl_FSFileAttrStringsProc TestReportFileAttrStrings; static Tcl_FSFileAttrsGetProc TestReportFileAttrsGet; static Tcl_FSFileAttrsSetProc TestReportFileAttrsSet; static Tcl_FSUtimeProc TestReportUtime; static Tcl_FSNormalizePathProc TestReportNormalizePath; static Tcl_FSPathInFilesystemProc TestReportInFilesystem; static Tcl_FSFreeInternalRepProc TestReportFreeInternalRep; static Tcl_FSDupInternalRepProc TestReportDupInternalRep; static Tcl_ObjCmdProc TestServiceModeCmd; static Tcl_FSStatProc SimpleStat; static Tcl_FSAccessProc SimpleAccess; static Tcl_FSOpenFileChannelProc SimpleOpenFileChannel; static Tcl_FSListVolumesProc SimpleListVolumes; static Tcl_FSPathInFilesystemProc SimplePathInFilesystem; static Tcl_Obj * SimpleRedirect(Tcl_Obj *pathPtr); static Tcl_FSMatchInDirectoryProc SimpleMatchInDirectory; static Tcl_ObjCmdProc TestUtfNextCmd; |
| ︙ | ︙ | |||
2075 2076 2077 2078 2079 2080 2081 | } /* * The procedure below is used as a special freeProc to test how well * Tcl_DStringGetResult handles freeProc's other than free. */ | | > | 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 |
}
/*
* The procedure below is used as a special freeProc to test how well
* Tcl_DStringGetResult handles freeProc's other than free.
*/
static void
SpecialFree(
void *blockPtr) /* Block to free. */
{
Tcl_Free(((char *)blockPtr) - 16);
}
/*
*------------------------------------------------------------------------
|
| ︙ | ︙ | |||
2119 2120 2121 2122 2123 2124 2125 | *------------------------------------------------------------------------ */ typedef int UtfTransformFn(Tcl_Interp *interp, Tcl_Encoding encoding, const char *src, Tcl_Size srcLen, int flags, Tcl_EncodingState *statePtr, char *dst, Tcl_Size dstLen, int *srcReadPtr, int *dstWrotePtr, int *dstCharsPtr); | | > | > > > | 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 |
*------------------------------------------------------------------------
*/
typedef int
UtfTransformFn(Tcl_Interp *interp, Tcl_Encoding encoding, const char *src,
Tcl_Size srcLen, int flags, Tcl_EncodingState *statePtr, char *dst,
Tcl_Size dstLen, int *srcReadPtr, int *dstWrotePtr, int *dstCharsPtr);
static int
UtfExtWrapper(
Tcl_Interp *interp,
UtfTransformFn *transformer,
int objc,
Tcl_Obj *const objv[])
{
Tcl_Encoding encoding;
Tcl_EncodingState encState, *encStatePtr;
Tcl_Size srcLen, bufLen;
const unsigned char *bytes;
unsigned char *bufPtr;
int srcRead, dstLen, dstWrote, dstChars;
|
| ︙ | ︙ |
Changes to generic/tclTestABSList.c.
| ︙ | ︙ | |||
9 10 11 12 13 14 15 | #include <limits.h> #include "tclInt.h" /* * Forward references */ | | | | | > | | | | | | | | | | | | | | | | 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <limits.h>
#include "tclInt.h"
/*
* Forward references
*/
Tcl_Obj * myNewLStringObj(Tcl_WideInt start, Tcl_WideInt length);
static void freeRep(Tcl_Obj* alObj);
static Tcl_Obj * my_LStringObjSetElem(Tcl_Interp *interp, Tcl_Obj *listPtr,
Tcl_Size numIndcies, Tcl_Obj *const indicies[],
Tcl_Obj *valueObj);
static void DupLStringRep(Tcl_Obj *srcPtr, Tcl_Obj *copyPtr);
static Tcl_Size my_LStringObjLength(Tcl_Obj *lstringObjPtr);
static int my_LStringObjIndex(Tcl_Interp *interp, Tcl_Obj *lstringObj,
Tcl_Size index, Tcl_Obj **charObjPtr);
static int my_LStringObjRange(Tcl_Interp *interp, Tcl_Obj *lstringObj,
Tcl_Size fromIdx, Tcl_Size toIdx, Tcl_Obj **newObjPtr);
static int my_LStringObjReverse(Tcl_Interp *interp, Tcl_Obj *srcObj,
Tcl_Obj **newObjPtr);
static int my_LStringReplace(Tcl_Interp *interp, Tcl_Obj *listObj,
Tcl_Size first, Tcl_Size numToDelete, Tcl_Size numToInsert,
Tcl_Obj *const insertObjs[]);
static int my_LStringGetElements(Tcl_Interp *interp, Tcl_Obj *listPtr,
Tcl_Size *objcptr, Tcl_Obj ***objvptr);
static void lstringFreeElements(Tcl_Obj* lstringObj);
static void UpdateStringOfLString(Tcl_Obj *objPtr);
/*
* Internal Representation of an lstring type value
*/
typedef struct LString {
char *string; // NULL terminated utf-8 string
|
| ︙ | ︙ | |||
59 60 61 62 63 64 65 | my_LStringObjLength, /* Length */ my_LStringObjIndex, /* Index */ my_LStringObjRange, /* Slice */ my_LStringObjReverse, /* Reverse */ my_LStringGetElements, /* GetElements */ my_LStringObjSetElem, /* SetElement */ my_LStringReplace, /* Replace */ | | | | | | | | | | | | | | | | | | < | 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 |
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*1*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
NULL, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*2*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
NULL, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*3*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
NULL, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*4*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
NULL, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*5*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
NULL, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*6*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
NULL, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*7*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
NULL, /* Replace */
NULL) /* "in" operator */
},
{/*8*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*9*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
},
{/*10*/
"lstring",
freeRep,
DupLStringRep,
UpdateStringOfLString,
NULL,
TCL_OBJTYPE_V2(
my_LStringObjLength, /* Length */
my_LStringObjIndex, /* Index */
my_LStringObjRange, /* Slice */
my_LStringObjReverse, /* Reverse */
my_LStringGetElements, /* GetElements */
my_LStringObjSetElem, /* SetElement */
my_LStringReplace, /* Replace */
NULL) /* "in" operator */
}
};
/*
*----------------------------------------------------------------------
*
* my_LStringObjIndex --
*
* Implements the AbstractList Index function for the lstring type. The
|
| ︙ | ︙ | |||
1202 1203 1204 1205 1206 1207 1208 |
Tcl_WrongNumArgs(interp, 1, objv, "length cmd ?args?");
return TCL_ERROR;
}
/*
* lgen package init
*/
| > > | > | 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 |
Tcl_WrongNumArgs(interp, 1, objv, "length cmd ?args?");
return TCL_ERROR;
}
/*
* lgen package init
*/
int
Lgen_Init(
Tcl_Interp *interp)
{
if (Tcl_InitStubs(interp, "9.0-", 0) == NULL) {
return TCL_ERROR;
}
Tcl_CreateObjCommand(interp, "lgen", lGenObjCmd, NULL, NULL);
Tcl_PkgProvide(interp, "lgen", "1.0");
return TCL_OK;
}
|
| ︙ | ︙ |
Changes to generic/tclTestObj.c.
| ︙ | ︙ | |||
27 28 29 30 31 32 33 | #endif #include "tclStringRep.h" /* * Forward declarations for functions defined later in this file: */ | | > | > | 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #endif #include "tclStringRep.h" /* * Forward declarations for functions defined later in this file: */ static int CheckIfVarUnset(Tcl_Interp *interp, Tcl_Obj **varPtr, Tcl_Size varIndex); static int GetVariableIndex(Tcl_Interp *interp, Tcl_Obj *obj, Tcl_Size *indexPtr); static void SetVarToObj(Tcl_Obj **varPtr, Tcl_Size varIndex, Tcl_Obj *objPtr); static Tcl_ObjCmdProc TestbignumobjCmd; static Tcl_ObjCmdProc TestbooleanobjCmd; static Tcl_ObjCmdProc TestdoubleobjCmd; static Tcl_ObjCmdProc TestindexobjCmd; static Tcl_ObjCmdProc TestintobjCmd; static Tcl_ObjCmdProc TestlistobjCmd; static Tcl_ObjCmdProc TestobjCmd; |
| ︙ | ︙ | |||
1060 1061 1062 1063 1064 1065 1066 | * * Side effects: * Creates and frees objects. * *---------------------------------------------------------------------- */ | | > > > > | | 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 |
*
* Side effects:
* Creates and frees objects.
*
*----------------------------------------------------------------------
*/
static Tcl_Size
V1TestListObjLength(
TCL_UNUSED(Tcl_Obj *))
{
return 100;
}
static int
V1TestListObjIndex(
TCL_UNUSED(Tcl_Interp *),
TCL_UNUSED(Tcl_Obj *),
TCL_UNUSED(Tcl_Size),
Tcl_Obj **objPtr)
{
*objPtr = Tcl_NewStringObj("This indexProc should never be accessed (bug: e58d7e19e9)", -1);
return TCL_OK;
|
| ︙ | ︙ | |||
1086 1087 1088 1089 1090 1091 1092 |
NULL, /* setFromAnyProc */
offsetof(Tcl_ObjType, indexProc), /* This is a V1 objType, which doesn't have an indexProc */
V1TestListObjLength, /* always return 100, doesn't really matter */
V1TestListObjIndex, /* should never be accessed, because this objType = V1*/
NULL, NULL, NULL, NULL, NULL, NULL
};
| < | < | < | 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 |
NULL, /* setFromAnyProc */
offsetof(Tcl_ObjType, indexProc), /* This is a V1 objType, which doesn't have an indexProc */
V1TestListObjLength, /* always return 100, doesn't really matter */
V1TestListObjIndex, /* should never be accessed, because this objType = V1*/
NULL, NULL, NULL, NULL, NULL, NULL
};
static void
HugeUpdateString(
TCL_UNUSED(Tcl_Obj *))
{
/* Always returns NULL, as an indication that
* room for its string representation cannot be allocated */
return;
}
static const Tcl_ObjType hugeType = {
"huge", /* name */
NULL, /* freeIntRepProc */
NULL, /* dupIntRepProc */
HugeUpdateString, /* updateStringProc */
NULL, /* setFromAnyProc */
TCL_OBJTYPE_V0
};
static int
TestobjCmd(
TCL_UNUSED(void *),
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
|
| ︙ | ︙ | |||
1644 1645 1646 1647 1648 1649 1650 | * * Side effects: * Interpreter result holds result or error message. * *------------------------------------------------------------------------ */ static int | | | 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 |
*
* Side effects:
* Interpreter result holds result or error message.
*
*------------------------------------------------------------------------
*/
static int
TestbigdataCmd(
TCL_UNUSED(void *),
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
static const char *const subcmds[] = {
"string", "bytearray", "list", "dict", NULL
|
| ︙ | ︙ | |||
1755 1756 1757 1758 1759 1760 1761 |
Tcl_DictObjPut(interp, objPtr, objPtr2, objPtr2);
}
Tcl_SetObjResult(interp, objPtr);
break;
}
return TCL_OK;
}
| | | 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 |
Tcl_DictObjPut(interp, objPtr, objPtr2, objPtr2);
}
Tcl_SetObjResult(interp, objPtr);
break;
}
return TCL_OK;
}
/*
*----------------------------------------------------------------------
*
* SetVarToObj --
*
* Utility routine to assign a Tcl_Obj* to a test variable. The
* Tcl_Obj* can be NULL.
|
| ︙ | ︙ | |||
1865 1866 1867 1868 1869 1870 1871 |
Tcl_AppendToObj(Tcl_GetObjResult(interp), buf, -1);
return 1;
}
return 0;
}
static int
| | | | | | | 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 |
Tcl_AppendToObj(Tcl_GetObjResult(interp), buf, -1);
return 1;
}
return 0;
}
static int
TestisemptyCmd(
TCL_UNUSED(void *),
Tcl_Interp *interp, /* Current interpreter. */
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
Tcl_Obj *result;
if (objc != 2) {
Tcl_WrongNumArgs(interp, 1, objv, "value");
return TCL_ERROR;
}
result = Tcl_NewIntObj(Tcl_IsEmpty(objv[1]));
if (!objv[1]->bytes) {
Tcl_AppendToObj(result, " pure", TCL_INDEX_NONE);
}
if (objv[1]->typePtr) {
Tcl_AppendToObj(result, " ", TCL_INDEX_NONE);
Tcl_AppendToObj(result, objv[1]->typePtr->name, TCL_INDEX_NONE);
}
Tcl_SetObjResult(interp, result);
return TCL_OK;
}
/*
* Local Variables:
* mode: c
* c-basic-offset: 4
* fill-column: 78
* End:
*/
|
Changes to generic/tclTomMath.h.
1 2 3 4 5 | #ifndef BN_TCL_H_ #define BN_TCL_H_ #include <stdint.h> #if defined(TCL_NO_TOMMATH_H) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#ifndef BN_TCL_H_
#define BN_TCL_H_
#include <stdint.h>
#if defined(TCL_NO_TOMMATH_H)
typedef size_t mp_digit;
typedef int mp_sign;
# define MP_ZPOS 0 /* positive integer */
# define MP_NEG 1 /* negative */
typedef int mp_ord;
# define MP_LT -1 /* less than */
# define MP_EQ 0 /* equal to */
# define MP_GT 1 /* greater than */
typedef int mp_err;
# define MP_OKAY 0 /* no error */
# define MP_ERR -1 /* unknown error */
# define MP_MEM -2 /* out of mem */
# define MP_VAL -3 /* invalid input */
# define MP_ITER -4 /* maximum iterations reached */
# define MP_BUF -5 /* buffer overflow, supplied buffer too small */
typedef int mp_order;
# define MP_LSB_FIRST -1
# define MP_MSB_FIRST 1
typedef int mp_endian;
# define MP_LITTLE_ENDIAN -1
# define MP_NATIVE_ENDIAN 0
# define MP_BIG_ENDIAN 1
# define MP_DEPRECATED_PRAGMA(s) /* nothing */
# define MP_WUR /* nothing */
# define mp_iszero(a) ((a)->used == 0)
# define mp_isneg(a) ((a)->sign != 0)
/* the infamous mp_int structure */
# ifndef MP_INT_DECLARED
# define MP_INT_DECLARED
typedef struct mp_int mp_int;
# endif
struct mp_int {
int used, alloc;
mp_sign sign;
mp_digit *dp;
};
#elif !defined(BN_H_) /* If BN_H_ already defined, don't try to include tommath.h again. */
# include "tommath.h"
#endif
#include "tclTomMathDecls.h" /* IWYU pragma: export */
|
| ︙ | ︙ |
Changes to unix/tclAppInit.c.
| ︙ | ︙ | |||
29 30 31 32 33 34 35 | extern Tcl_LibraryInitProc Tcltest_SafeInit; #ifdef __cplusplus } #endif #endif /* TCL_TEST */ #ifdef TCL_XT_TEST | | | 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | extern Tcl_LibraryInitProc Tcltest_SafeInit; #ifdef __cplusplus } #endif #endif /* TCL_TEST */ #ifdef TCL_XT_TEST extern void XtToolkitInitialize(void); extern Tcl_LibraryInitProc Tclxttest_Init; #endif /* TCL_XT_TEST */ /* * The following #if block allows you to change the AppInit function by using * a #define of TCL_LOCAL_APPINIT instead of rewriting this entire file. The * #if checks for that #define and uses Tcl_AppInit if it does not exist. |
| ︙ | ︙ |
Changes to unix/tclSelectNotfy.c.
| ︙ | ︙ | |||
249 250 251 252 253 254 255 |
void *hIcon;
void *hCursor;
void *hbrBackground;
const void *lpszMenuName;
const void *lpszClassName;
} WNDCLASSW;
| | | | | | | | | | | | | | | | | | 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 |
void *hIcon;
void *hCursor;
void *hbrBackground;
const void *lpszMenuName;
const void *lpszClassName;
} WNDCLASSW;
extern void CloseHandle(void *);
extern void * CreateEventW(void *, unsigned char, unsigned char,
void *);
extern void * CreateWindowExW(void *, const void *, const void *,
unsigned int, int, int, int, int, void *, void *,
void *, void *);
extern unsigned int DefWindowProcW(void *, int, void *, void *);
extern unsigned char DestroyWindow(void *);
extern int DispatchMessageW(const MSG *);
extern unsigned char GetMessageW(MSG *, void *, int, int);
extern void MsgWaitForMultipleObjects(unsigned int, void *,
unsigned char, unsigned int, unsigned int);
extern unsigned char PeekMessageW(MSG *, void *, int, int, int);
extern unsigned char PostMessageW(void *, unsigned int, void *,
void *);
extern void PostQuitMessage(int);
extern void * RegisterClassW(const WNDCLASSW *);
extern unsigned char ResetEvent(void *);
extern unsigned char TranslateMessage(const MSG *);
/*
* Threaded-cygwin specific constants and functions in this file:
*/
#if TCL_THREADS && defined(__CYGWIN__)
static const WCHAR className[] = L"TclNotifier";
static unsigned int NotifierProc(void *hwnd, unsigned int message,
void *wParam, void *lParam);
#endif /* TCL_THREADS && defined(__CYGWIN__) */
#ifdef __cplusplus
}
#endif
#endif /* TCL_THREADS && __CYGWIN__ */
|
| ︙ | ︙ |
Changes to unix/tclUnixPort.h.
| ︙ | ︙ | |||
642 643 644 645 646 647 648 | MODULE_SCOPE struct passwd * TclpGetPwNam(const char *name); MODULE_SCOPE struct group * TclpGetGrNam(const char *name); MODULE_SCOPE struct passwd * TclpGetPwUid(uid_t uid); MODULE_SCOPE struct group * TclpGetGrGid(gid_t gid); MODULE_SCOPE struct hostent * TclpGetHostByName(const char *name); MODULE_SCOPE struct hostent * TclpGetHostByAddr(const char *addr, int length, int type); | | | 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 | MODULE_SCOPE struct passwd * TclpGetPwNam(const char *name); MODULE_SCOPE struct group * TclpGetGrNam(const char *name); MODULE_SCOPE struct passwd * TclpGetPwUid(uid_t uid); MODULE_SCOPE struct group * TclpGetGrGid(gid_t gid); MODULE_SCOPE struct hostent * TclpGetHostByName(const char *name); MODULE_SCOPE struct hostent * TclpGetHostByAddr(const char *addr, int length, int type); MODULE_SCOPE void * TclpMakeTcpClientChannelMode( void *tcpSocket, int mode); #endif /* _TCLUNIXPORT */ /* * Local Variables: * mode: c |
| ︙ | ︙ |
Changes to unix/tclUnixSock.c.
| ︙ | ︙ | |||
19 20 21 22 23 24 25 | */ #define SET_BITS(var, bits) ((var) |= (bits)) #define CLEAR_BITS(var, bits) ((var) &= ~(bits)) #define GOT_BITS(var, bits) (((var) & (bits)) != 0) /* "sock" + a pointer in hex + \0 */ | | | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | */ #define SET_BITS(var, bits) ((var) |= (bits)) #define CLEAR_BITS(var, bits) ((var) &= ~(bits)) #define GOT_BITS(var, bits) (((var) & (bits)) != 0) /* "sock" + a pointer in hex + \0 */ #define SOCK_CHAN_LENGTH (4 + sizeof(void *) * 2 + 1) #define SOCK_TEMPLATE "sock%" TCL_Z_MODIFIER "x" #undef SOCKET /* Possible conflict with win32 SOCKET */ /* * This is needed to comply with the strict aliasing rules of GCC, but it also * simplifies casting between the different sockaddr types. */ |
| ︙ | ︙ |
Changes to win/tclWinConsole.c.
| ︙ | ︙ | |||
2018 2019 2020 2021 2022 2023 2024 |
GetConsoleMode(consoleHandle, &handleInfoPtr->initMode);
consoleMode = handleInfoPtr->initMode;
consoleMode &= ~(ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT);
consoleMode |= ENABLE_LINE_INPUT;
SetConsoleMode(consoleHandle, consoleMode);
}
handleInfoPtr->consoleThread = CreateThread(
| | | | | | 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 |
GetConsoleMode(consoleHandle, &handleInfoPtr->initMode);
consoleMode = handleInfoPtr->initMode;
consoleMode &= ~(ENABLE_WINDOW_INPUT | ENABLE_MOUSE_INPUT);
consoleMode |= ENABLE_LINE_INPUT;
SetConsoleMode(consoleHandle, consoleMode);
}
handleInfoPtr->consoleThread = CreateThread(
NULL, /* default security descriptor */
2*CONSOLE_BUFFER_SIZE, /* Stack size - gets rounded up to granularity */
permissions == TCL_READABLE ? ConsoleReaderThread : ConsoleWriterThread,
handleInfoPtr, /* Pass to thread */
0, /* Flags - no special cases */
NULL); /* Don't care about thread id */
if (handleInfoPtr->consoleThread == NULL) {
/* Note - SRWLock and condition variables do not need finalization */
RingBufferClear(&handleInfoPtr->buffer);
Tcl_Free(handleInfoPtr);
return NULL;
}
|
| ︙ | ︙ |
Changes to win/tclWinFile.c.
| ︙ | ︙ | |||
12 13 14 15 16 17 18 | * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclWinInt.h" #include "tclFileSystem.h" #include <winioctl.h> #include <shlobj.h> | | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | * this file, and for a DISCLAIMER OF ALL WARRANTIES. */ #include "tclWinInt.h" #include "tclFileSystem.h" #include <winioctl.h> #include <shlobj.h> #include <lm.h> /* For TclpGetUserHome(). */ #include <userenv.h> /* For TclpGetUserHome(). */ #include <aclapi.h> /* For GetNamedSecurityInfo(). */ #if defined (__clang__) && (__clang_major__ > 20) #pragma clang diagnostic ignored "-Wc++-keyword" #endif #ifdef _MSC_VER # pragma comment(lib, "userenv.lib") #endif /* |
| ︙ | ︙ | |||
3356 3357 3358 3359 3360 3361 3362 |
}
/*
* Free allocations and be done.
*/
if (secd) {
| | | | 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 |
}
/*
* Free allocations and be done.
*/
if (secd) {
LocalFree(secd); /* Also frees ownerSid */
}
if (buf) {
Tcl_Free(buf);
}
return (owned != 0); /* Convert non-0 to 1 */
}
/*
* Local Variables:
* mode: c
* c-basic-offset: 4
* fill-column: 78
* End:
*/
|
Changes to win/tclWinInit.c.
| ︙ | ︙ | |||
73 74 75 76 77 78 79 | * * Callback to retrieve Windows version information. To be invoked only * through InitOnceExecuteOnce for thread safety. * * Results: * None. */ | | > | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
*
* Callback to retrieve Windows version information. To be invoked only
* through InitOnceExecuteOnce for thread safety.
*
* Results:
* None.
*/
static BOOL CALLBACK
TclpGetWindowsVersionOnce(
TCL_UNUSED(PINIT_ONCE),
TCL_UNUSED(PVOID),
PVOID *lpContext)
{
typedef int(__stdcall getVersionProc)(void *);
static OSVERSIONINFOW osInfo;
|
| ︙ | ︙ | |||
109 110 111 112 113 114 115 | * * Returns a pointer to the OSVERSIONINFOW structure containing the * version information for the current Windows version. * * Results: * Pointer to OSVERSIONINFOW structure. */ | | > | 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 |
*
* Returns a pointer to the OSVERSIONINFOW structure containing the
* version information for the current Windows version.
*
* Results:
* Pointer to OSVERSIONINFOW structure.
*/
static const OSVERSIONINFOW *
TclpGetWindowsVersion(void)
{
static INIT_ONCE osInfoOnce = INIT_ONCE_STATIC_INIT;
OSVERSIONINFOW *osInfoPtr = NULL;
BOOL result = InitOnceExecuteOnce(
&osInfoOnce, TclpGetWindowsVersionOnce, NULL, (LPVOID *)&osInfoPtr);
return result ? osInfoPtr : NULL;
}
|
| ︙ | ︙ |
Changes to win/tclWinInt.h.
| ︙ | ︙ | |||
30 31 32 33 34 35 36 | char *channelName, int permissions); MODULE_SCOPE HANDLE TclWinSerialOpen(HANDLE handle, const WCHAR *name, DWORD access); MODULE_SCOPE int TclWinSymLinkCopyDirectory(const WCHAR *LinkOriginal, const WCHAR *LinkCopy); MODULE_SCOPE int TclWinSymLinkDelete(const WCHAR *LinkOriginal, int linkOnly); | | | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | char *channelName, int permissions); MODULE_SCOPE HANDLE TclWinSerialOpen(HANDLE handle, const WCHAR *name, DWORD access); MODULE_SCOPE int TclWinSymLinkCopyDirectory(const WCHAR *LinkOriginal, const WCHAR *LinkCopy); MODULE_SCOPE int TclWinSymLinkDelete(const WCHAR *LinkOriginal, int linkOnly); MODULE_SCOPE int TclWinFileOwned(Tcl_Obj *); MODULE_SCOPE void TclWinGenerateChannelName(char channelName[], const char *channelTypeName, void *channelImpl); MODULE_SCOPE const char*TclpGetUserName(Tcl_DString *bufferPtr); /* Needed by tclWinFile.c and tclWinFCmd.c */ #ifndef FILE_ATTRIBUTE_REPARSE_POINT #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400 |
| ︙ | ︙ |
Changes to win/tclWinPort.h.
| ︙ | ︙ | |||
350 351 352 353 354 355 356 | /* * Define macros to query file type bits, if they're not already * defined. */ #ifndef S_IFLNK | | | 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 | /* * Define macros to query file type bits, if they're not already * defined. */ #ifndef S_IFLNK # define S_IFLNK 0120000 /* Symbolic Link */ #endif /* * Windows compilers do not define S_IFBLK. However, Tcl uses it in * GetTypeFromMode to identify blockSpecial devices based on the * value in the statsbuf st_mode field. We have no other way to pass this * from NativeStat on Windows so are forced to define it here. |
| ︙ | ︙ |