]>
Commit | Line | Data |
---|---|---|
d5ebb50d EN |
1 | #ifndef WRAPPER_H |
2 | #define WRAPPER_H | |
3 | ||
382f6940 CW |
4 | char *xstrdup(const char *str); |
5 | void *xmalloc(size_t size); | |
6 | void *xmallocz(size_t size); | |
7 | void *xmallocz_gently(size_t size); | |
8 | void *xmemdupz(const void *data, size_t len); | |
9 | char *xstrndup(const char *str, size_t len); | |
10 | void *xrealloc(void *ptr, size_t size); | |
11 | void *xcalloc(size_t nmemb, size_t size); | |
12 | void xsetenv(const char *name, const char *value, int overwrite); | |
13 | void *xmmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); | |
14 | const char *mmap_os_err(void); | |
15 | void *xmmap_gently(void *start, size_t length, int prot, int flags, int fd, off_t offset); | |
16 | int xopen(const char *path, int flags, ...); | |
17 | ssize_t xread(int fd, void *buf, size_t len); | |
18 | ssize_t xwrite(int fd, const void *buf, size_t len); | |
19 | ssize_t xpread(int fd, void *buf, size_t len, off_t offset); | |
20 | int xdup(int fd); | |
21 | FILE *xfopen(const char *path, const char *mode); | |
22 | FILE *xfdopen(int fd, const char *mode); | |
23 | int xmkstemp(char *temp_filename); | |
24 | int xmkstemp_mode(char *temp_filename, int mode); | |
25 | char *xgetcwd(void); | |
26 | FILE *fopen_for_writing(const char *path); | |
27 | FILE *fopen_or_warn(const char *path, const char *mode); | |
28 | ||
29 | /* | |
30 | * Like strncmp, but only return zero if s is NUL-terminated and exactly len | |
31 | * characters long. If it is not, consider it greater than t. | |
32 | */ | |
33 | int xstrncmpz(const char *s, const char *t, size_t len); | |
34 | ||
35 | __attribute__((format (printf, 3, 4))) | |
36 | int xsnprintf(char *dst, size_t max, const char *fmt, ...); | |
37 | ||
38 | int xgethostname(char *buf, size_t len); | |
39 | ||
d5ebb50d EN |
40 | /* set default permissions by passing mode arguments to open(2) */ |
41 | int git_mkstemps_mode(char *pattern, int suffix_len, int mode); | |
42 | int git_mkstemp_mode(char *pattern, int mode); | |
43 | ||
44 | ssize_t read_in_full(int fd, void *buf, size_t count); | |
45 | ssize_t write_in_full(int fd, const void *buf, size_t count); | |
46 | ssize_t pread_in_full(int fd, void *buf, size_t count, off_t offset); | |
47 | ||
48 | static inline ssize_t write_str_in_full(int fd, const char *str) | |
49 | { | |
50 | return write_in_full(fd, str, strlen(str)); | |
51 | } | |
52 | ||
53 | /** | |
54 | * Open (and truncate) the file at path, write the contents of buf to it, | |
55 | * and close it. Dies if any errors are encountered. | |
56 | */ | |
57 | void write_file_buf(const char *path, const char *buf, size_t len); | |
58 | ||
59 | /** | |
60 | * Like write_file_buf(), but format the contents into a buffer first. | |
61 | * Additionally, write_file() will append a newline if one is not already | |
62 | * present, making it convenient to write text files: | |
63 | * | |
64 | * write_file(path, "counter: %d", ctr); | |
65 | */ | |
66 | __attribute__((format (printf, 2, 3))) | |
67 | void write_file(const char *path, const char *fmt, ...); | |
68 | ||
69 | /* Return 1 if the file is empty or does not exists, 0 otherwise. */ | |
70 | int is_empty_or_missing_file(const char *filename); | |
71 | ||
382f6940 CW |
72 | enum fsync_action { |
73 | FSYNC_WRITEOUT_ONLY, | |
74 | FSYNC_HARDWARE_FLUSH | |
75 | }; | |
76 | ||
77 | /* | |
78 | * Issues an fsync against the specified file according to the specified mode. | |
79 | * | |
80 | * FSYNC_WRITEOUT_ONLY attempts to use interfaces available on some operating | |
81 | * systems to flush the OS cache without issuing a flush command to the storage | |
82 | * controller. If those interfaces are unavailable, the function fails with | |
83 | * ENOSYS. | |
84 | * | |
85 | * FSYNC_HARDWARE_FLUSH does an OS writeout and hardware flush to ensure that | |
86 | * changes are durable. It is not expected to fail. | |
87 | */ | |
88 | int git_fsync(int fd, enum fsync_action action); | |
89 | ||
382f6940 CW |
90 | /* |
91 | * Preserves errno, prints a message, but gives no warning for ENOENT. | |
92 | * Returns 0 on success, which includes trying to unlink an object that does | |
93 | * not exist. | |
94 | */ | |
95 | int unlink_or_warn(const char *path); | |
96 | /* | |
97 | * Tries to unlink file. Returns 0 if unlink succeeded | |
98 | * or the file already didn't exist. Returns -1 and | |
99 | * appends a message to err suitable for | |
100 | * 'error("%s", err->buf)' on error. | |
101 | */ | |
102 | int unlink_or_msg(const char *file, struct strbuf *err); | |
103 | /* | |
104 | * Preserves errno, prints a message, but gives no warning for ENOENT. | |
105 | * Returns 0 on success, which includes trying to remove a directory that does | |
106 | * not exist. | |
107 | */ | |
108 | int rmdir_or_warn(const char *path); | |
382f6940 CW |
109 | |
110 | /* | |
111 | * Call access(2), but warn for any error except "missing file" | |
112 | * (ENOENT or ENOTDIR). | |
113 | */ | |
114 | #define ACCESS_EACCES_OK (1U << 0) | |
115 | int access_or_warn(const char *path, int mode, unsigned flag); | |
116 | int access_or_die(const char *path, int mode, unsigned flag); | |
117 | ||
118 | /* Warn on an inaccessible file if errno indicates this is an error */ | |
119 | int warn_on_fopen_errors(const char *path); | |
120 | ||
121 | /* | |
122 | * Open with O_NOFOLLOW, or equivalent. Note that the fallback equivalent | |
123 | * may be racy. Do not use this as protection against an attacker who can | |
124 | * simultaneously create paths. | |
125 | */ | |
126 | int open_nofollow(const char *path, int flags); | |
127 | ||
128 | void sleep_millisec(int millisec); | |
129 | ||
130 | /* | |
131 | * Generate len bytes from the system cryptographically secure PRNG. | |
132 | * Returns 0 on success and -1 on error, setting errno. The inability to | |
133 | * satisfy the full request is an error. | |
134 | */ | |
135 | int csprng_bytes(void *buf, size_t len); | |
136 | ||
89024a0a DS |
137 | /* |
138 | * Returns a random uint32_t, uniformly distributed across all possible | |
139 | * values. | |
140 | */ | |
141 | uint32_t git_rand(void); | |
142 | ||
d5ebb50d | 143 | #endif /* WRAPPER_H */ |