Я обновляю часть стороннего программного обеспечения на основе Tk для использования с Tcl / Tk 8.6, и я столкнулся с утверждением этой формы:
interp->result = Tk_PathName(tkwin);
, где interp
Tcl_Interp *
и tkwin
- Tk_Window
. Больше не разрешено (по умолчанию) в Tcl 8.6 для прямого доступа к членам Tcl_Interp
, я хочу преобразовать это в вызов Tcl_SetResult()
, например:
Tcl_SetResult(interp, Tk_PathName(tkwin), /* what goes here? */);
Но У меня возникают проблемы с поиском какой-либо документации о времени жизни строки, возвращаемой Tk_PathName()
, и мне нужно знать это, чтобы указать правильную свободную функцию.
Я подозреваю, что правильным решением было бы укажите TCL_VOLATILE
в качестве свободной функции, чтобы Tcl создавал и впоследствии управлял собственной копией строки, но это приведет к утечке памяти, если вызывающая сторона ответственна за освобождение строки, возвращаемой Tk_PathName()
.
Если вызывающая сторона несет ответственность за освобождение, то я предполагаю, что следует указать TCL_DYNAMIC
, хотя это предполагает (я думаю, что разумно), что Tk выделил бы имя пути через Tcl_Alloc
.
Так что это? Или мне нужно что-то еще?