Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Merge 8.7. Change some internal function signatures, accounting for the 64-bit era. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
4280c4f9d0430b09ddfa7773cedff592 |
User & Date: | jan.nijtmans 2018-09-05 13:45:15.287 |
Context
2018-09-07
| ||
12:04 | merge 8.7 (segfault fix) check-in: 04f3cf7430 user: sebres tags: trunk | |
2018-09-05
| ||
14:54 | Merge trunk. Also rename TCL_NO_LENGTH -> TCL_AUTO_LENGTH check-in: 6488c06992 user: jan.nijtmans tags: memory-API | |
13:45 | Merge 8.7. Change some internal function signatures, accounting for the 64-bit era. check-in: 4280c4f9d0 user: jan.nijtmans tags: trunk | |
12:11 | Minor code cleanup. win/tclWinPipe.c: Eliminate some compiler warnings on mingw-w64 win/tclWinNotif... check-in: 35eb0692c1 user: jan.nijtmans tags: core-8-branch | |
2018-09-04
| ||
14:37 | Merge 8.7 check-in: cbb275cb09 user: jan.nijtmans tags: trunk | |
Changes
Changes to generic/tclBasic.c.
︙ | ︙ | |||
6969 6970 6971 6972 6973 6974 6975 | ClientData clientData, /* Ignored. */ Tcl_Interp *interp, /* The interpreter in which to execute the * function. */ int objc, /* Actual parameter count. */ Tcl_Obj *const *objv) /* Actual parameter vector. */ { Tcl_WideInt wResult; | < < | | 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 | ClientData clientData, /* Ignored. */ Tcl_Interp *interp, /* The interpreter in which to execute the * function. */ int objc, /* Actual parameter count. */ Tcl_Obj *const *objv) /* Actual parameter vector. */ { Tcl_WideInt wResult; if (ExprEntierFunc(NULL, interp, objc, objv) != TCL_OK) { return TCL_ERROR; } TclGetWideBitsFromObj(NULL, Tcl_GetObjResult(interp), &wResult); Tcl_SetObjResult(interp, Tcl_NewWideIntObj(wResult)); return TCL_OK; } /* * Common implmentation of max() and min(). */ |
︙ | ︙ | |||
7078 7079 7080 7081 7082 7083 7084 | iPtr->randSeed = TclpGetClicks() + (PTR2INT(Tcl_GetCurrentThread())<<12); /* * Make sure 1 <= randSeed <= (2^31) - 2. See below. */ | | | 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 | iPtr->randSeed = TclpGetClicks() + (PTR2INT(Tcl_GetCurrentThread())<<12); /* * Make sure 1 <= randSeed <= (2^31) - 2. See below. */ iPtr->randSeed &= 0x7fffffff; if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) { iPtr->randSeed ^= 123459876; } } /* * Generate the random number using the linear congruential generator |
︙ | ︙ | |||
7243 7244 7245 7246 7247 7248 7249 | /* * Reset the seed. Make sure 1 <= randSeed <= 2^31 - 2. See comments in * ExprRandFunc for more details. */ iPtr->flags |= RAND_SEED_INITIALIZED; | | | 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 | /* * Reset the seed. Make sure 1 <= randSeed <= 2^31 - 2. See comments in * ExprRandFunc for more details. */ iPtr->flags |= RAND_SEED_INITIALIZED; iPtr->randSeed = (long) w & 0x7fffffff; if ((iPtr->randSeed == 0) || (iPtr->randSeed == 0x7fffffff)) { iPtr->randSeed ^= 123459876; } /* * To avoid duplicating the random number generation code we simply clean * up our state and call the real random number function. That function |
︙ | ︙ |
Changes to generic/tclInt.decls.
︙ | ︙ | |||
305 306 307 308 309 310 311 | #declare 73 { # int TclpDeleteFile(const char *path) #} declare 74 { void TclpFree(char *ptr) } declare 75 { | | | | 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 | #declare 73 { # int TclpDeleteFile(const char *path) #} declare 74 { void TclpFree(char *ptr) } declare 75 { Tcl_WideUInt TclpGetClicks(void) } declare 76 { Tcl_WideUInt TclpGetSeconds(void) } # Removed in 9.0: #declare 77 { # void TclpGetTime(Tcl_Time *time) #} # Removed in 8.6: |
︙ | ︙ | |||
1098 1099 1100 1101 1102 1103 1104 | #} # Removed in 9.0: #declare 7 win { # int TclWinSetSockOpt(SOCKET s, int level, int optname, # const char *optval, int optlen) #} declare 8 win { | | | 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 | #} # Removed in 9.0: #declare 7 win { # int TclWinSetSockOpt(SOCKET s, int level, int optname, # const char *optval, int optlen) #} declare 8 win { size_t TclpGetPid(Tcl_Pid pid) } # Removed in 9.0: #declare 9 win { # int TclWinGetPlatformId(void) #} # Removed in 9.0: #declare 10 win { |
︙ | ︙ | |||
1156 1157 1158 1159 1160 1161 1162 | declare 18 win { TclFile TclpMakeFile(Tcl_Channel channel, int direction) } declare 19 win { TclFile TclpOpenFile(const char *fname, int mode) } declare 20 win { | | | 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 | declare 18 win { TclFile TclpMakeFile(Tcl_Channel channel, int direction) } declare 19 win { TclFile TclpOpenFile(const char *fname, int mode) } declare 20 win { void TclWinAddProcess(HANDLE hProcess, size_t id) } # Removed in 9.0: #declare 21 win { # char *TclpInetNtoa(struct in_addr addr) #} # removed permanently for 8.4 #declare 21 win { |
︙ | ︙ |
Changes to generic/tclIntDecls.h.
︙ | ︙ | |||
191 192 193 194 195 196 197 | /* Slot 70 is reserved */ /* Slot 71 is reserved */ /* Slot 72 is reserved */ /* Slot 73 is reserved */ /* 74 */ EXTERN void TclpFree(char *ptr); /* 75 */ | | | | 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 | /* Slot 70 is reserved */ /* Slot 71 is reserved */ /* Slot 72 is reserved */ /* Slot 73 is reserved */ /* 74 */ EXTERN void TclpFree(char *ptr); /* 75 */ EXTERN Tcl_WideUInt TclpGetClicks(void); /* 76 */ EXTERN Tcl_WideUInt TclpGetSeconds(void); /* Slot 77 is reserved */ /* Slot 78 is reserved */ /* Slot 79 is reserved */ /* Slot 80 is reserved */ /* 81 */ EXTERN char * TclpRealloc(char *ptr, unsigned int size); /* Slot 82 is reserved */ |
︙ | ︙ | |||
655 656 657 658 659 660 661 | void (*reserved68)(void); char * (*tclpAlloc) (unsigned int size); /* 69 */ void (*reserved70)(void); void (*reserved71)(void); void (*reserved72)(void); void (*reserved73)(void); void (*tclpFree) (char *ptr); /* 74 */ | | | | 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 | void (*reserved68)(void); char * (*tclpAlloc) (unsigned int size); /* 69 */ void (*reserved70)(void); void (*reserved71)(void); void (*reserved72)(void); void (*reserved73)(void); void (*tclpFree) (char *ptr); /* 74 */ Tcl_WideUInt (*tclpGetClicks) (void); /* 75 */ Tcl_WideUInt (*tclpGetSeconds) (void); /* 76 */ void (*reserved77)(void); void (*reserved78)(void); void (*reserved79)(void); void (*reserved80)(void); char * (*tclpRealloc) (char *ptr, unsigned int size); /* 81 */ void (*reserved82)(void); void (*reserved83)(void); |
︙ | ︙ |
Changes to generic/tclIntPlatDecls.h.
︙ | ︙ | |||
104 105 106 107 108 109 110 | /* 4 */ EXTERN HINSTANCE TclWinGetTclInstance(void); /* 5 */ EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout); /* Slot 6 is reserved */ /* Slot 7 is reserved */ /* 8 */ | | | 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | /* 4 */ EXTERN HINSTANCE TclWinGetTclInstance(void); /* 5 */ EXTERN int TclUnixWaitForFile(int fd, int mask, int timeout); /* Slot 6 is reserved */ /* Slot 7 is reserved */ /* 8 */ EXTERN size_t TclpGetPid(Tcl_Pid pid); /* Slot 9 is reserved */ /* Slot 10 is reserved */ /* 11 */ EXTERN void TclGetAndDetachPids(Tcl_Interp *interp, Tcl_Channel chan); /* 12 */ EXTERN int TclpCloseFile(TclFile file); |
︙ | ︙ | |||
134 135 136 137 138 139 140 | const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 18 */ EXTERN TclFile TclpMakeFile(Tcl_Channel channel, int direction); /* 19 */ EXTERN TclFile TclpOpenFile(const char *fname, int mode); /* 20 */ | | | 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 18 */ EXTERN TclFile TclpMakeFile(Tcl_Channel channel, int direction); /* 19 */ EXTERN TclFile TclpOpenFile(const char *fname, int mode); /* 20 */ EXTERN void TclWinAddProcess(HANDLE hProcess, size_t id); /* Slot 21 is reserved */ /* 22 */ EXTERN TclFile TclpCreateTempFile(const char *contents); /* Slot 23 is reserved */ /* 24 */ EXTERN char * TclWinNoBackslash(char *path); /* Slot 25 is reserved */ |
︙ | ︙ | |||
270 271 272 273 274 275 276 | void (*reserved1)(void); void (*reserved2)(void); void (*reserved3)(void); HINSTANCE (*tclWinGetTclInstance) (void); /* 4 */ int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 5 */ void (*reserved6)(void); void (*reserved7)(void); | | | | 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 | void (*reserved1)(void); void (*reserved2)(void); void (*reserved3)(void); HINSTANCE (*tclWinGetTclInstance) (void); /* 4 */ int (*tclUnixWaitForFile) (int fd, int mask, int timeout); /* 5 */ void (*reserved6)(void); void (*reserved7)(void); size_t (*tclpGetPid) (Tcl_Pid pid); /* 8 */ void (*reserved9)(void); void (*reserved10)(void); void (*tclGetAndDetachPids) (Tcl_Interp *interp, Tcl_Channel chan); /* 11 */ int (*tclpCloseFile) (TclFile file); /* 12 */ Tcl_Channel (*tclpCreateCommandChannel) (TclFile readFile, TclFile writeFile, TclFile errorFile, int numPids, Tcl_Pid *pidPtr); /* 13 */ int (*tclpCreatePipe) (TclFile *readPipe, TclFile *writePipe); /* 14 */ int (*tclpCreateProcess) (Tcl_Interp *interp, int argc, const char **argv, TclFile inputFile, TclFile outputFile, TclFile errorFile, Tcl_Pid *pidPtr); /* 15 */ int (*tclpIsAtty) (int fd); /* 16 */ int (*tclUnixCopyFile) (const char *src, const char *dst, const Tcl_StatBuf *statBufPtr, int dontCopyAtts); /* 17 */ TclFile (*tclpMakeFile) (Tcl_Channel channel, int direction); /* 18 */ TclFile (*tclpOpenFile) (const char *fname, int mode); /* 19 */ void (*tclWinAddProcess) (HANDLE hProcess, size_t id); /* 20 */ void (*reserved21)(void); TclFile (*tclpCreateTempFile) (const char *contents); /* 22 */ void (*reserved23)(void); char * (*tclWinNoBackslash) (char *path); /* 24 */ void (*reserved25)(void); void (*reserved26)(void); void (*tclWinFlushDirtyChannels) (void); /* 27 */ |
︙ | ︙ | |||
499 500 501 502 503 504 505 | #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #define TclWinConvertWSAError TclWinConvertError #if !defined(_WIN32) # undef TclpGetPid | | | 499 500 501 502 503 504 505 506 507 508 509 | #undef TCL_STORAGE_CLASS #define TCL_STORAGE_CLASS DLLIMPORT #define TclWinConvertWSAError TclWinConvertError #if !defined(_WIN32) # undef TclpGetPid # define TclpGetPid(pid) ((size_t) (pid)) #endif #endif /* _TCLINTPLATDECLS */ |
Changes to generic/tclObj.c.
︙ | ︙ | |||
2670 2671 2672 2673 2674 2675 2676 | *---------------------------------------------------------------------- * * TclGetWideBitsFromObj -- * * Attempt to return a wide integer from the Tcl object "objPtr". If the * object is not already a int, double or bignum, an attempt will be made * to convert it to one of these. Out-of-range values don't result in an | | | 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 | *---------------------------------------------------------------------- * * TclGetWideBitsFromObj -- * * Attempt to return a wide integer from the Tcl object "objPtr". If the * object is not already a int, double or bignum, an attempt will be made * to convert it to one of these. Out-of-range values don't result in an * error, but only the least significant 64 bits will be returned. * * Results: * The return value is a standard Tcl object result. If an error occurs * during conversion, an error message is left in the interpreter's * result unless "interp" is NULL. * * Side effects: |
︙ | ︙ |
Changes to generic/tclProcess.c.
︙ | ︙ | |||
43 44 45 46 47 48 49 | * Prototypes for functions defined later in this file: */ static void InitProcessInfo(ProcessInfo *info, Tcl_Pid pid, int resolvedPid); static void FreeProcessInfo(ProcessInfo *info); static int RefreshProcessInfo(ProcessInfo *info, int options); | | | 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | * Prototypes for functions defined later in this file: */ static void InitProcessInfo(ProcessInfo *info, Tcl_Pid pid, int resolvedPid); static void FreeProcessInfo(ProcessInfo *info); static int RefreshProcessInfo(ProcessInfo *info, int options); static TclProcessWaitStatus WaitProcessStatus(Tcl_Pid pid, size_t resolvedPid, int options, int *codePtr, Tcl_Obj **msgPtr, Tcl_Obj **errorObjPtr); static Tcl_Obj * BuildProcessStatusObj(ProcessInfo *info); static int ProcessListObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); static int ProcessStatusObjCmd(ClientData clientData, |
︙ | ︙ | |||
189 190 191 192 193 194 195 | * *---------------------------------------------------------------------- */ TclProcessWaitStatus WaitProcessStatus( Tcl_Pid pid, /* Process id. */ | | | 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | * *---------------------------------------------------------------------- */ TclProcessWaitStatus WaitProcessStatus( Tcl_Pid pid, /* Process id. */ size_t resolvedPid, /* Resolved process id. */ int options, /* Options passed to Tcl_WaitPid. */ int *codePtr, /* If non-NULL, will receive either: * - 0 for normal exit. * - errno in case of error. * - non-zero exit code for abormal exit. * - signal number if killed or suspended. * - Tcl_WaitPid status in all other cases. |
︙ | ︙ | |||
795 796 797 798 799 800 801 | *---------------------------------------------------------------------- */ void TclProcessCreated( Tcl_Pid pid) /* Process id. */ { | | | 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 | *---------------------------------------------------------------------- */ void TclProcessCreated( Tcl_Pid pid) /* Process id. */ { size_t resolvedPid; Tcl_HashEntry *entry, *entry2; int isNew; ProcessInfo *info; /* * Get resolved pid first. */ |
︙ | ︙ |
Changes to generic/tclStubInit.c.
︙ | ︙ | |||
54 55 56 57 58 59 60 | #elif defined(__CYGWIN__) # define TclpIsAtty TclPlatIsAtty static void doNothing(void) { /* dummy implementation, no need to do anything */ } | | | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #elif defined(__CYGWIN__) # define TclpIsAtty TclPlatIsAtty static void doNothing(void) { /* dummy implementation, no need to do anything */ } # define TclWinAddProcess (void (*) (void *, size_t)) doNothing # define TclWinFlushDirtyChannels doNothing static int TclpIsAtty(int fd) { return isatty(fd); } |
︙ | ︙ | |||
84 85 86 87 88 89 90 | if (*p == '\\') { *p = '/'; } } return path; } | | | | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | if (*p == '\\') { *p = '/'; } } return path; } size_t TclpGetPid(Tcl_Pid pid) { return (size_t) pid; } char * Tcl_WinUtfToTChar( const char *string, int len, Tcl_DString *dsPtr) |
︙ | ︙ |
Changes to unix/tclUnixTime.c.
︙ | ︙ | |||
48 49 50 51 52 53 54 | * * Side effects: * None. * *---------------------------------------------------------------------- */ | | | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | * * Side effects: * None. * *---------------------------------------------------------------------- */ Tcl_WideUInt TclpGetSeconds(void) { return time(NULL); } /* *---------------------------------------------------------------------- |
︙ | ︙ | |||
73 74 75 76 77 78 79 | * * Side effects: * None. * *---------------------------------------------------------------------- */ | | | | | | | | | 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 | * * Side effects: * None. * *---------------------------------------------------------------------- */ Tcl_WideUInt TclpGetClicks(void) { Tcl_WideUInt now; #ifdef NO_GETTOD if (tclGetTimeProcPtr != NativeGetTime) { Tcl_Time time; tclGetTimeProcPtr(&time, tclTimeClientData); now = (Tcl_WideUInt)time.sec*1000000 + time.usec; } else { /* * A semi-NativeGetTime, specialized to clicks. */ struct tms dummy; now = (Tcl_WideUInt) times(&dummy); } #else Tcl_Time time; tclGetTimeProcPtr(&time, tclTimeClientData); now = (Tcl_WideUInt)time.sec*1000000 + time.usec; #endif return now; } #ifdef TCL_WIDE_CLICKS /* *---------------------------------------------------------------------- * * TclpGetWideClicks -- * * This procedure returns a WideInt value that represents the highest * resolution clock available on the system. There are no guarantees on * what the resolution will be. In Tcl we will call this value a "click". * The start time is also system dependent. * * Results: * Number of WideInt clicks from some start time. * * Side effects: * None. * |
︙ | ︙ |
Changes to win/tclWinNotify.c.
︙ | ︙ | |||
32 33 34 35 36 37 38 | DWORD thread; /* Identifier for thread associated with this * notifier. */ HANDLE event; /* Event object used to wake up the notifier * thread. */ int pending; /* Alert message pending, this field is locked * by the notifierMutex. */ HWND hwnd; /* Messaging window. */ | < | 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | DWORD thread; /* Identifier for thread associated with this * notifier. */ HANDLE event; /* Event object used to wake up the notifier * thread. */ int pending; /* Alert message pending, this field is locked * by the notifierMutex. */ HWND hwnd; /* Messaging window. */ int timerActive; /* 1 if interval timer is running. */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* * The following static indicates the number of threads that have initialized |
︙ | ︙ | |||
305 306 307 308 309 310 311 | */ timeout = timePtr->sec * 1000 + timePtr->usec / 1000; if (timeout == 0) { timeout = 1; } } | < | | 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | */ timeout = timePtr->sec * 1000 + timePtr->usec / 1000; if (timeout == 0) { timeout = 1; } } if (timeout != 0) { tsdPtr->timerActive = 1; SetTimer(tsdPtr->hwnd, INTERVAL_TIMER, timeout, NULL); } else { tsdPtr->timerActive = 0; KillTimer(tsdPtr->hwnd, INTERVAL_TIMER); } } } |
︙ | ︙ |
Changes to win/tclWinPipe.c.
︙ | ︙ | |||
57 58 59 60 61 62 63 | /* * This list is used to map from pids to process handles. */ typedef struct ProcInfo { HANDLE hProcess; | | | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | /* * This list is used to map from pids to process handles. */ typedef struct ProcInfo { HANDLE hProcess; size_t dwProcessId; struct ProcInfo *nextPtr; } ProcInfo; static ProcInfo *procList; /* * Bit masks used in the flags field of the PipeInfo structure below. |
︙ | ︙ | |||
855 856 857 858 859 860 861 | * * Side effects: * None. * *-------------------------------------------------------------------------- */ | | | | | 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 | * * Side effects: * None. * *-------------------------------------------------------------------------- */ size_t TclpGetPid( Tcl_Pid pid) /* The HANDLE of the child process. */ { ProcInfo *infoPtr; PipeInit(); Tcl_MutexLock(&pipeMutex); for (infoPtr = procList; infoPtr != NULL; infoPtr = infoPtr->nextPtr) { if (infoPtr->dwProcessId == (size_t) pid) { Tcl_MutexUnlock(&pipeMutex); return infoPtr->dwProcessId; } } Tcl_MutexUnlock(&pipeMutex); return (size_t)-1; } /* *---------------------------------------------------------------------- * * TclpCreateProcess -- * |
︙ | ︙ | |||
1159 1160 1161 1162 1163 1164 1165 | * CreateProcess() and CloseHandle(), the problem does not occur." PSS ID * Number: Q124121 */ WaitForInputIdle(procInfo.hProcess, 5000); CloseHandle(procInfo.hThread); | | | 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 | * CreateProcess() and CloseHandle(), the problem does not occur." PSS ID * Number: Q124121 */ WaitForInputIdle(procInfo.hProcess, 5000); CloseHandle(procInfo.hThread); *pidPtr = (Tcl_Pid) (size_t) procInfo.dwProcessId; if (*pidPtr != 0) { TclWinAddProcess(procInfo.hProcess, procInfo.dwProcessId); } result = TCL_OK; end: Tcl_DStringFree(&cmdLine); |
︙ | ︙ | |||
1474 1475 1476 1477 1478 1479 1480 | QuoteCmdLineBackslash(dsPtr, start, special, NULL); start = special; } else { /* rest before first backslash and backslashes into new quoted block */ QuoteCmdLineBackslash(dsPtr, start, *bspos, NULL); start = *bspos; } | | | | | 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 | QuoteCmdLineBackslash(dsPtr, start, special, NULL); start = special; } else { /* rest before first backslash and backslashes into new quoted block */ QuoteCmdLineBackslash(dsPtr, start, *bspos, NULL); start = *bspos; } /* * escape all special chars enclosed in quotes like `"..."`, note that here we * don't must escape `\` (with `\`), because it's outside of the main quotes, * so `\` remains `\`, but important - not at end of part, because results as * before the quote, so `%\%\` should be escaped as `"%\%"\\`). */ TclDStringAppendLiteral(dsPtr, "\""); /* opening escape quote-char */ do { *bspos = NULL; special++; if (*special == '\\') { |
︙ | ︙ | |||
1632 1633 1634 1635 1636 1637 1638 | continue; } /* other not special (and not meta) character */ bspos = NULL; /* reset last backslash possition (not interesting) */ special++; } /* rest of argument (and escape backslashes before closing main quote) */ | | | 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 | continue; } /* other not special (and not meta) character */ bspos = NULL; /* reset last backslash possition (not interesting) */ special++; } /* rest of argument (and escape backslashes before closing main quote) */ QuoteCmdLineBackslash(&ds, start, special, (quote & CL_QUOTE) ? bspos : NULL); } if (quote & CL_QUOTE) { /* end of argument (main closing quote-char) */ TclDStringAppendLiteral(&ds, "\""); } } |
︙ | ︙ | |||
2472 2473 2474 2475 2476 2477 2478 | * Find the process and cut it from the process list. */ Tcl_MutexLock(&pipeMutex); prevPtrPtr = &procList; for (infoPtr = procList; infoPtr != NULL; prevPtrPtr = &infoPtr->nextPtr, infoPtr = infoPtr->nextPtr) { | | | 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 | * Find the process and cut it from the process list. */ Tcl_MutexLock(&pipeMutex); prevPtrPtr = &procList; for (infoPtr = procList; infoPtr != NULL; prevPtrPtr = &infoPtr->nextPtr, infoPtr = infoPtr->nextPtr) { if (infoPtr->dwProcessId == (size_t) pid) { *prevPtrPtr = infoPtr->nextPtr; break; } } Tcl_MutexUnlock(&pipeMutex); /* |
︙ | ︙ | |||
2616 2617 2618 2619 2620 2621 2622 | * *---------------------------------------------------------------------- */ void TclWinAddProcess( void *hProcess, /* Handle to process */ | | | 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 | * *---------------------------------------------------------------------- */ void TclWinAddProcess( void *hProcess, /* Handle to process */ size_t id) /* Global process identifier */ { ProcInfo *procPtr = ckalloc(sizeof(ProcInfo)); PipeInit(); procPtr->hProcess = hProcess; procPtr->dwProcessId = id; |
︙ | ︙ |
Changes to win/tclWinTime.c.
︙ | ︙ | |||
123 124 125 126 127 128 129 | * * Side effects: * None. * *---------------------------------------------------------------------- */ | | | 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | * * Side effects: * None. * *---------------------------------------------------------------------- */ Tcl_WideUInt TclpGetSeconds(void) { Tcl_Time t; tclGetTimeProcPtr(&t, tclTimeClientData); /* Tcl_GetTime inlined. */ return t.sec; } |
︙ | ︙ | |||
151 152 153 154 155 156 157 | * * Side effects: * None. * *---------------------------------------------------------------------- */ | | | | 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 | * * Side effects: * None. * *---------------------------------------------------------------------- */ Tcl_WideUInt TclpGetClicks(void) { /* * Use the Tcl_GetTime abstraction to get the time in microseconds, as * nearly as we can, and return it. */ Tcl_Time now; /* Current Tcl time */ unsigned long retval; /* Value to return */ tclGetTimeProcPtr(&now, tclTimeClientData); /* Tcl_GetTime inlined */ retval = ((Tcl_WideUInt) now.sec * 1000000) + now.usec; return retval; } /* *---------------------------------------------------------------------- * |
︙ | ︙ |