228 lines
7.5 KiB
C
228 lines
7.5 KiB
C
/*
|
|
cole - A free C OLE library.
|
|
Copyright 1998, 1999 Roberto Arturo Tena Sanchez
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
/*
|
|
Arturo Tena <arturo@directmail.org>
|
|
*/
|
|
|
|
#ifndef __COLE_H
|
|
#define __COLE_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/*
|
|
* Attention: this API is documentated in the `doc' subdirectory
|
|
*/
|
|
|
|
/* Just to get size_t */
|
|
#include <stdio.h>
|
|
#ifndef COLE_INTERNAL_H
|
|
#include "internal.h" /* For _COLE struct definitions */
|
|
#endif
|
|
#if !(defined( __BORLANDC__ ) || defined( __WIN32__ ))
|
|
/**************************************************************/
|
|
/* autoconf defines size_t as unsigned if not defined. */
|
|
/* Uncomment these ONLY if you don't have a size_t */
|
|
/* #ifndef size_t */
|
|
/* #define size_t unsigned */
|
|
/* #endif */
|
|
/**************************************************************/
|
|
#endif
|
|
|
|
/*
|
|
* **********************************************************************
|
|
* version info
|
|
* **********************************************************************
|
|
*/
|
|
#define COLE_MAJOR_VERSION 2
|
|
#define COLE_MINOR_VERSION 0
|
|
#define COLE_MICRO_VERSION 2
|
|
extern int cole_major_version;
|
|
extern int cole_minor_version;
|
|
extern int cole_micro_version;
|
|
extern char *cole_version;
|
|
extern char *cole_host_info;
|
|
|
|
/*
|
|
* **********************************************************************
|
|
* errors
|
|
* **********************************************************************
|
|
*/
|
|
enum _COLERRNO {
|
|
/* & = means that you can use perror(3) call to print an error message */
|
|
/* you can always use cole_perror to print an error message */
|
|
COLE_EFIRST, /* Leave this at first place */
|
|
/*&*/ COLE_EMEMORY, /* Failed malloc(3) or realloc(3) */
|
|
/*&*/ COLE_EOPENFILE, /* Failed fopen(3) */
|
|
/*&*/ COLE_ECLOSEFILE, /* Failed fclose(3) */
|
|
/*&*/ COLE_EREAD, /* Failed fread(3) */
|
|
/*&*/ COLE_EWRITE, /* Failed fwrite(3) */
|
|
/*&*/ COLE_EREMOVE, /* Failed remove(3) */
|
|
/*&*/ COLE_ETMPNAM, /* Failed tmpnam(3) */
|
|
/*&*/ COLE_ESEEK, /* Failed fseek(3) */
|
|
/*&*/ COLE_EERRNO, /* Some system call failed */
|
|
COLE_ENOFILESYSTEM, /* File is not a filesystem */
|
|
COLE_EINVALIDFILESYSTEM,/* Filesystem is broken, it's invalid */
|
|
COLE_EISNOTDIR, /* Directory entry is not a directory */
|
|
COLE_EISNOTFILE, /* Directory entry is not a file */
|
|
COLE_EFILENOTFOUND, /* Doesn't exist a file with the given name */
|
|
COLE_EOF, /* End of file has been reached */
|
|
COLE_EMEMBERISNOTDIR, /* A member of the filename is not
|
|
a directory */
|
|
COLE_EBROKENFILENAME, /* The filename is not right written */
|
|
COLE_EFILENAMEISNOTFILE,/* Filename is not a file */
|
|
COLE_EFSEEKDELTA, /* Delta argument is not valid */
|
|
COLE_EFSEEKFLAG, /* Flag argument is not valid */
|
|
COLE_EUNKNOWN, /* An unknown error ocurred, can be a bug */
|
|
COLE_ELAST /* Leave this at last place */
|
|
};
|
|
typedef enum _COLERRNO COLERRNO;
|
|
|
|
void cole_perror (const char *s, COLERRNO colerrno);
|
|
|
|
/*
|
|
* **********************************************************************
|
|
* other enums
|
|
* **********************************************************************
|
|
*/
|
|
enum _COLE_SEEK_FLAG
|
|
{
|
|
COLE_SEEK_SET,
|
|
COLE_SEEK_FORWARD,
|
|
COLE_SEEK_BACKWARD,
|
|
COLE_SEEK_END
|
|
};
|
|
typedef enum _COLE_SEEK_FLAG COLE_SEEK_FLAG;
|
|
|
|
/*
|
|
* **********************************************************************
|
|
* structures
|
|
* **********************************************************************
|
|
*/
|
|
/* These are opaque data types, because the internal structure will change */
|
|
typedef struct _COLEFS COLEFS;
|
|
typedef struct _COLEDIR COLEDIR;
|
|
typedef struct _COLEDIRENT COLEDIRENT;
|
|
typedef struct _COLEFILE COLEFILE;
|
|
|
|
|
|
/*
|
|
* **********************************************************************
|
|
* functions types
|
|
* **********************************************************************
|
|
*/
|
|
typedef int (COLE_RECURSE_DIR_FUNC) (COLEDIR *coledir,
|
|
void *info,
|
|
COLERRNO *colerrno);
|
|
typedef int (COLE_RECURSE_DIRENT_FUNC) (COLEDIRENT *coledirentry,
|
|
void *info,
|
|
COLERRNO *colerrno);
|
|
typedef int (COLE_RECURSE_VISIT_DIR_FUNC) (COLEDIR *coledir,
|
|
void *info);
|
|
typedef void (COLE_LOCATE_ACTION_FUNC) (COLEDIRENT *coledirentry,
|
|
void *info);
|
|
/*
|
|
* **********************************************************************
|
|
* calls
|
|
* **********************************************************************
|
|
*/
|
|
|
|
/* ***********
|
|
* filesystem
|
|
* ***********/
|
|
COLEFS * cole_mount (char *filename,
|
|
COLERRNO *colerrno);
|
|
int cole_umount (COLEFS *colefilesystem,
|
|
COLERRNO *colerrno);
|
|
int cole_print_tree (COLEFS *colefilesystem,
|
|
COLERRNO *colerrno);
|
|
int cole_locate_filename (COLEFS *colefilesystem,
|
|
char *filename,
|
|
void *info,
|
|
COLE_LOCATE_ACTION_FUNC *action,
|
|
COLERRNO *colerrno);
|
|
int cole_recurse_tree (COLEFS *colefilesystem,
|
|
void *info,
|
|
COLE_RECURSE_DIR_FUNC *inroot,
|
|
COLE_RECURSE_DIRENT_FUNC *indirentry,
|
|
COLE_RECURSE_DIR_FUNC *indir,
|
|
COLE_RECURSE_DIR_FUNC *outdir,
|
|
COLE_RECURSE_VISIT_DIR_FUNC *visitdir,
|
|
COLERRNO *colerrno);
|
|
|
|
|
|
/* ***********
|
|
* file
|
|
* ***********/
|
|
COLEFILE * cole_fopen (COLEFS *colefilesystem,
|
|
char *filename,
|
|
COLERRNO *colerrno);
|
|
COLEFILE * cole_fopen_direntry (COLEDIRENT *coledirentry,
|
|
COLERRNO *colerrno);
|
|
int cole_fclose (COLEFILE *colefile,
|
|
COLERRNO *colerrno);
|
|
size_t cole_fsize (COLEFILE *colefile);
|
|
size_t cole_fread (COLEFILE *colefile,
|
|
void *ptr,
|
|
size_t size,
|
|
COLERRNO *colerrno);
|
|
int cole_feof (COLEFILE *colefile);
|
|
size_t cole_ftell (COLEFILE *colefile);
|
|
int cole_fseek (COLEFILE *colefile,
|
|
size_t delta,
|
|
COLE_SEEK_FLAG direction,
|
|
COLERRNO *colerrno);
|
|
int cole_frewind (COLEFILE *colefile,
|
|
COLERRNO *colerrno);
|
|
|
|
/* ***********
|
|
* directory and directory entry
|
|
* ***********/
|
|
COLEDIR * cole_opendir_rootdir (COLEFS *colefilesystem,
|
|
COLERRNO *colerrno);
|
|
COLEDIR * cole_opendir_direntry (COLEDIRENT *coledirentry,
|
|
COLERRNO *colerrno);
|
|
int cole_closedir (COLEDIR *coledir,
|
|
COLERRNO *colerrno);
|
|
COLEDIRENT * cole_visiteddirentry (COLEDIR *coledir);
|
|
COLEDIRENT * cole_nextdirentry (COLEDIR *coledir);
|
|
char * cole_dir_getname (COLEDIR *coledir);
|
|
size_t cole_dir_getsize (COLEDIR *coledir);
|
|
long cole_dir_getdays1 (COLEDIR *coledir);
|
|
long cole_dir_getsec1 (COLEDIR *coledir);
|
|
long cole_dir_getdays2 (COLEDIR *coledir);
|
|
long cole_dir_getsec2 (COLEDIR *coledir);
|
|
char * cole_direntry_getname (COLEDIRENT *coledirentry);
|
|
size_t cole_direntry_getsize (COLEDIRENT *coledirentry);
|
|
long cole_direntry_getdays1 (COLEDIRENT *coledirentry);
|
|
long cole_direntry_getsec1 (COLEDIRENT *coledirentry);
|
|
long cole_direntry_getdays2 (COLEDIRENT *coledirentry);
|
|
long cole_direntry_getsec2 (COLEDIRENT *coledirentry);
|
|
int cole_direntry_isdir (COLEDIRENT *coledirentry);
|
|
int cole_direntry_isfile (COLEDIRENT *coledirentry);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __COLE_H */
|
|
|