File descriptors for dms, column and array directories are now stored in
structures.
This commit is contained in:
62
src/obidms.c
62
src/obidms.c
@ -164,7 +164,6 @@ OBIDMS_p obi_create_dms(const char* dms_name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
return obi_open_dms(dms_name);
|
||||
}
|
||||
|
||||
@ -173,19 +172,32 @@ OBIDMS_p obi_open_dms(const char* dms_name)
|
||||
{
|
||||
OBIDMS_p dms;
|
||||
char* directory_name;
|
||||
DIR* directory;
|
||||
int dms_file_descriptor;
|
||||
|
||||
dms = NULL;
|
||||
|
||||
// Allocate the data structure
|
||||
dms = (OBIDMS_p) malloc(sizeof(OBIDMS_t));
|
||||
if (dms == NULL)
|
||||
{
|
||||
obi_set_errno(OBIDMS_MEMORY_ERROR);
|
||||
obidebug(1, "\nError allocating the memory for the OBIDMS structure");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Build and check the directory name
|
||||
directory_name = build_directory_name(dms_name);
|
||||
if (directory_name == NULL)
|
||||
{
|
||||
free(dms);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
strncpy(dms->directory_name, directory_name, OBIDMS_MAX_NAME);
|
||||
free(directory_name);
|
||||
|
||||
// Try to open the directory
|
||||
directory = opendir(directory_name);
|
||||
if (directory == NULL)
|
||||
dms->directory = opendir(dms->directory_name);
|
||||
if (dms->directory == NULL)
|
||||
{
|
||||
switch (errno)
|
||||
{
|
||||
@ -205,45 +217,43 @@ OBIDMS_p obi_open_dms(const char* dms_name)
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
}
|
||||
obidebug(1, "\nCan't open OBIDMS directory");
|
||||
free(directory_name);
|
||||
free(dms);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Allocate the data structure
|
||||
dms = (OBIDMS_p) malloc(sizeof(OBIDMS_t));
|
||||
if (dms == NULL)
|
||||
{
|
||||
obi_set_errno(OBIDMS_MEMORY_ERROR);
|
||||
obidebug(1, "\nError allocating the memory for the OBIDMS structure");
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialize the data structure
|
||||
strcpy(dms->directory_name, directory_name);
|
||||
dms->directory = directory;
|
||||
|
||||
// Get file descriptor of DMS directory to open the arrays directory
|
||||
dms_file_descriptor = dirfd(directory);
|
||||
if (dms_file_descriptor < 0)
|
||||
dms->dir_fd = dirfd(dms->directory);
|
||||
if (dms->dir_fd < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError getting the file descriptor for a newly created OBIDMS directory");
|
||||
free(directory_name);
|
||||
closedir(dms->directory);
|
||||
free(dms);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Open the arrays directory
|
||||
dms->array_directory = private_opendirat(dms_file_descriptor, ARRAY_DIR_NAME);
|
||||
dms->array_directory = private_opendirat(dms->dir_fd, ARRAY_DIR_NAME);
|
||||
if (dms->array_directory == NULL)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError opening the arrays directory");
|
||||
free(directory_name);
|
||||
closedir(dms->directory);
|
||||
free(dms);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free(directory_name);
|
||||
// Store the array directory's file descriptor
|
||||
dms->array_dir_fd = dirfd(dms->array_directory);
|
||||
if (dms->array_dir_fd < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError opening the arrays directory");
|
||||
closedir(dms->directory);
|
||||
closedir(dms->array_directory);
|
||||
free(dms);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dms;
|
||||
}
|
||||
|
Reference in New Issue
Block a user