Lines Matching +full:m +full:- +full:mode

1 /*-
2 * Copyright (c) 2006,2008-2011 Joseph Koshy
42 ELFTC_VCSID("$Id: libelf_open.c 3007 2014-03-22 08:10:14Z jkoshy $");
76 assert(bufsz - datasz > 0); in _libelf_read_special_file()
78 if ((readsz = read(fd, t, bufsz - datasz)) <= 0) in _libelf_read_special_file()
127 void *m; in _libelf_open_object() local
128 mode_t mode; in _libelf_open_object() local
140 mode = sb.st_mode; in _libelf_open_object()
146 if (!S_ISREG(mode) && !S_ISCHR(mode) && !S_ISFIFO(mode) && in _libelf_open_object()
147 !S_ISSOCK(mode)) { in _libelf_open_object()
153 * For ELF_C_WRITE mode, allocate and return a descriptor. in _libelf_open_object()
158 e->e_byteorder = LIBELF_PRIVATE(byteorder); in _libelf_open_object()
159 e->e_fd = fd; in _libelf_open_object()
160 e->e_cmd = c; in _libelf_open_object()
161 if (!S_ISREG(mode)) in _libelf_open_object()
162 e->e_flags |= LIBELF_F_SPECIAL_FILE; in _libelf_open_object()
170 * ELF_C_READ and ELF_C_RDWR mode. in _libelf_open_object()
172 m = NULL; in _libelf_open_object()
174 if (S_ISREG(mode)) { in _libelf_open_object()
189 * For objects opened in ELF_C_RDWR mode, when in _libelf_open_object()
194 m = mmap(NULL, fsize, PROT_READ, MAP_PRIVATE, fd, (off_t) 0); in _libelf_open_object()
196 if (m == MAP_FAILED) in _libelf_open_object()
197 m = NULL; in _libelf_open_object()
206 if (m == NULL) { in _libelf_open_object()
207 if ((m = malloc(fsize)) == NULL) { in _libelf_open_object()
212 if (read(fd, m, fsize) != (ssize_t) fsize) { in _libelf_open_object()
214 free(m); in _libelf_open_object()
220 } else if ((m = _libelf_read_special_file(fd, &fsize)) != NULL) in _libelf_open_object()
225 if ((e = _libelf_memory(m, fsize, reporterror)) == NULL) { in _libelf_open_object()
229 free(m); in _libelf_open_object()
232 (void) munmap(m, fsize); in _libelf_open_object()
237 /* ar(1) archives aren't supported in RDWR mode. */ in _libelf_open_object()
238 if (c == ELF_C_RDWR && e->e_kind == ELF_K_AR) { in _libelf_open_object()
244 e->e_flags |= flags; in _libelf_open_object()
245 e->e_fd = fd; in _libelf_open_object()
246 e->e_cmd = c; in _libelf_open_object()