Posted to tcl by APN at Thu Aug 08 06:25:12 GMT 2013view pretty
Tcl_Obj *ObjFromULONGLONG(ULONGLONG ull) { /* * Unsigned 64-bit ints with the high bit set will not fit in Tcl_WideInt. * We need to convert to a bignum from a hex string. */ if (ull & 0x8000000000000000) { Tcl_Obj *objP; mp_int mpi; #if defined(TWAPI_REPLACE_CRT) || defined(TWAPI_MINIMIZE_CRT) Tcl_Obj *mpobj; objP = ObjFromWideInt((Tcl_WideInt) ull); mpobj = Tcl_Format(NULL, "0x%lx", 1, &objP); Tcl_DecrRefCount(objP); objP = mpobj; #else char buf[40]; _snprintf(buf, sizeof(buf), "%I64u", ull); objP = ObjFromString(buf); #endif /* Force to bignum because COM interface sometimes needs to check type*/ if (Tcl_GetBignumFromObj(NULL, objP, &mpi) == TCL_ERROR) return objP; #if defined(TWAPI_REPLACE_CRT) || defined(TWAPI_MINIMIZE_CRT) Tcl_InvalidateStringRep(objP); /* So we get a decimal string rep */ #endif TclBN_mp_clear(&mpi); return objP; } else { return ObjFromWideInt((Tcl_WideInt) ull); } }