mirror of
https://github.com/torvalds/linux.git
synced 2024-11-28 23:21:31 +00:00
libbpf: Explicitly call write to append content to file
Write data to fd by calling "vdprintf", in most implementations of the standard library, the data is finally written by the writev syscall. But "uprobe_events/kprobe_events" does not allow segmented writes, so switch the "append_to_file" function to explicit write() call. Signed-off-by: Liu Pan <patteliu@gmail.com> Signed-off-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/bpf/20230320030720.650-1-patteliu@gmail.com
This commit is contained in:
parent
bb4a6a9237
commit
01dc26c980
@ -9918,16 +9918,20 @@ static int append_to_file(const char *file, const char *fmt, ...)
|
||||
{
|
||||
int fd, n, err = 0;
|
||||
va_list ap;
|
||||
char buf[1024];
|
||||
|
||||
va_start(ap, fmt);
|
||||
n = vsnprintf(buf, sizeof(buf), fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (n < 0 || n >= sizeof(buf))
|
||||
return -EINVAL;
|
||||
|
||||
fd = open(file, O_WRONLY | O_APPEND | O_CLOEXEC, 0);
|
||||
if (fd < 0)
|
||||
return -errno;
|
||||
|
||||
va_start(ap, fmt);
|
||||
n = vdprintf(fd, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
if (n < 0)
|
||||
if (write(fd, buf, n) < 0)
|
||||
err = -errno;
|
||||
|
||||
close(fd);
|
||||
|
Loading…
Reference in New Issue
Block a user