// SPDX-License-Identifier: MIT or LGPL-2.1-only #include #include #include #include #include #include #include "ublksrv_priv.h" /* * We don't need to lock file since the device id is unique */ int create_pid_file(const char *pid_file, int *pid_fd) { #define PID_PATH_LEN 256 char buf[PID_PATH_LEN]; int fd, ret; fd = open(pid_file, O_RDWR | O_CREAT | O_CLOEXEC, S_IRUSR | S_IWUSR); if (fd < 0) { ublk_err( "Fail to open file %s", pid_file); return fd; } ret = ftruncate(fd, 0); if (ret == -1) { ublk_err( "Could not truncate pid file %s, err %s", pid_file, strerror(errno)); goto fail; } snprintf(buf, PID_PATH_LEN, "%ld\n", (long) getpid()); if (write(fd, buf, strlen(buf)) != strlen(buf)) { ublk_err( "Fail to write %s to file %s", buf, pid_file); ret = -1; } else { *pid_fd = fd; } fail: if (ret) { close(fd); unlink(pid_file); } return ret; } void ublk_err(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vsyslog(LOG_ERR, fmt, ap); } void ublk_log(const char *fmt, ...) { va_list ap; va_start(ap, fmt); vsyslog(LOG_INFO, fmt, ap); } #ifdef DEBUG static unsigned int ublk_debug_mask; void ublk_dbg(int level, const char *fmt, ...) { if (level & ublk_debug_mask) { va_list ap; va_start(ap, fmt); vsyslog(LOG_ERR, fmt, ap); } } void ublk_ctrl_dbg(int level, const char *fmt, ...) { if (level & ublk_debug_mask) { va_list ap; va_start(ap, fmt); vfprintf(stdout, fmt, ap); } } void ublk_set_debug_mask(unsigned mask) { ublk_debug_mask = mask; } unsigned ublk_get_debug_mask(unsigned mask) { return ublk_debug_mask; } #endif