Fix SAR support for overlay.d

This commit is contained in:
topjohnwu
2020-04-25 23:19:36 -07:00
parent 2aede97754
commit c7ed0ef5eb
6 changed files with 48 additions and 19 deletions

View File

@@ -301,6 +301,21 @@ void full_read(const char *filename, void **buf, size_t *size) {
close(fd);
}
string fd_full_read(int fd) {
string str;
auto len = lseek(fd, 0, SEEK_END);
str.resize(len);
lseek(fd, 0, SEEK_SET);
xxread(fd, str.data(), len);
return str;
}
string full_read(const char *filename) {
int fd = xopen(filename, O_RDONLY | O_CLOEXEC);
run_finally f([=]{ close(fd); });
return fd < 0 ? "" : fd_full_read(fd);
}
void write_zero(int fd, size_t size) {
char buf[4096] = {0};
size_t len;

View File

@@ -58,6 +58,8 @@ void fclone_attr(int src, int dest);
void clone_attr(const char *src, const char *dest);
void fd_full_read(int fd, void **buf, size_t *size);
void full_read(const char *filename, void **buf, size_t *size);
std::string fd_full_read(int fd);
std::string full_read(const char *filename);
void write_zero(int fd, size_t size);
void file_readline(bool trim, const char *file, const std::function<bool(std::string_view)> &fn);
static inline void file_readline(const char *file,

View File

@@ -13,10 +13,13 @@
#include <unistd.h>
#include <syscall.h>
#include <random>
#include <string>
#include <logging.hpp>
#include <utils.hpp>
using namespace std;
int fork_dont_care() {
int pid = xfork();
if (pid) {
@@ -214,3 +217,12 @@ int switch_mnt_ns(int pid) {
close(fd);
return ret;
}
string &replace_all(string &str, string_view from, string_view to) {
size_t pos = 0;
while((pos = str.find(from, pos)) != string::npos) {
str.replace(pos, from.length(), to);
pos += to.length();
}
return str;
}

View File

@@ -106,3 +106,4 @@ void set_nice_name(const char *name);
uint32_t binary_gcd(uint32_t u, uint32_t v);
int switch_mnt_ns(int pid);
int gen_rand_str(char *buf, int len, bool varlen = true);
std::string &replace_all(std::string &str, std::string_view from, std::string_view to);