diff options
Diffstat (limited to 'src/libs/uio/io.h')
-rw-r--r-- | src/libs/uio/io.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/src/libs/uio/io.h b/src/libs/uio/io.h new file mode 100644 index 0000000..813a2c3 --- /dev/null +++ b/src/libs/uio/io.h @@ -0,0 +1,159 @@ +/* + * Copyright (C) 2003 Serge van den Boom + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * Nota bene: later versions of the GNU General Public License do not apply + * to this program. + * + * 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 + * + */ + +#ifndef LIBS_UIO_IO_H_ +#define LIBS_UIO_IO_H_ + +#include <assert.h> +#include <sys/stat.h> + +typedef struct uio_Handle uio_Handle; +typedef struct uio_DirHandle uio_DirHandle; +typedef struct uio_DirList uio_DirList; +typedef struct uio_MountHandle uio_MountHandle; + +typedef enum { + uio_MOUNT_BOTTOM = (0 << 2), + uio_MOUNT_TOP = (1 << 2), + uio_MOUNT_BELOW = (2 << 2), + uio_MOUNT_ABOVE = (3 << 2) +} uio_MountLocation; + +#include "match.h" +#include "fstypes.h" +#include "mount.h" +#include "mounttree.h" +#include "uiostream.h" +#include "getint.h" +#include "debug.h" + +struct uio_AutoMount { + const char *pattern; + match_MatchType matchType; + uio_FileSystemID fileSystemID; + int mountFlags; +// uio_AutoMount **autoMount; + // automount rules to apply to file systems automounted + // because of this automount rule. +}; + +#ifndef uio_INTERNAL +struct uio_DirList { + const char **names; + int numNames; + // The rest of the fields are not visible from the outside +}; +#endif + + +// Initialise the resource system +void uio_init(void); + +// Uninitialise the resource system +void uio_unInit(void); + +// Open a repository. +uio_Repository *uio_openRepository(int flags); + +// Close a repository opened by uio_openRepository(). +void uio_closeRepository(uio_Repository *repository); + +// Mount a directory into a repository +uio_MountHandle *uio_mountDir(uio_Repository *destRep, const char *mountPoint, + uio_FileSystemID fsType, + uio_DirHandle *sourceDir, const char *sourcePath, + const char *inPath, uio_AutoMount **autoMount, int flags, + uio_MountHandle *relative); + +// Mount a repository directory into same repository at a different +// location. +// From fossil. +uio_MountHandle *uio_transplantDir(const char *mountPoint, + uio_DirHandle *sourceDir, int flags, uio_MountHandle *relative); + +// Unmount a previously mounted dir. +int uio_unmountDir(uio_MountHandle *mountHandle); + +// Unmount all previously mounted dirs. +int uio_unmountAllDirs(uio_Repository *repository); + +// Get the filesystem identifier for a mounted directory. +uio_FileSystemID uio_getMountFileSystemType(uio_MountHandle *mountHandle); + +// Open a file +uio_Handle *uio_open(uio_DirHandle *dir, const char *file, int flags, + mode_t mode); + +// Close a file descriptor for a file opened by uio_open +int uio_close(uio_Handle *handle); + +// Rename or move a file or directory. +int uio_rename(uio_DirHandle *oldDir, const char *oldPath, + uio_DirHandle *newDir, const char *newPath); + +// Test permissions on a file or directory. +int uio_access(uio_DirHandle *dir, const char *path, int mode); + +// Fstat a file descriptor +int uio_fstat(uio_Handle *handle, struct stat *statBuf); + +int uio_stat(uio_DirHandle *dir, const char *path, struct stat *statBuf); + +int uio_mkdir(uio_DirHandle *dir, const char *name, mode_t mode); + +ssize_t uio_read(uio_Handle *handle, void *buf, size_t count); + +int uio_rmdir(uio_DirHandle *dirHandle, const char *path); + +int uio_lseek(uio_Handle *handle, off_t offset, int whence); + +ssize_t uio_write(uio_Handle *handle, const void *buf, size_t count); + +int uio_unlink(uio_DirHandle *dirHandle, const char *path); + +int uio_getFileLocation(uio_DirHandle *dir, const char *inPath, + int flags, uio_MountHandle **mountHandle, char **outPath); + +// Get a directory handle. +uio_DirHandle *uio_openDir(uio_Repository *repository, const char *path, + int flags); +#define uio_OD_ROOT 1 + +// Get a directory handle using a path relative to another handle. +uio_DirHandle *uio_openDirRelative(uio_DirHandle *base, const char *path, + int flags); + +// Release a directory handle +int uio_closeDir(uio_DirHandle *dirHandle); + +uio_DirList *uio_getDirList(uio_DirHandle *dirHandle, const char *path, + const char *pattern, match_MatchType matchType); +void uio_DirList_free(uio_DirList *dirList); + +// For debugging purposes +void uio_DirHandle_print(const uio_DirHandle *dirHandle, FILE *out); + + +#ifdef DEBUG +# define uio_DEBUG +#endif + +#endif /* LIBS_UIO_IO_H_ */ + |