utils.c (5c20de57888f0962e25a0eeec1a59c98056fc42e) utils.c (8d7253dc447473dfcf3f09fb0fa2bd6f7d05b43b)
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright 2013-2015, Michael Ellerman, IBM Corp.
4 */
5
6#define _GNU_SOURCE /* For CPU_ZERO etc. */
7
8#include <elf.h>

--- 51 unchanged lines hidden (view full) ---

60 err = 0;
61
62out:
63 close(fd);
64 errno = -err;
65 return err;
66}
67
1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright 2013-2015, Michael Ellerman, IBM Corp.
4 */
5
6#define _GNU_SOURCE /* For CPU_ZERO etc. */
7
8#include <elf.h>

--- 51 unchanged lines hidden (view full) ---

60 err = 0;
61
62out:
63 close(fd);
64 errno = -err;
65 return err;
66}
67
68int read_file_alloc(const char *path, char **buf, size_t *len)
69{
70 size_t read_offset = 0;
71 size_t buffer_len = 0;
72 char *buffer = NULL;
73 int err;
74 int fd;
75
76 fd = open(path, O_RDONLY);
77 if (fd < 0)
78 return -errno;
79
80 /*
81 * We don't use stat & preallocate st_size because some non-files
82 * report 0 file size. Instead just dynamically grow the buffer
83 * as needed.
84 */
85 while (1) {
86 ssize_t rc;
87
88 if (read_offset >= buffer_len / 2) {
89 char *next_buffer;
90
91 buffer_len = buffer_len ? buffer_len * 2 : 4096;
92 next_buffer = realloc(buffer, buffer_len);
93 if (!next_buffer) {
94 err = -errno;
95 goto out;
96 }
97 buffer = next_buffer;
98 }
99
100 rc = read(fd, buffer + read_offset, buffer_len - read_offset);
101 if (rc < 0) {
102 err = -errno;
103 goto out;
104 }
105
106 if (rc == 0)
107 break;
108
109 read_offset += rc;
110 }
111
112 *buf = buffer;
113 if (len)
114 *len = read_offset;
115
116 err = 0;
117
118out:
119 close(fd);
120 if (err)
121 free(buffer);
122 errno = -err;
123 return err;
124}
125
68int write_file(const char *path, const char *buf, size_t count)
69{
70 int fd;
71 int err;
72 ssize_t rc;
73
74 fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
75 if (fd < 0)

--- 464 unchanged lines hidden ---
126int write_file(const char *path, const char *buf, size_t count)
127{
128 int fd;
129 int err;
130 ssize_t rc;
131
132 fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
133 if (fd < 0)

--- 464 unchanged lines hidden ---