]> git.proxmox.com Git - libgit2.git/blob - src/fileops.h
win32: Add missing include for mkdir() and rmdir()
[libgit2.git] / src / fileops.h
1 /*
2 * fileops.h - OS agnostic disk io operations
3 *
4 * This header describes the strictly internal part of the api
5 */
6 #ifndef INCLUDE_fileops_h__
7 #define INCLUDE_fileops_h__
8
9 /** Force 64 bit off_t size on POSIX. */
10 #define _FILE_OFFSET_BITS 64
11
12 #include "common.h"
13 #include "map.h"
14 #include "dir.h"
15 #include <sys/stat.h>
16 #include <fcntl.h>
17 #include <time.h>
18
19 #if !defined(O_BINARY)
20 #define O_BINARY 0
21 #endif
22
23 #define GITFO_BUF_INIT {NULL, 0}
24
25 typedef int git_file;
26 typedef struct gitfo_cache gitfo_cache;
27
28 typedef struct { /* file io buffer */
29 void *data; /* data bytes */
30 size_t len; /* data length */
31 } gitfo_buf;
32
33 extern int gitfo_exists(const char *path);
34 extern int gitfo_open(const char *path, int flags);
35 extern int gitfo_creat(const char *path, int mode);
36 #define gitfo_close(fd) close(fd)
37
38 extern int gitfo_read(git_file fd, void *buf, size_t cnt);
39 extern int gitfo_write(git_file fd, void *buf, size_t cnt);
40 extern off_t gitfo_size(git_file fd);
41
42 extern int gitfo_read_file(gitfo_buf *obj, const char *path);
43 extern void gitfo_free_buf(gitfo_buf *obj);
44
45 #define gitfo_unlink(p) unlink(p)
46 #define gitfo_rmdir(p) rmdir(p)
47
48 #ifdef GIT_WIN32
49 #define gitfo_mkdir(p,m) mkdir(p)
50 #else
51 #define gitfo_mkdir(p,m) mkdir(p, m)
52 #endif
53
54 /**
55 * Read-only map all or part of a file into memory.
56 * When possible this function should favor a virtual memory
57 * style mapping over some form of malloc()+read(), as the
58 * data access will be random and is not likely to touch the
59 * majority of the region requested.
60 *
61 * @param out buffer to populate with the mapping information.
62 * @param fd open descriptor to configure the mapping from.
63 * @param begin first byte to map, this should be page aligned.
64 * @param end number of bytes to map.
65 * @return
66 * - GIT_SUCCESS on success;
67 * - GIT_EOSERR on an unspecified OS related error.
68 */
69 extern int gitfo_map_ro(
70 git_map *out,
71 git_file fd,
72 off_t begin,
73 size_t len);
74
75 /**
76 * Release the memory associated with a previous memory mapping.
77 * @param map the mapping description previously configured.
78 */
79 extern void gitfo_free_map(git_map *map);
80
81 /**
82 * Walk each directory entry, except '.' and '..', calling fn(state).
83 *
84 * @param pathbuf buffer the function reads the initial directory
85 * path from, and updates with each successive entry's name.
86 * @param pathmax maximum allocation of pathbuf.
87 * @param fn function to invoke with each entry. The first arg is
88 * the input state and the second arg is pathbuf. The function
89 * may modify the pathbuf, but only by appending new text.
90 * @param state to pass to fn as the first arg.
91 */
92 extern int gitfo_dirent(
93 char *pathbuf,
94 size_t pathmax,
95 int (*fn)(void *, char *),
96 void *state);
97
98 extern gitfo_cache *gitfo_enable_caching(git_file fd, size_t cache_size);
99 extern int gitfo_write_cached(gitfo_cache *ioc, void *buf, size_t len);
100 extern int gitfo_flush_cached(gitfo_cache *ioc);
101 extern int gitfo_close_cached(gitfo_cache *ioc);
102
103 #endif /* INCLUDE_fileops_h__ */