Branch to refactor and debug (AVLs bugged)
This commit is contained in:
107
src/utils.c
Normal file
107
src/utils.c
Normal file
@ -0,0 +1,107 @@
|
||||
/****************************************************************************
|
||||
* Utility functions *
|
||||
****************************************************************************/
|
||||
|
||||
/**
|
||||
* @file utils.c
|
||||
* @author Celine Mercier (celine.mercier@metabarcoding.org)
|
||||
* @date 29 March 2016
|
||||
* @brief Code for utility functions.
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "utils.h"
|
||||
#include "obidebug.h"
|
||||
#include "obierrno.h"
|
||||
#include "obidms.h"
|
||||
|
||||
|
||||
#define DEBUG_LEVEL 0 // TODO has to be defined somewhere else (cython compil flag?)
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
*
|
||||
* 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
|
||||
*
|
||||
**********************************************************************/
|
||||
|
||||
char* get_full_path(OBIDMS_p dms, const char* path_name)
|
||||
{
|
||||
char* full_path;
|
||||
|
||||
full_path = (char*) malloc((MAX_PATH_LEN)*sizeof(char));
|
||||
if (full_path == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_MALLOC_ERROR);
|
||||
obidebug(1, "\nError allocating memory for the char* path to a file or directory");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (getcwd(full_path, MAX_PATH_LEN) == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_UTILS_ERROR);
|
||||
obidebug(1, "\nError getting the path to a file or directory");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
strcat(full_path, "/");
|
||||
strcat(full_path, dms->directory_name);
|
||||
strcat(full_path, "/");
|
||||
strcat(full_path, path_name);
|
||||
|
||||
return full_path;
|
||||
}
|
||||
|
||||
|
||||
DIR* opendir_in_dms(OBIDMS_p dms, const char* path_name)
|
||||
{
|
||||
char* full_path;
|
||||
DIR* directory;
|
||||
|
||||
full_path = get_full_path(dms, path_name);
|
||||
if (full_path == NULL)
|
||||
return NULL;
|
||||
|
||||
directory = opendir(full_path);
|
||||
if (directory == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_UTILS_ERROR);
|
||||
obidebug(1, "\nError opening a directory");
|
||||
}
|
||||
|
||||
free(full_path);
|
||||
|
||||
return directory;
|
||||
}
|
||||
|
||||
|
||||
int count_dir(char *dir)
|
||||
{
|
||||
struct dirent *dp;
|
||||
DIR *fd;
|
||||
int count;
|
||||
|
||||
count = 0;
|
||||
if ((fd = opendir(dir)) == NULL)
|
||||
{
|
||||
obi_set_errno(OBI_UTILS_ERROR);
|
||||
obidebug(1, "Error opening a directory: %s\n", dir);
|
||||
return -1;
|
||||
}
|
||||
while ((dp = readdir(fd)) != NULL)
|
||||
{
|
||||
if ((dp->d_name)[0] == '.')
|
||||
continue;
|
||||
count++;
|
||||
}
|
||||
return count;
|
||||
}
|
Reference in New Issue
Block a user