Lines Matching +full:can +full:- +full:fd

4  * SPDX-License-Identifier: BSD-2-Clause
48 int fd; member
51 // All the line_buffer stuff can be replaced by fgetstr()
55 int fd; member
69 lb->pos = lb->eos = lb->buf; // Reset to no data condition in lb_fill()
70 rv = read(lb->fd, lb->buf, sizeof(lb->buf)); in lb_fill()
73 lb->pos = lb->buf; in lb_fill()
74 lb->eos = lb->buf + rv; in lb_fill()
81 close(lb->fd); in lb_fini()
88 lb->fd = open(fn, O_RDONLY); in lb_init()
89 if (lb->fd == -1) in lb_init()
91 lb->pos = lb->eos = lb->buf; in lb_init()
99 // True -> data returned
100 // False -> EOF / ERROR w/o data
104 char *bufeos = buffer + buflen - 1; // point at byte for NUL at eos in lb_1line()
108 if (lb->pos >= lb->eos) { // Refill empty buffer in lb_1line()
116 *walker = *lb->pos++; in lb_1line()
171 return (0); /* PARSE ERROR -- what to do? */ in symbol_addr()
181 * Parse /proc/kcore to find if we can get the data for @len bytes that are
183 * kernel exports for the 'safe' areas to touch. We can read random kernel
184 * varaibles, but we can't read arbitrary addresses since it doesn't export
196 ef.fd = open(KCORE_PATH, O_RDONLY); in read_at_address()
197 if (ef.fd == -1) { in read_at_address()
208 rv = read(ef.fd, ef.buf, sizeof(ef.buf)); in read_at_address()
211 close(ef.fd); in read_at_address()
217 close(ef.fd); in read_at_address()
220 if (hdr->e_ident[EI_CLASS] != ELF_TARG_CLASS || /* Layout ? */ in read_at_address()
221 hdr->e_ident[EI_DATA] != ELF_TARG_DATA || in read_at_address()
222 hdr->e_ident[EI_VERSION] != EV_CURRENT || /* Version ? */ in read_at_address()
223 hdr->e_version != EV_CURRENT || in read_at_address()
224 hdr->e_machine != ELF_TARG_MACH || /* Machine ? */ in read_at_address()
225 hdr->e_type != ET_CORE) { in read_at_address()
227 close(ef.fd); in read_at_address()
231 phdr = (Elf64_Phdr *)(ef.buf + hdr->e_phoff); in read_at_address()
232 for (int i = 0; i < hdr->e_phnum; i++) { in read_at_address()
238 lseek(ef.fd, (off_t)phdr[i].p_offset + addr - phdr[i].p_vaddr, in read_at_address()
240 rv = read(ef.fd, buf, len); in read_at_address()
242 perror("Can't read buffer\n"); in read_at_address()
243 close(ef.fd); in read_at_address()
247 close(ef.fd); in read_at_address()
262 fprintf(stderr, "Can't find symbol %s", sym); in data_from_kernel()
266 fprintf(stderr, "Can't read from kernel"); in data_from_kernel()