Posted to tcl by apn at Mon Mar 20 06:06:36 GMT 2023view pretty
The sample below builds with 8.7 and 9.0 with no warnings. However it does not make full functionality of 9.0 as len is 32-bits. int Sandbox_Cmd( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter */ int objc, /* Number of arguments */ Tcl_Obj *const objv[] /* Argument strings */ ) { int len; Tcl_Obj *parts; parts = Tcl_FSSplitPath(objv[1], &len); Tcl_DecrRefCount(parts); /* Assume non-null */ Tcl_SetObjResult(interp, Tcl_NewWideIntObj(len)); return TCL_OK; } To make full 64-bit support on 9.0, the len variable type needs to be size_t. int Sandbox_Cmd( ClientData dummy, /* Not used. */ Tcl_Interp *interp, /* Current interpreter */ int objc, /* Number of arguments */ Tcl_Obj *const objv[] /* Argument strings */ ) { size_t len; Tcl_Obj *parts; parts = Tcl_FSSplitPath(objv[1], &len); Tcl_DecrRefCount(parts); /* Assume non-null */ Tcl_SetObjResult(interp, Tcl_NewWideIntObj(len)); return TCL_OK; } This now however results in compiler warnings with 8.7. D:\src\sampleextension\win\..\generic\tclsample.c(343): warning C4133: 'function': incompatible types - from 'size_t *' to 'int *' Moreover, if the warning is ignored, the function will fail miserably on bigendian machines.