summaryrefslogtreecommitdiff
path: root/lockfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'lockfile.h')
-rw-r--r--lockfile.h46
1 files changed, 35 insertions, 11 deletions
diff --git a/lockfile.h b/lockfile.h
index f401c979f0..db93e6ba73 100644
--- a/lockfile.h
+++ b/lockfile.h
@@ -90,6 +90,15 @@
* functions. In particular, the state diagram and the cleanup
* machinery are all implemented in the tempfile module.
*
+ * Permission bits
+ * ---------------
+ *
+ * If you call either `hold_lock_file_for_update_mode` or
+ * `hold_lock_file_for_update_timeout_mode`, you can specify a suggested
+ * mode for the underlying temporary file. Note that the file isn't
+ * guaranteed to have this exact mode, since it may be limited by either
+ * the umask, 'core.sharedRepository', or both. See `adjust_shared_perm`
+ * for more.
*
* Error handling
* --------------
@@ -156,12 +165,20 @@ struct lock_file {
* file descriptor for writing to it, or -1 on error. If the file is
* currently locked, retry with quadratic backoff for at least
* timeout_ms milliseconds. If timeout_ms is 0, try exactly once; if
- * timeout_ms is -1, retry indefinitely. The flags argument and error
- * handling are described above.
+ * timeout_ms is -1, retry indefinitely. The flags argument, error
+ * handling, and mode are described above.
*/
-extern int hold_lock_file_for_update_timeout(
+int hold_lock_file_for_update_timeout_mode(
+ struct lock_file *lk, const char *path,
+ int flags, long timeout_ms, int mode);
+
+static inline int hold_lock_file_for_update_timeout(
struct lock_file *lk, const char *path,
- int flags, long timeout_ms);
+ int flags, long timeout_ms)
+{
+ return hold_lock_file_for_update_timeout_mode(lk, path, flags,
+ timeout_ms, 0666);
+}
/*
* Attempt to create a lockfile for the file at `path` and return a
@@ -175,6 +192,13 @@ static inline int hold_lock_file_for_update(
return hold_lock_file_for_update_timeout(lk, path, flags, 0);
}
+static inline int hold_lock_file_for_update_mode(
+ struct lock_file *lk, const char *path,
+ int flags, int mode)
+{
+ return hold_lock_file_for_update_timeout_mode(lk, path, flags, 0, mode);
+}
+
/*
* Return a nonzero value iff `lk` is currently locked.
*/
@@ -188,8 +212,8 @@ static inline int is_lock_file_locked(struct lock_file *lk)
* of `hold_lock_file_for_update()` to lock `path`. `err` should be the
* `errno` set by the failing call.
*/
-extern void unable_to_lock_message(const char *path, int err,
- struct strbuf *buf);
+void unable_to_lock_message(const char *path, int err,
+ struct strbuf *buf);
/*
* Emit an appropriate error message and `die()` following the failure
@@ -197,7 +221,7 @@ extern void unable_to_lock_message(const char *path, int err,
* `errno` set by the failing
* call.
*/
-extern NORETURN void unable_to_lock_die(const char *path, int err);
+NORETURN void unable_to_lock_die(const char *path, int err);
/*
* Associate a stdio stream with the lockfile (which must still be
@@ -234,7 +258,7 @@ static inline FILE *get_lock_file_fp(struct lock_file *lk)
* Return the path of the file that is locked by the specified
* lock_file object. The caller must free the memory.
*/
-extern char *get_locked_file_path(struct lock_file *lk);
+char *get_locked_file_path(struct lock_file *lk);
/*
* If the lockfile is still open, close it (and the file pointer if it
@@ -263,8 +287,8 @@ static inline int close_lock_file_gently(struct lock_file *lk)
* nobody else) to inspect the contents you wrote, while still
* holding the lock yourself.
*
- * * `reopen_lock_file()` to reopen the lockfile. Make further updates
- * to the contents.
+ * * `reopen_lock_file()` to reopen the lockfile, truncating the existing
+ * contents. Write out the new contents.
*
* * `commit_lock_file()` to make the final version permanent.
*/
@@ -282,7 +306,7 @@ static inline int reopen_lock_file(struct lock_file *lk)
* call `commit_lock_file()` for a `lock_file` object that is not
* currently locked.
*/
-extern int commit_lock_file(struct lock_file *lk);
+int commit_lock_file(struct lock_file *lk);
/*
* Like `commit_lock_file()`, but rename the lockfile to the provided