obi ls: now done in C (preparing things for R packages to read DMS) and
switch to version 3.0.0b36
This commit is contained in:
101
src/obidms.c
101
src/obidms.c
@ -1409,6 +1409,107 @@ DIR* opendir_in_dms(OBIDMS_p dms, const char* path_name)
|
||||
}
|
||||
|
||||
|
||||
char* obi_dms_formatted_infos(OBIDMS_p dms, bool detailed)
|
||||
{
|
||||
char* dms_infos = NULL;
|
||||
char* view_infos = NULL;
|
||||
char* view_name = NULL;
|
||||
char* tax_name = NULL;
|
||||
char* all_tax_dir_path = NULL;
|
||||
int i;
|
||||
struct dirent* dp;
|
||||
Obiview_p view;
|
||||
|
||||
// DMS name
|
||||
dms_infos = (char*) malloc((strlen("# DMS name: ")+strlen(dms->dms_name)+strlen("\n# Views:\n")+1) * sizeof(char));
|
||||
if (dms_infos == NULL)
|
||||
{
|
||||
obidebug(1, "\nError allocating memory for DMS formatted infos");
|
||||
return NULL;
|
||||
}
|
||||
strcpy(dms_infos, "# DMS name: ");
|
||||
strcat(dms_infos, dms->dms_name);
|
||||
strcat(dms_infos, "\n# Views:\n");
|
||||
|
||||
// Go through views and get their infos
|
||||
rewinddir(dms->view_directory);
|
||||
while ((dp = readdir(dms->view_directory)) != NULL)
|
||||
{
|
||||
if ((dp->d_name)[0] == '.')
|
||||
continue;
|
||||
i=0;
|
||||
while ((dp->d_name)[i] != '.')
|
||||
i++;
|
||||
view_name = (char*) malloc((i+1) * sizeof(char));
|
||||
if (view_name == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_MALLOC_ERROR);
|
||||
obidebug(1, "\nError allocating memory for a view name when getting formatted DMS infos: file %s", dp->d_name);
|
||||
return NULL;
|
||||
}
|
||||
strncpy(view_name, dp->d_name, i);
|
||||
view_name[i] = '\0';
|
||||
view = obi_open_view(dms, view_name);
|
||||
if (view == NULL)
|
||||
{
|
||||
obidebug(1, "\nError opening a view to get DMS formatted infos");
|
||||
return NULL;
|
||||
}
|
||||
if (detailed)
|
||||
view_infos = obi_view_formatted_infos(view, detailed);
|
||||
else
|
||||
view_infos = obi_view_formatted_infos_one_line(view);
|
||||
if (view_infos == NULL)
|
||||
{
|
||||
obidebug(1, "\nError getting a view infos to get DMS formatted infos");
|
||||
return NULL;
|
||||
}
|
||||
dms_infos = realloc(dms_infos, (strlen(dms_infos)+strlen(view_infos)+1) * sizeof(char));
|
||||
if (dms_infos == NULL)
|
||||
{
|
||||
obidebug(1, "\nError reallocating memory for DMS formatted infos");
|
||||
return NULL;
|
||||
}
|
||||
strcat(dms_infos, view_infos);
|
||||
if (obi_save_and_close_view(view) < 0)
|
||||
{
|
||||
obidebug(1, "\nError closing view while getting DMS formatted infos");
|
||||
return NULL;
|
||||
}
|
||||
if (detailed)
|
||||
{
|
||||
dms_infos = realloc(dms_infos, (strlen(dms_infos)+2) * sizeof(char));
|
||||
strcat(dms_infos, "\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Add taxonomies
|
||||
dms_infos = realloc(dms_infos, (strlen(dms_infos)+strlen("\n# Taxonomies:\n")+1) * sizeof(char));
|
||||
if (dms_infos == NULL)
|
||||
{
|
||||
obidebug(1, "\nError reallocating memory for DMS formatted infos");
|
||||
return NULL;
|
||||
}
|
||||
strcat(dms_infos, "# Taxonomies:\n");
|
||||
rewinddir(dms->tax_directory);
|
||||
while ((dp = readdir(dms->tax_directory)) != NULL)
|
||||
{
|
||||
if ((dp->d_name)[0] == '.')
|
||||
continue;
|
||||
tax_name = dp->d_name;
|
||||
dms_infos = realloc(dms_infos, (strlen(dms_infos)+strlen(" # ")+strlen(view_infos)+1) * sizeof(char));
|
||||
if (dms_infos == NULL)
|
||||
{
|
||||
obidebug(1, "\nError reallocating memory for DMS formatted infos");
|
||||
return NULL;
|
||||
}
|
||||
strcat(dms_infos, " # ");
|
||||
strcat(dms_infos, tax_name);
|
||||
}
|
||||
return dms_infos;
|
||||
}
|
||||
|
||||
|
||||
// TODO move somewhere else maybe
|
||||
// TODO discuss arguments
|
||||
obiversion_t obi_import_column(const char* dms_path_1, const char* dms_path_2, const char* column_name, obiversion_t version_number)
|
||||
|
Reference in New Issue
Block a user