It is now impossible to open or clone a view that is not finished (= has

been closed at least once)
This commit is contained in:
Celine Mercier
2016-11-24 11:19:07 +01:00
parent 8abbfa203a
commit 70e056a2aa
2 changed files with 20 additions and 3 deletions

View File

@ -1169,7 +1169,7 @@ Obiview_p obi_new_view(OBIDMS_p dms, const char* view_name, Obiview_p view_to_cl
}
view->dms = dms;
view->read_only = 0;
view->read_only = false;
// Create view file
if (create_obiview_file(dms, view_name) < 0)
@ -1187,16 +1187,19 @@ Obiview_p obi_new_view(OBIDMS_p dms, const char* view_name, Obiview_p view_to_cl
return NULL;
}
// Flag the view as being a work in progress
(view->infos)->finished = false;
// Write used size in view file for initial structure
(view->infos)->used_size = sizeof(Obiview_infos_t);
// Clone view to clone if there is one
if (view_to_clone != NULL)
{
if (!(view_to_clone->read_only))
if ((view_to_clone->infos)->finished == false)
{
obi_set_errno(OBIVIEW_ERROR);
obidebug(1, "\nA view can not be cloned if it is not read-only");
obidebug(1, "\nA view can not be cloned if it is not finished");
obi_view_unmap_file(view->dms, view->infos);
free(view);
return NULL;
@ -1634,6 +1637,15 @@ Obiview_p obi_open_view(OBIDMS_p dms, const char* view_name)
// Map view file
view->infos = obi_view_map_file(dms, view_name);
// Check that the view is finished and can be opened
if ((view->infos)->finished == false)
{
obidebug(1, "\nError opening a view: the view is not finished");
obi_view_unmap_file(view->dms, view->infos);
free(view);
return NULL;
}
// Open the line selection associated with the view
if ((view->infos)->all_lines)
view->line_selection = NULL;
@ -1983,6 +1995,9 @@ int obi_close_view(Obiview_p view)
}
}
// Flag the view as finished
(view->infos)->finished = true;
// Free the column dictionary
ht_free(view->column_dict);

View File

@ -94,6 +94,8 @@ typedef struct Obiview_infos {
*/
Alias_column_pair_t column_references[MAX_NB_OPENED_COLUMNS]; /**< References (name, version and alias) for all the columns in the view.
*/
bool finished; /** Whether the view is finished and can be read.
*/
char comments[]; /**< Comments, additional informations on the view.
*/
} Obiview_infos_t, *Obiview_infos_p;