fixed bugs and typos in the obidms and obidmscolumn source and header
files
This commit is contained in:
146
src/obidms.c
146
src/obidms.c
@ -5,7 +5,10 @@
|
||||
* @Author: coissac
|
||||
*/
|
||||
|
||||
#include <obidms.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "obidms.h"
|
||||
|
||||
|
||||
/************************************************************************
|
||||
@ -23,10 +26,10 @@
|
||||
*
|
||||
* @warning The returned pointer has to be freed by the caller.
|
||||
*
|
||||
* @param name the name of the OBIDMS
|
||||
* @param dms_name the name of the OBIDMS
|
||||
*
|
||||
* @return a pointer to the directory name
|
||||
* @retvalue <dirdbname> if everything is ok
|
||||
* @retvalue <directory_name> if everything is ok
|
||||
* @retvalue NULL if an error occurs
|
||||
*
|
||||
* ###Error values
|
||||
@ -36,27 +39,7 @@
|
||||
* @since May 2015
|
||||
* @author Eric Coissac (eric.coissac@metabarcoding.org)
|
||||
*/
|
||||
static char *build_directory_name(const char *name) {
|
||||
|
||||
char *dirdbname;
|
||||
|
||||
// Build the database directory name
|
||||
if (asprintf(&dirdbname,"%s.obidms",name) < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_MEMORY_ERROR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Test if the database name is not too long
|
||||
if (strlen(dirdbname) >= OBIDMS_MAX_NAME)
|
||||
{
|
||||
obi_set_errno(OBIDMS_LONG_NAME_ERROR);
|
||||
free(dirdbname);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return dirdbname;
|
||||
}
|
||||
static char *build_directory_name(const char *dms_name);
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
@ -65,67 +48,101 @@ static char *build_directory_name(const char *name) {
|
||||
*
|
||||
***********************************************************************/
|
||||
|
||||
int obi_dms_exists(const char* name) {
|
||||
static char *build_directory_name(const char *dms_name)
|
||||
{
|
||||
char *directory_name;
|
||||
|
||||
// Build the database directory name
|
||||
if (asprintf(&directory_name, "%s.obidms", dms_name) < 0)
|
||||
{
|
||||
obi_set_errno(OBIDMS_MEMORY_ERROR);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Test if the database name is not too long
|
||||
if (strlen(directory_name) >= OBIDMS_MAX_NAME)
|
||||
{
|
||||
obi_set_errno(OBIDMS_LONG_NAME_ERROR);
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return directory_name;
|
||||
}
|
||||
|
||||
|
||||
/*********************************************************************
|
||||
*
|
||||
* D E F I N I T I O N O F T H E P U B L I C F U N C T I O N S
|
||||
*
|
||||
*********************************************************************/
|
||||
|
||||
int obi_dms_exists(const char* dms_name)
|
||||
{
|
||||
struct stat buffer;
|
||||
char *dirdbname;
|
||||
int exist;
|
||||
char *directory_name;
|
||||
int exists;
|
||||
|
||||
// Build and check the directory name
|
||||
dirdbname = build_directory_name(name);
|
||||
if (dirdbname==NULL)
|
||||
directory_name = build_directory_name(dms_name);
|
||||
if (directory_name == NULL)
|
||||
return -1;
|
||||
|
||||
exist = stat(dirdbname,&buffer);
|
||||
exists = stat(directory_name, &buffer);
|
||||
|
||||
free(dirdbname);
|
||||
free(directory_name);
|
||||
|
||||
if(exist == 0)
|
||||
if(exists == 0)
|
||||
return 1;
|
||||
else // -1
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
OBIDMS_p obi_create_dms(const char *name) {
|
||||
char *dirdbname;
|
||||
OBIDMS_p obi_create_dms(const char* dms_name)
|
||||
{
|
||||
char *directory_name;
|
||||
|
||||
// Build and check the directory name
|
||||
dirdbname = build_directory_name(name);
|
||||
if (dirdbname==NULL)
|
||||
directory_name = build_directory_name(dms_name);
|
||||
if (directory_name == NULL)
|
||||
return NULL;
|
||||
|
||||
|
||||
// Try to create the directory
|
||||
if (mkdir(dirdbname,0x777) < 0)
|
||||
if (mkdir(directory_name, 0x777) < 0)
|
||||
{
|
||||
if (errno==EEXIST)
|
||||
if (errno == EEXIST)
|
||||
obi_set_errno(OBIDMS_EXIST_ERROR);
|
||||
else
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
|
||||
free(dirdbname);
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
free(dirdbname);
|
||||
free(directory_name);
|
||||
|
||||
return obi_open_dms(name);
|
||||
return obi_open_dms(dms_name);
|
||||
}
|
||||
|
||||
|
||||
OBIDMS_p obi_open_dms(const char *name) {
|
||||
OBIDMS_p dms=NULL;
|
||||
char *dirdbname;
|
||||
DIR *directory;
|
||||
OBIDMS_p obi_open_dms(const char* dms_name)
|
||||
{
|
||||
OBIDMS_p dms;
|
||||
char* directory_name;
|
||||
DIR* directory;
|
||||
|
||||
dms = NULL;
|
||||
|
||||
// Build and check the directory name
|
||||
dirdbname = build_directory_name(name);
|
||||
if (dirdbname==NULL)
|
||||
directory_name = build_directory_name(dms_name);
|
||||
if (directory_name == NULL)
|
||||
return NULL;
|
||||
|
||||
// try to open the directory
|
||||
directory = opendir(dirdbname);
|
||||
if (directory==NULL) {
|
||||
directory = opendir(directory_name);
|
||||
if (directory == NULL) {
|
||||
switch (errno) {
|
||||
case ENOENT:
|
||||
obi_set_errno(OBIDMS_NOT_EXIST_ERROR);
|
||||
@ -142,37 +159,38 @@ OBIDMS_p obi_open_dms(const char *name) {
|
||||
default:
|
||||
obi_set_errno(OBIDMS_UNKNOWN_ERROR);
|
||||
}
|
||||
free(dirdbname);
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Allocate the data structure
|
||||
dms = (OBIDMS_p) malloc(sizeof(OBIDMS_t));
|
||||
|
||||
if (dms==NULL)
|
||||
if (dms == NULL)
|
||||
{
|
||||
obi_set_errno(OBIDMS_MEMORY_ERROR);
|
||||
free(dirdbname);
|
||||
free(directory_name);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Initialise the data structure
|
||||
strcpy(dms->dirname,dirdbname);
|
||||
dms->directory=directory;
|
||||
// Initialize the data structure
|
||||
strcpy(dms->directory_name, directory_name);
|
||||
dms->directory = directory;
|
||||
|
||||
free(dirdbname);
|
||||
free(directory_name);
|
||||
return dms;
|
||||
}
|
||||
|
||||
|
||||
OBIDMS_p obi_dms(const char *name) {
|
||||
int exist = obi_dms_exists(name);
|
||||
OBIDMS_p obi_dms(const char* dms_name)
|
||||
{
|
||||
int exists = obi_dms_exists(dms_name);
|
||||
|
||||
switch (exist) {
|
||||
switch (exists) {
|
||||
case 0:
|
||||
return obi_create_dms(name);
|
||||
return obi_create_dms(dms_name);
|
||||
case 1:
|
||||
return obi_open_dms(name);
|
||||
return obi_open_dms(dms_name);
|
||||
};
|
||||
|
||||
return NULL;
|
||||
@ -180,8 +198,8 @@ OBIDMS_p obi_dms(const char *name) {
|
||||
}
|
||||
|
||||
|
||||
int obi_close_dms(OBIDMS_p dms) {
|
||||
|
||||
int obi_close_dms(OBIDMS_p dms)
|
||||
{
|
||||
if (dms != NULL)
|
||||
{
|
||||
if (closedir(dms->directory) < 0)
|
||||
@ -190,9 +208,7 @@ int obi_close_dms(OBIDMS_p dms) {
|
||||
free(dms);
|
||||
return -1;
|
||||
}
|
||||
|
||||
free(dms);
|
||||
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Reference in New Issue
Block a user