From: Zoran V. <vas...@us...> - 2007-10-23 19:24:14
|
Update of /cvsroot/naviserver/modules/nsconfigrw In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv8536 Modified Files: ChangeLog configrw.c Log Message: Declared Cfg_GetInt in terms of Cfg_GetRange. Added Cfg_GetBoolFromParam to cover cases when the string value contains boolean expressions, like true, false, yes, no, etc pp. Index: configrw.c =================================================================== RCS file: /cvsroot/naviserver/modules/nsconfigrw/configrw.c,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** configrw.c 23 Oct 2007 16:17:25 -0000 1.21 --- configrw.c 23 Oct 2007 19:24:15 -0000 1.22 *************** *** 105,108 **** --- 105,109 ---- static int GetStringFromParam(Param *param, char **value, int *size); static int GetIntFromParam(Param *param, int *value); + static int GetBoolFromParam(Param *param, int *value); static Ns_Callback ThreadCleanup; *************** *** 215,219 **** int ! Cfg_GetBool(CONST char *section, CONST char *key, int *def, int *value) { Param outpar; --- 216,220 ---- int ! Cfg_GetBool(CONST char *section, CONST char *key, CONST int *def, int *value) { Param outpar; *************** *** 229,233 **** } } else { ! status = GetIntFromParam(&outpar, &result); if (status == NS_OK) { status = NS_TRUE; --- 230,234 ---- } } else { ! status = GetBoolFromParam(&outpar, &result); if (status == NS_OK) { status = NS_TRUE; *************** *** 261,294 **** int ! Cfg_GetInt(CONST char *section, CONST char *key, int *def, int *value) { ! Param outpar; ! int result, status; ! ! ClearParam(&outpar); ! ! status = CfgGet(section, key, &outpar); ! if (status != NS_TRUE) { ! if (def != NULL) { ! *value = *def; ! status = NS_TRUE; ! } ! } else { ! status = GetIntFromParam(&outpar, &result); ! if (status == NS_OK) { ! status = NS_TRUE; ! *value = result; ! if (def != NULL) { ! Ns_Log(Debug, "configrw: %s:%s value=%d default=%d (int)", ! section, key, result, *def); ! } else { ! Ns_Log(Debug, "configrw: %s:%s value=%d default=%s (int)", ! section, key, result, "(none)"); ! } ! } ! FreeParam(&outpar); ! } ! ! return status; } --- 262,268 ---- int ! Cfg_GetInt(CONST char *section, CONST char *key, CONST int *def, int *value) { ! return Cfg_GetRange(section, key, def, INT_MIN, INT_MAX, value); } *************** *** 313,318 **** int ! Cfg_GetRange(CONST char *section, CONST char *key, int *def, int min, ! int max, int *value) { Param outpar; --- 287,292 ---- int ! Cfg_GetRange(CONST char *section, CONST char *key, CONST int *def, ! CONST int min, CONST int max, int *value) { Param outpar; *************** *** 869,873 **** * * Results: ! * NS_OK or NS_ERROR * * Side effects: --- 843,847 ---- * * Results: ! * NS_OK if conversion suceeded, NS_ERROR otherwise. * * Side effects: *************** *** 908,911 **** --- 882,934 ---- *---------------------------------------------------------------------- * + * GetBoolFromParam -- + * + * Get the boolean representation from the parameter. + * + * Results: + * NS_OK if conversion suceeded, NS_ERROR otherwise. + * + * Side effects: + * May convert the parameter to int type. + * + *---------------------------------------------------------------------- + */ + + static int + GetBoolFromParam(Param *param, int *result) + { + if (param->type != IntType) { + int bool; + if ( STREQ (param->value, "1" ) + || STRIEQ(param->value, "y" ) + || STRIEQ(param->value, "yes" ) + || STRIEQ(param->value, "on" ) + || STRIEQ(param->value, "t" ) + || STRIEQ(param->value, "true")) { + param->intval = 1; + } else if ( STREQ (param->value, "0" ) + || STRIEQ(param->value, "n" ) + || STRIEQ(param->value, "no" ) + || STRIEQ(param->value, "off" ) + || STRIEQ(param->value, "f" ) + || STRIEQ(param->value, "false")) { + param->intval = 0; + } else if (Ns_StrToInt(param->value, &bool) == NS_OK) { + param->intval = (bool != 0); + } else { + return NS_ERROR; + } + param->type = IntType; + } + + *result = param->intval; + + return NS_OK; + } + + + /* + *---------------------------------------------------------------------- + * * GetIntFromParam -- * *************** *** 925,929 **** { if (param->type != IntType) { ! if (sscanf(param->value, "%d", ¶m->intval) != 1) { return NS_ERROR; } --- 948,952 ---- { if (param->type != IntType) { ! if (Ns_StrToInt(param->value, ¶m->intval) != NS_OK) { return NS_ERROR; } *************** *** 935,938 **** --- 958,962 ---- return NS_OK; } + /* *************** *** 990,996 **** ns_free(param->value); } ! param->value = NULL; ! param->size = 0; ! param->intval = 0; } --- 1014,1018 ---- ns_free(param->value); } ! ClearParam(param); } Index: ChangeLog =================================================================== RCS file: /cvsroot/naviserver/modules/nsconfigrw/ChangeLog,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** ChangeLog 23 Oct 2007 17:22:23 -0000 1.23 --- ChangeLog 23 Oct 2007 19:24:14 -0000 1.24 *************** *** 1,2 **** --- 1,10 ---- + 2007-10-23 Zoran Vasiljevic <vas...@us...> + + * configrw.c: Declared Cfg_GetInt in terms of Cfg_GetRange. + + Added Cfg_GetBoolFromParam to cover cases when the string value + contains boolean expressions, like true, false, yes, no, etc pp. + + 2007-10-23 Stephen Deasey <sd...@us...> *************** *** 11,17 **** --- 19,28 ---- * configrw.c: Added typed parameters to avoid too much conversions. + Request for unknown params always return empty strings. + Do not set missing parameters if default values were provided, just return the default to the caller. + CONST'ifed some arguments. |