Skip to content
Snippets Groups Projects
Commit 5976a64b authored by rswindell's avatar rswindell
Browse files

Added glob POSIX routines for non-Unix platforms.

Added isdir function to check if a path is a directory.
Added BACKSLASH macro (os-specific path separator).
parent 0e9c9c03
No related branches found
No related tags found
No related merge requests found
......@@ -38,6 +38,48 @@
#ifndef _SBBSWRAP_H
#define _SBBSWRAP_H
#ifdef _MSC_VER
#include "msdirent.h"
#else
#include <dirent.h> /* POSIX directory functions */
#endif
#ifdef __unix__
#include <glob.h> /* POSIX.2 directory pattern matching function */
#else
typedef struct
{
size_t gl_pathc; /* Count of paths matched so far */
char **gl_pathv; /* List of matched pathnames. */
size_t gl_offs; /* Slots to reserve in 'gl_pathv'. */
} glob_t;
/* Bits set in the FLAGS argument to `glob'. */
#define GLOB_ERR (1 << 0) /* Return on read errors. */
#define GLOB_MARK (1 << 1) /* Append a slash to each name. */
#define GLOB_NOSORT (1 << 2) /* Don't sort the names. */
#define GLOB_DOOFFS (1 << 3) /* Insert PGLOB->gl_offs NULLs. */
#define GLOB_NOCHECK (1 << 4) /* If nothing matches, return the pattern. */
#define GLOB_APPEND (1 << 5) /* Append to results of a previous call. */
#define GLOB_NOESCAPE (1 << 6) /* Backslashes don't quote metacharacters. */
#define GLOB_PERIOD (1 << 7) /* Leading `.' can be matched by metachars. */
#define GLOB_MAGCHAR (1 << 8) /* Set in gl_flags if any metachars seen. */
#define GLOB_ALTDIRFUNC (1 << 9) /* Use gl_opendir et al functions. */
#define GLOB_BRACE (1 << 10) /* Expand "{a,b}" to "a" "b". */
#define GLOB_NOMAGIC (1 << 11) /* If no magic chars, return the pattern. */
#define GLOB_TILDE (1 << 12) /* Expand ~user and ~ to home directories. */
#define GLOB_ONLYDIR (1 << 13) /* Match only directories. */
#define GLOB_TILDE_CHECK (1 << 14) /* Like GLOB_TILDE but return an error
if the user name is not available. */
/* Error returns from `glob'. */
#define GLOB_NOSPACE 1 /* Ran out of memory. */
#define GLOB_ABORTED 2 /* Read error. */
#define GLOB_NOMATCH 3 /* No matches found. */
#define GLOB_NOSYS 4 /* Not implemented. */
#endif
#include "gen_defs.h" /* ulong */
#ifdef DLLEXPORT
......@@ -127,7 +169,21 @@ extern "C" {
#endif
/**********/
/* Macros */
/**********/
/* POSIX readdir convenience macro */
#ifndef DIRENT
#define DIRENT struct dirent
#endif
#if defined(__unix__)
#define BACKSLASH '/'
#else /* MS-DOS based OS */
#define BACKSLASH '\\'
#endif
#if defined(_MSC_VER) || defined(__MINGW32__)
#define CHMOD(s,m) _chmod(s,m)
......@@ -164,9 +220,12 @@ extern "C" {
/* General file system wrappers for all platforms and compilers */
DLLEXPORT long DLLCALL fdate(char *filename);
DLLEXPORT int DLLCALL getfattr(char* filename);
DLLEXPORT ulong DLLCALL getfreediskspace(char* path);
DLLEXPORT int DLLCALL glob(const char *pattern, int flags, void* unused, glob_t*);
DLLEXPORT void DLLCALL globfree(glob_t*);
DLLEXPORT long DLLCALL fdate(char *filename);
DLLEXPORT BOOL DLLCALL isdir(char *filename);
DLLEXPORT int DLLCALL getfattr(char* filename);
DLLEXPORT ulong DLLCALL getfreediskspace(char* path);
#ifdef __cplusplus
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment