Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Added code to try to tame the [file attributes] guts, while trying to simplify things enough that I can puzzle out AK's TclVFS problems. I suspect this is not a real fix though; just an attempt to make the problem tractable. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | core-8-5-branch |
Files: | files | file ages | folders |
SHA1: |
607ac42cb55d5063698811bdcf3f32f3 |
User & Date: | dkf 2011-04-16 11:35:17 |
Context
2011-04-18
| ||
08:22 | fix for [Bug 3288345]: Wrong Tcl_StatBuf used on MinGW check-in: 4f729efe4c user: jan.nijtmans tags: core-8-5-branch | |
2011-04-16
| ||
14:20 | fix merge history check-in: ddca613cd6 user: dkf tags: trunk | |
11:35 | Added code to try to tame the [file attributes] guts, while trying to simplify things enough that I ... check-in: 607ac42cb5 user: dkf tags: core-8-5-branch | |
2011-04-14
| ||
15:33 | More Tcl_Concat* and TclTrim* improvements. check-in: d317d3a547 user: dgp tags: core-8-5-branch | |
Changes
Changes to ChangeLog.
1 2 | 2011-04-13 Don Porter <[email protected]> | > > > > > > > | | | | | | | | | | | | | 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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | 2011-04-16 Donal K. Fellows <[email protected]> * generic/tclFCmd.c (TclFileAttrsCmd): Tidied up the memory management a bit to try to ensure that the dynamic and static cases don't get confused while still promoting caching where possible. Added a panic to trap problems in the case where an extension is misusing the API. 2011-04-13 Don Porter <[email protected]> * generic/tclUtil.c: [Bug 3285375]: Rewrite of Tcl_Concat*() routines to prevent segfaults on buffer overflow. Build them out of existing primitives already coded to handle overflow properly. Uses the new TclTrim*() routines. * generic/tclCmdMZ.c: New internal utility routines TclTrimLeft() * generic/tclInt.h: and TclTrimRight(). Refactor the * generic/tclUtil.c: [string trim*] implementations to use them. 2011-04-13 Miguel Sofer <[email protected]> * generic/tclVar.c: [Bug 2662380]: Fix crash caused by appending to a variable with a write trace that unsets it. 2011-04-12 Don Porter <[email protected]> * generic/tclStringObj.c: [Bug 3285472]: Repair corruption in * tests/string.test: [string reverse] when string rep invalidation failed to also reset the bytes allocated for string rep to zero. 2011-04-12 Venkat Iyer <[email protected]> * library/tzdata/Atlantic/Stanley: Update to Olson tzdata2011f 2011-04-06 Miguel Sofer <[email protected]> * generic/tclExecute.c (TclCompEvalObj): Earlier return if Tip280 gymnastics not needed. 2011-04-05 Venkat Iyer <[email protected]> * library/tzdata/Africa/Casablanca: Update to Olson's tzdata2011e * library/tzdata/America/Santiago: * library/tzdata/Pacific/Easter: * library/tzdata/America/Metlakatla: (new) * library/tzdata/America/North_Dakota/Beulah: (new) * library/tzdata/America/Sitka: (new) 2011-04-04 Don Porter <[email protected]> * README: Updated README files, repairing broken URLs and * macosx/README: removing other bits that were clearly wrong. * unix/README: Still could use more eyeballs on the detailed build * win/README: advice on various plaforms. [Bug 3202030] 2011-04-02 Kevin B. Kenny <[email protected]> * generic/tclStrToD.c (QuickConversion): Replaced another couple of 'double' declarations with 'volatile double' to work around misrounding issues in mingw-gcc 3.4.5. 2011-03-24 Donal K. Fellows <[email protected]> * generic/tclFCmd.c (TclFileAttrsCmd): Ensure that any reference to temporary index tables is squelched immediately rather than hanging around to trip us up in the future. |
︙ | ︙ |
Changes to generic/tclFCmd.c.
︙ | ︙ | |||
946 947 948 949 950 951 952 | Tcl_Interp *interp, /* The interpreter for error reporting. */ int objc, /* Number of command line arguments. */ Tcl_Obj *CONST objv[]) /* The command line objects. */ { int result; CONST char ** attributeStrings; Tcl_Obj* objStrings = NULL; | | | 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 | Tcl_Interp *interp, /* The interpreter for error reporting. */ int objc, /* Number of command line arguments. */ Tcl_Obj *CONST objv[]) /* The command line objects. */ { int result; CONST char ** attributeStrings; Tcl_Obj* objStrings = NULL; int numObjStrings = -1, didAlloc = 0; Tcl_Obj *filePtr; if (objc < 3) { Tcl_WrongNumArgs(interp, 2, objv, "name ?option? ?value? ?option value ...?"); return TCL_ERROR; } |
︙ | ︙ | |||
979 980 981 982 983 984 985 | /* * There was an error, probably that the filePtr is not * accepted by any filesystem */ Tcl_AppendResult(interp, "could not read \"", TclGetString(filePtr), "\": ", Tcl_PosixError(interp), NULL); | < < > > > > > | 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 | /* * There was an error, probably that the filePtr is not * accepted by any filesystem */ Tcl_AppendResult(interp, "could not read \"", TclGetString(filePtr), "\": ", Tcl_PosixError(interp), NULL); } return TCL_ERROR; } /* * We own the object now. */ Tcl_IncrRefCount(objStrings); /* * Use objStrings as a list object. */ if (Tcl_ListObjLength(interp, objStrings, &numObjStrings) != TCL_OK) { goto end; } attributeStrings = (CONST char **) TclStackAlloc(interp, (1+numObjStrings) * sizeof(char*)); didAlloc = 1; for (index = 0; index < numObjStrings; index++) { Tcl_ListObjIndex(interp, objStrings, index, &objPtr); attributeStrings[index] = TclGetString(objPtr); } attributeStrings[index] = NULL; } else if (objStrings != NULL) { Tcl_Panic("must not update objPtrRef's variable and return non-NULL"); } if (objc == 0) { /* * Get all attributes. */ int index, res = TCL_OK, nbAtts = 0; Tcl_Obj *listPtr; |
︙ | ︙ | |||
1065 1066 1067 1068 1069 1070 1071 | goto end; } if (Tcl_GetIndexFromObj(interp, objv[0], attributeStrings, "option", 0, &index) != TCL_OK) { goto end; } | | | 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 | goto end; } if (Tcl_GetIndexFromObj(interp, objv[0], attributeStrings, "option", 0, &index) != TCL_OK) { goto end; } if (didAlloc) { TclFreeIntRep(objv[0]); } if (Tcl_FSFileAttrsGet(interp, index, filePtr, &objPtr) != TCL_OK) { goto end; } Tcl_SetObjResult(interp, objPtr); |
︙ | ︙ | |||
1092 1093 1094 1095 1096 1097 1098 | } for (i = 0; i < objc ; i += 2) { if (Tcl_GetIndexFromObj(interp, objv[i], attributeStrings, "option", 0, &index) != TCL_OK) { goto end; } | | | | > > < | < | 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 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 | } for (i = 0; i < objc ; i += 2) { if (Tcl_GetIndexFromObj(interp, objv[i], attributeStrings, "option", 0, &index) != TCL_OK) { goto end; } if (didAlloc) { TclFreeIntRep(objv[i]); } if (i + 1 == objc) { Tcl_AppendResult(interp, "value for \"", TclGetString(objv[i]), "\" missing", NULL); goto end; } if (Tcl_FSFileAttrsSet(interp, index, filePtr, objv[i + 1]) != TCL_OK) { goto end; } } } result = TCL_OK; end: if (didAlloc) { /* * Free up the array we allocated. */ TclStackFree(interp, (void *)attributeStrings); } if (objStrings != NULL) { /* * We don't need this object that was passed to us any more. */ Tcl_DecrRefCount(objStrings); } return result; } /* * Local Variables: * mode: c * c-basic-offset: 4 * fill-column: 78 * End: */ |