Closes issue #47 by storing each view in a separate file named with the
view's name and created upon view creation.
This commit is contained in:
43
src/obidms.c
43
src/obidms.c
@ -252,7 +252,7 @@ OBIDMS_p obi_create_dms(const char* dms_path)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get file descriptor of DMS directory to create the indexer directory
|
||||
// Get file descriptor of DMS directory to create other directories
|
||||
dms_dir = opendir(directory_name);
|
||||
if (dms_dir == NULL)
|
||||
{
|
||||
@ -280,6 +280,14 @@ OBIDMS_p obi_create_dms(const char* dms_path)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Create the view directory
|
||||
if (mkdirat(dms_file_descriptor, VIEW_DIR_NAME, 00777) < 0)
|
||||
{
|
||||
obi_set_errno(OBIVIEW_ERROR);
|
||||
obidebug(1, "\nProblem creating a view directory");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Isolate the dms name
|
||||
j = 0;
|
||||
for (i=0; i<strlen(dms_path); i++)
|
||||
@ -447,6 +455,30 @@ OBIDMS_p obi_open_dms(const char* dms_path)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Open the view directory
|
||||
dms->view_directory = opendir_in_dms(dms, VIEW_DIR_NAME);
|
||||
if (dms->view_directory == NULL)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError opening the view directory");
|
||||
closedir(dms->indexer_directory);
|
||||
closedir(dms->directory);
|
||||
free(dms);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Store the view directory's file descriptor
|
||||
dms->view_dir_fd = dirfd(dms->view_directory);
|
||||
if (dms->view_dir_fd < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError getting the file descriptor of the view directory");
|
||||
closedir(dms->view_directory);
|
||||
closedir(dms->directory);
|
||||
free(dms);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialize the list of opened columns
|
||||
dms->opened_columns = (Opened_columns_list_p) malloc(sizeof(Opened_columns_list_t));
|
||||
(dms->opened_columns)->nb_opened_columns = 0;
|
||||
@ -486,7 +518,7 @@ int obi_close_dms(OBIDMS_p dms)
|
||||
while ((dms->opened_columns)->nb_opened_columns > 0)
|
||||
obi_close_column(*((dms->opened_columns)->columns));
|
||||
|
||||
// Close dms and indexer directories
|
||||
// Close dms, and view and indexer directories
|
||||
if (closedir(dms->directory) < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_MEMORY_ERROR);
|
||||
@ -501,6 +533,13 @@ int obi_close_dms(OBIDMS_p dms)
|
||||
free(dms);
|
||||
return -1;
|
||||
}
|
||||
if (closedir(dms->view_directory) < 0)
|
||||
{
|
||||
obi_set_errno(OBIVIEW_ERROR);
|
||||
obidebug(1, "\nError closing a view directory");
|
||||
free(dms);
|
||||
return -1;
|
||||
}
|
||||
free(dms);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user