mirror of
https://github.com/morgan9e/systemd
synced 2026-04-16 01:16:10 +09:00
Let's not leak details from src/shared and src/libsystemd into src/basic, even though you can't actually do anything useful with just forward declarations from src/shared. The sd-forward.h header is put in src/libsystemd/sd-common as we don't have a directory for shared internal headers for libsystemd yet. Let's also rename forward.h to basic-forward.h to keep things self-explanatory.
49 lines
1.6 KiB
C
49 lines
1.6 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
#pragma once
|
|
|
|
/* Include here so consumers have LOCK_{EX,SH,NB} available. */
|
|
#include <sys/file.h> /* IWYU pragma: export */
|
|
|
|
#include "basic-forward.h"
|
|
|
|
typedef struct LockFile {
|
|
int dir_fd;
|
|
char *path;
|
|
int fd;
|
|
int operation;
|
|
} LockFile;
|
|
|
|
int make_lock_file_at(int dir_fd, const char *p, int operation, LockFile *ret);
|
|
static inline int make_lock_file(const char *p, int operation, LockFile *ret) {
|
|
return make_lock_file_at(AT_FDCWD, p, operation, ret);
|
|
}
|
|
int make_lock_file_for(const char *p, int operation, LockFile *ret);
|
|
void release_lock_file(LockFile *f);
|
|
|
|
#define LOCK_FILE_INIT (LockFile) { .dir_fd = -EBADF, .fd = -EBADF }
|
|
|
|
/* POSIX locks with the same interface as flock(). */
|
|
int posix_lock(int fd, int operation);
|
|
void posix_unlockpp(int **fd);
|
|
|
|
#define CLEANUP_POSIX_UNLOCK(fd) \
|
|
_cleanup_(posix_unlockpp) _unused_ int *CONCATENATE(_cleanup_posix_unlock_, UNIQ) = &(fd)
|
|
|
|
/* Open File Description locks with the same interface as flock(). */
|
|
int unposix_lock(int fd, int operation);
|
|
void unposix_unlockpp(int **fd);
|
|
|
|
#define CLEANUP_UNPOSIX_UNLOCK(fd) \
|
|
_cleanup_(unposix_unlockpp) _unused_ int *CONCATENATE(_cleanup_unposix_unlock_, UNIQ) = &(fd)
|
|
|
|
typedef enum LockType {
|
|
LOCK_NONE, /* Don't lock the file descriptor. Useful if you need to conditionally lock a file. */
|
|
LOCK_BSD,
|
|
LOCK_POSIX,
|
|
LOCK_UNPOSIX,
|
|
} LockType;
|
|
|
|
int lock_generic(int fd, LockType type, int operation);
|
|
|
|
int lock_generic_with_timeout(int fd, LockType type, int operation, usec_t timeout);
|