obi arrays that don't work because of cython bug passing wrong pointers
This commit is contained in:
67
src/obidms.c
67
src/obidms.c
@ -14,6 +14,7 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/types.h>
|
||||
#include <dirent.h>
|
||||
|
||||
@ -21,6 +22,7 @@
|
||||
#include "obierrno.h"
|
||||
#include "obidebug.h"
|
||||
#include "obidmscolumn.h"
|
||||
#include "private_at_functions.h"
|
||||
|
||||
|
||||
#define DEBUG_LEVEL 0 // TODO has to be defined somewhere else (cython compil flag?)
|
||||
@ -113,7 +115,9 @@ int obi_dms_exists(const char* dms_name)
|
||||
|
||||
OBIDMS_p obi_create_dms(const char* dms_name)
|
||||
{
|
||||
char *directory_name;
|
||||
char* directory_name;
|
||||
DIR* dms_dir;
|
||||
int dms_file_descriptor;
|
||||
|
||||
// Build and check the directory name
|
||||
directory_name = build_directory_name(dms_name);
|
||||
@ -132,6 +136,35 @@ OBIDMS_p obi_create_dms(const char* dms_name)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Get file descriptor of DMS directory to create the arrays directory
|
||||
dms_dir = opendir(directory_name);
|
||||
if (dms_dir == NULL)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nProblem opening a newly created OBIDMS directory");
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
dms_file_descriptor = dirfd(dms_dir);
|
||||
if (dms_file_descriptor < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nProblem getting the file descriptor of a newly created OBIDMS directory");
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Create the arrays directory
|
||||
if (mkdirat(dms_file_descriptor, ARRAY_DIR_NAME, 00777) < 0)
|
||||
{
|
||||
obi_set_errno(OBI_ARRAY_ERROR);
|
||||
obidebug(1, "\nProblem creating an arrays directory");
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// TODO close file descriptor?
|
||||
|
||||
free(directory_name);
|
||||
|
||||
return obi_open_dms(dms_name);
|
||||
@ -143,6 +176,7 @@ OBIDMS_p obi_open_dms(const char* dms_name)
|
||||
OBIDMS_p dms;
|
||||
char* directory_name;
|
||||
DIR* directory;
|
||||
int dms_file_descriptor;
|
||||
|
||||
dms = NULL;
|
||||
|
||||
@ -191,8 +225,30 @@ OBIDMS_p obi_open_dms(const char* dms_name)
|
||||
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)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError getting the file descriptor for a newly created OBIDMS directory");
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Open the arrays directory
|
||||
dms->array_directory = private_opendirat(dms_file_descriptor, ARRAY_DIR_NAME);
|
||||
if (dms->array_directory == NULL)
|
||||
{
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
obidebug(1, "\nError opening the arrays directory");
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free(directory_name);
|
||||
|
||||
// TODO test if close file descriptor
|
||||
|
||||
return dms;
|
||||
}
|
||||
|
||||
@ -223,7 +279,14 @@ int obi_close_dms(OBIDMS_p dms)
|
||||
if (closedir(dms->directory) < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_MEMORY_ERROR);
|
||||
obidebug(1, "\nError closing an OBIDSM directory");
|
||||
obidebug(1, "\nError closing an OBIDMS directory");
|
||||
free(dms);
|
||||
return -1;
|
||||
}
|
||||
if (closedir(dms->array_directory) < 0)
|
||||
{
|
||||
obi_set_errno(OBI_ARRAY_ERROR);
|
||||
obidebug(1, "\nError closing an array directory");
|
||||
free(dms);
|
||||
return -1;
|
||||
}
|
||||
|
Reference in New Issue
Block a user