diff --git a/src/common/remoteio.c b/src/common/remoteio.c --- a/src/common/remoteio.c +++ b/src/common/remoteio.c @@ -23,6 +23,52 @@ #include #include +#include + +int remoteio_config(cfg_t *cfg, struct remoteio_opts *opts) +{ + size_t numservers; + size_t counter; + + struct remoteio_server *aserver; + + opts->servers = malloc(sizeof(struct remoteio_server)); + if(!opts->servers) + { + fprintf(stderr, "@todo cleanup!\n"); + abort(); + } + + aserver = opts->servers; + + numservers = cfg_size(cfg, "server"); + for(counter = 0; counter < numservers; counter ++) + { + cfg_t *cfg_aserver; + + cfg_aserver = cfg_getnsec(cfg, "server", counter); + + if(!aserver) /*< if the malloc in the previous loop failed */ + abort(); + + aserver->name = strdup(cfg_title(cfg_aserver)); + aserver->hostname = strdup(cfg_getstr(cfg_aserver, "hostname")); + aserver->username = strdup(cfg_getstr(cfg_aserver, "username")); + if(strcmp(cfg_getstr(cfg_aserver, "method"), "ssh") == 0) + aserver->method = REMOTEIO_METHOD_SSH; + else + abort(); + + if(counter < numservers - 1) + { + aserver->next = malloc(sizeof(struct remoteio_server)); + aserver = aserver->next; + } + } + aserver->next = NULL; + + return 0; +} int remoteio_open(struct remoteio **rem, struct remoteio_opts *opts, char *servername) {