bool service_set_param_value ( SERVICE* service, CONFIG_PARAMETER* param, char* valstr, count_spec_t count_spec, config_param_type_t type) { char* p; int valint; bool succp; /** * Find out whether the value is numeric and ends with '%' or '\0' */ p = valstr; while(isdigit(*p)) p++; errno = 0; if (p == valstr || (*p != '%' && *p != '\0')) { succp = false; } else if (*p == '%') { if (*(p+1) == '\0') { *p = '\0'; valint = (int) strtol(valstr, (char **)NULL, 10); if (valint == 0 && errno != 0) { succp = false; } else if (PARAM_IS_TYPE(type,PERCENT_TYPE)) { succp = true; config_set_qualified_param(param, (void *)&valint, PERCENT_TYPE); } else { /** Log error */ } } else { succp = false; } } else if (*p == '\0') { valint = (int) strtol(valstr, (char **)NULL, 10); if (valint == 0 && errno != 0) { succp = false; } else if (PARAM_IS_TYPE(type,COUNT_TYPE)) { succp = true; config_set_qualified_param(param, (void *)&valint, COUNT_TYPE); } else { /** Log error */ } } if (succp) { service_add_qualified_param(service, param); /*< add param to svc */ } return succp; }
bool service_set_param_value ( SERVICE* service, CONFIG_PARAMETER* param, char* valstr, count_spec_t count_spec, config_param_type_t type) { char* p; int valint; bool valbool; target_t valtarget; bool succp = true; if (PARAM_IS_TYPE(type,PERCENT_TYPE) ||PARAM_IS_TYPE(type,COUNT_TYPE)) { /** * Find out whether the value is numeric and ends with '%' or '\0' */ p = valstr; while(isdigit(*p)) p++; errno = 0; if (p == valstr || (*p != '%' && *p != '\0')) { succp = false; } else if (*p == '%') { if (*(p+1) == '\0') { *p = '\0'; valint = (int) strtol(valstr, (char **)NULL, 10); if (valint == 0 && errno != 0) { succp = false; } else if (PARAM_IS_TYPE(type,PERCENT_TYPE)) { succp = true; config_set_qualified_param(param, (void *)&valint, PERCENT_TYPE); } else { /** Log error */ } } else { succp = false; } } else if (*p == '\0') { valint = (int) strtol(valstr, (char **)NULL, 10); if (valint == 0 && errno != 0) { succp = false; } else if (PARAM_IS_TYPE(type,COUNT_TYPE)) { succp = true; config_set_qualified_param(param, (void *)&valint, COUNT_TYPE); } else { /** Log error */ } } } else if (type == BOOL_TYPE) { unsigned int rc; rc = find_type(&bool_type, valstr, strlen(valstr)+1); if (rc > 0) { succp = true; if (rc%2 == 1) { valbool = false; } else if (rc%2 == 0) { valbool = true; } /** add param to config */ config_set_qualified_param(param, (void *)&valbool, BOOL_TYPE); } else { succp = false; } } else if (type == SQLVAR_TARGET_TYPE) { unsigned int rc; rc = find_type(&sqlvar_target_type, valstr, strlen(valstr)+1); if (rc > 0 && rc < 3) { succp = true; if (rc == 1) { valtarget = TYPE_MASTER; } else if (rc == 2) { valtarget = TYPE_ALL; } /** add param to config */ config_set_qualified_param(param, (void *)&valtarget, SQLVAR_TARGET_TYPE); } else { succp = false; } } if (succp) { service_add_qualified_param(service, param); /*< add param to svc */ } return succp; }