| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /*
- * Copyright (c) 2024 Meta Platforms, Inc. and affiliates.
- * Copyright (c) 2024 David Vernet <dvernet@meta.com>
- */
- #include <errno.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- /* Returns read len on success, or -errno on failure. */
- static ssize_t read_text(const char *path, char *buf, size_t max_len)
- {
- ssize_t len;
- int fd;
- fd = open(path, O_RDONLY);
- if (fd < 0)
- return -errno;
- len = read(fd, buf, max_len - 1);
- if (len >= 0)
- buf[len] = 0;
- close(fd);
- return len < 0 ? -errno : len;
- }
- /* Returns written len on success, or -errno on failure. */
- static ssize_t write_text(const char *path, char *buf, ssize_t len)
- {
- int fd;
- ssize_t written;
- fd = open(path, O_WRONLY | O_APPEND);
- if (fd < 0)
- return -errno;
- written = write(fd, buf, len);
- close(fd);
- return written < 0 ? -errno : written;
- }
- long file_read_long(const char *path)
- {
- char buf[128];
- if (read_text(path, buf, sizeof(buf)) <= 0)
- return -1;
- return atol(buf);
- }
- int file_write_long(const char *path, long val)
- {
- char buf[64];
- int ret;
- ret = sprintf(buf, "%ld", val);
- if (ret < 0)
- return ret;
- if (write_text(path, buf, ret) <= 0)
- return -1;
- return 0;
- }
|