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 --- |