in src/generic/paramlist.c [264:306]
int listObjAsParamList(Tcl_Obj * list, ParamList * hash)
{
int listLen = 0;
int i;
Tcl_Obj *key = NULL;
Tcl_Obj *val = NULL;
if ((list == NULL) || (hash == NULL))
return TCL_ERROR;
/* --------------------------------------------------------------------------
* is even numbered ?
* ----------------------------------------------------------------------- */
if (Tcl_ListObjLength(NULL, list, &listLen) == TCL_ERROR)
return TCL_ERROR;
if ((listLen % 2) != 0) {
/* no. last is single key. append value */
val = Tcl_NewObj();
Tcl_ListObjAppendElement(NULL, list, val);
}
if (Tcl_ListObjLength(NULL, list, &listLen) == TCL_ERROR)
return TCL_ERROR;
for (i = 0; i < listLen; i += 2) {
key = NULL;
val = NULL;
Tcl_ListObjIndex(NULL, list, i, &key);
if (key == NULL)
return TCL_ERROR;
Tcl_ListObjIndex(NULL, list, i + 1, &val);
if (val == NULL)
return TCL_ERROR;
if (paramListAdd(hash, Tcl_GetString(key), val) == TCL_ERROR)
return TCL_ERROR;
}
return TCL_OK;
}