int listObjAsParamList()

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;
}