int parseUrlFormat()

in src/generic/url.c [199:258]


int parseUrlFormat(Tcl_Interp * interp, Tcl_Obj * list)
{

    int objc = -1;
    Tcl_Obj **objv = NULL;
    int i = -1;
    int res = 0;

    TCLCONST char *accepted[20];
    enum urlElement e;


    /* --------------------------------------------------------------------------
     * minimal
     * ----------------------------------------------------------------------- */
    if (list == NULL) {
	LOG_MSG(interp, WRITE_LOG | SET_RESULT,
		__FILE__, __LINE__,
		"web::cmdurl -urlformat", WEBLOG_ERROR,
		"cannot access list", NULL);
	return 0;
    }

    for (e = SCHEME; e <= QUERYSTRING; e++)
	accepted[e] = &(urlElementOpts[e][1]);
    accepted[e] = NULL;

    /* --------------------------------------------------------------------------
     * convert list to array of objs
     * ----------------------------------------------------------------------- */
    if (Tcl_ListObjGetElements(interp, list, &objc, &objv) == TCL_ERROR) {
	LOG_MSG(interp, WRITE_LOG | SET_RESULT,
		__FILE__, __LINE__,
		"web::cmdurl -urlformat", WEBLOG_ERROR,
		"cannot convert \"", Tcl_GetString(list), "\" to list", NULL);
	return 0;
    }

    /* empty list */
    if (objc == 0) {
	Tcl_SetResult(interp, "no url elements specified", TCL_STATIC);
	return 0;
    }

    /* --------------------------------------------------------------------------
     * now see what we got
     * ----------------------------------------------------------------------- */
    for (i = 0; i < objc; i++) {
	int idx = 0;
	if (Tcl_GetIndexFromObj(interp,
				objv[i],
				accepted,
				"url element", 0, &idx) == TCL_ERROR)
	    return 0;
	else {
	    res |= urlElementFlags[idx];
	}
    }
    return res;
}