*** sm/main.c.orig Sat Sep 25 17:04:09 2004 --- sm/main.c Sat Sep 25 17:05:31 2004 *************** *** 236,241 **** --- 236,245 ---- /* start storage */ sm->st = storage_new(sm); + if (sm->st == NULL) { + log_write(sm->log, LOG_ERR, "failed to initialise one or more storage drivers, aborting"); + exit(1); + } /* pre-index known namespaces */ sm->xmlns = xhash_new(101); *** sm/storage.c.orig Sat Sep 25 17:00:18 2004 --- sm/storage.c Sat Sep 25 17:03:57 2004 *************** *** 84,89 **** --- 84,90 ---- int i, j; config_elem_t elem; char *type; + st_ret_t ret; st = (storage_t) malloc(sizeof(struct storage_st)); memset(st, 0, sizeof(struct storage_st)); *************** *** 100,108 **** for(j = 0; st_driver_names[j] != NULL; j++) { if(strcmp(elem->values[i], st_driver_names[j]) == 0) { if(type == NULL) ! storage_add_type(st, st_driver_names[j], NULL); else ! storage_add_type(st, st_driver_names[j], type); } } } --- 101,114 ---- for(j = 0; st_driver_names[j] != NULL; j++) { if(strcmp(elem->values[i], st_driver_names[j]) == 0) { if(type == NULL) ! ret = storage_add_type(st, st_driver_names[j], NULL); else ! ret = storage_add_type(st, st_driver_names[j], type); ! /* Initialisation of storage type failed */ ! if (ret != st_SUCCESS) { ! free(st); ! return NULL; ! } } } }