/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
+#include <stdio.h>
#include "xbt/misc.h"
#include "xbt/sysdep.h"
#include "xbt/log.h"
break;
case xbt_cfgelm_string:
- res->content = xbt_dynar_new(sizeof(char*),&xbt_cfg_str_free);
+ res->content = xbt_dynar_new(sizeof(char*),xbt_cfg_str_free);
break;
case xbt_cfgelm_peer:
- res->content = xbt_dynar_new(sizeof(xbt_peer_t),&xbt_peer_free_voidp);
+ res->content = xbt_dynar_new(sizeof(xbt_peer_t),xbt_peer_free_voidp);
break;
default:
xbt_dynar_set(variable->content,0,&val);
} else {
- if (variable->max && xbt_dynar_length(variable->content) == variable->max)
+ if (variable->max && xbt_dynar_length(variable->content) == (unsigned long)variable->max)
THROW3(mismatch_error,0,
"Cannot add value %d to the config element %s since it's already full (size=%d)",
val,name,variable->max);
variable = xbt_cfgelm_get(cfg,name,xbt_cfgelm_string);
if (variable->max == 1) {
- if (variable->cb_rm && xbt_dynar_length(variable->content))
- (*variable->cb_rm)(name, 0);
+ if (xbt_dynar_length(variable->content)) {
+ if (variable->cb_rm)
+ (*variable->cb_rm)(name, 0);
+ else if (variable->type == xbt_cfgelm_string) {
+ char * sval=xbt_dynar_get_as(variable->content,0,char*);
+ free(sval);
+ }
+ }
xbt_dynar_set(variable->content,0,&newval);
} else {
void xbt_cfg_rm_int(xbt_cfg_t cfg,const char*name, int val) {
xbt_cfgelm_t variable;
- int cpt,seen;
+ unsigned int cpt;
+ int seen;
variable = xbt_cfgelm_get(cfg,name,xbt_cfgelm_int);
void xbt_cfg_rm_double(xbt_cfg_t cfg,const char*name, double val) {
xbt_cfgelm_t variable;
- int cpt;
+ unsigned int cpt;
double seen;
variable = xbt_cfgelm_get(cfg,name,xbt_cfgelm_double);
void
xbt_cfg_rm_string(xbt_cfg_t cfg,const char*name, const char *val) {
xbt_cfgelm_t variable;
- int cpt;
+ unsigned int cpt;
char *seen;
variable = xbt_cfgelm_get(cfg,name,xbt_cfgelm_string);
void
xbt_cfg_rm_peer(xbt_cfg_t cfg,const char*name, const char *peer,int port) {
xbt_cfgelm_t variable;
- int cpt;
+ unsigned int cpt;
xbt_peer_t seen;
variable = xbt_cfgelm_get(cfg,name,xbt_cfgelm_peer);
if (variable) {
if (variable->cb_rm) {
- int cpt;
+ unsigned int cpt;
void *ignored;
xbt_dynar_foreach(variable->content,cpt,ignored) {
(*variable->cb_rm)(name, cpt);
}
XBT_TEST_UNIT("use",test_config_use,"Data retrieving tests") {
- xbt_cfg_t set = set=make_set();
-
xbt_test_add0("Get a single value");
{
dyn = xbt_cfg_get_dynar(myset,"user");
if (xbt_dynar_length(dyn) != 3)
- xbt_test_fail1("Dynar length = %d, I expected 3", (int)xbt_dynar_length(dyn));
+ xbt_test_fail1("Dynar length = %lu, I expected 3", xbt_dynar_length(dyn));
if (strcmp(xbt_dynar_get_as(dyn,0,char*),"foo"))
xbt_test_fail1("Dynar[0] = %s, I expected foo", xbt_dynar_get_as(dyn,0,char*));