Lines Matching defs:obj

64 static void	free_obj(struct bsdar *bsdar, struct ar_obj *obj);
65 static void insert_obj(struct bsdar *bsdar, struct ar_obj *obj,
119 * Create object from file, return created obj upon success, or NULL
126 struct ar_obj *obj;
134 obj = malloc(sizeof(struct ar_obj));
135 if (obj == NULL)
137 if ((obj->fd = open(name, O_RDONLY, 0)) < 0) {
139 free(obj);
149 if ((obj->name = malloc(_TRUNCATE_LEN + 1)) == NULL)
151 (void)strncpy(obj->name, bname, _TRUNCATE_LEN);
152 obj->name[_TRUNCATE_LEN] = '\0';
154 if ((obj->name = strdup(bname)) == NULL)
158 if (fstat(obj->fd, &sb) < 0) {
159 bsdar_warnc(bsdar, errno, "can't fstat file: %s", obj->name);
163 bsdar_warnc(bsdar, 0, "%s is not an ordinary file", obj->name);
183 obj->uid = 0;
184 obj->gid = 0;
185 obj->mtime = 0;
186 obj->md = S_IFREG | 0644;
188 obj->uid = sb.st_uid;
189 obj->gid = sb.st_gid;
190 obj->mtime = sb.st_mtime;
191 obj->md = sb.st_mode;
193 obj->size = sb.st_size;
194 obj->dev = sb.st_dev;
195 obj->ino = sb.st_ino;
197 if (obj->size == 0) {
198 obj->maddr = NULL;
199 return (obj);
202 if ((obj->maddr = mmap(NULL, obj->size, PROT_READ,
203 MAP_PRIVATE, obj->fd, (off_t)0)) == MAP_FAILED) {
204 bsdar_warnc(bsdar, errno, "can't mmap file: %s", obj->name);
207 if (close(obj->fd) < 0)
209 obj->name);
211 return (obj);
214 if (close(obj->fd) < 0)
216 obj->name);
217 free(obj->name);
218 free(obj);
226 free_obj(struct bsdar *bsdar, struct ar_obj *obj)
228 if (obj->fd == -1)
229 free(obj->maddr);
231 if (obj->maddr != NULL && munmap(obj->maddr, obj->size))
233 "can't munmap file: %s", obj->name);
234 free(obj->name);
235 free(obj);
239 * Insert obj to the tail, or before/after the pos obj.
242 insert_obj(struct bsdar *bsdar, struct ar_obj *obj, struct ar_obj *pos)
244 if (obj == NULL)
245 bsdar_errc(bsdar, EX_SOFTWARE, 0, "try to insert a null obj");
247 if (pos == NULL || obj == pos)
249 * If the object to move happens to be the position obj,
250 * or if there is not a pos obj, move it to tail.
255 TAILQ_INSERT_BEFORE(pos, obj, objs);
259 TAILQ_INSERT_AFTER(&bsdar->v_obj, pos, obj, objs);
264 TAILQ_INSERT_TAIL(&bsdar->v_obj, obj, objs);
279 struct ar_obj *obj;
353 obj = malloc(sizeof(struct ar_obj));
354 if (obj == NULL)
356 obj->maddr = buff;
357 if ((obj->name = strdup(name)) == NULL)
359 obj->size = size;
360 obj->uid = archive_entry_uid(entry);
361 obj->gid = archive_entry_gid(entry);
362 obj->md = archive_entry_mode(entry);
363 obj->mtime = archive_entry_mtime(entry);
364 obj->dev = 0;
365 obj->ino = 0;
368 * Objects from archive have obj->fd set to -1,
371 obj->fd = -1;
372 TAILQ_INSERT_TAIL(&bsdar->v_obj, obj, objs);
384 struct ar_obj *nobj, *obj, *obj_temp, *pos;
458 TAILQ_FOREACH(obj, &bsdar->v_obj, objs) {
459 if (strcmp(obj->name, bsdar->posarg) == 0) {
460 pos = obj;
476 TAILQ_FOREACH_SAFE(obj, &bsdar->v_obj, objs, obj_temp) {
481 if (strncmp(bname, obj->name, _TRUNCATE_LEN))
484 if (strcmp(bname, obj->name) != 0)
493 obj->mtime);
502 TAILQ_REMOVE(&bsdar->v_obj, obj, objs);
504 free_obj(bsdar, obj);
507 insert_obj(bsdar, obj, pos);
548 struct ar_obj *obj, *obj_temp;
550 TAILQ_FOREACH_SAFE(obj, &bsdar->v_obj, objs, obj_temp) {
551 TAILQ_REMOVE(&bsdar->v_obj, obj, objs);
552 free_obj(bsdar, obj);
612 struct ar_obj *obj;
629 TAILQ_FOREACH(obj, &bsdar->v_obj, objs) {
630 if (!(bsdar->options & AR_SS) && obj->maddr != NULL)
631 create_symtab_entry(bsdar, obj->maddr, obj->size);
632 if (strlen(obj->name) > _MAXNAMELEN_SVR4)
633 add_to_ar_str_table(bsdar, obj->name);
634 bsdar->rela_off += _ARHDR_LEN + obj->size + obj->size % 2;
741 TAILQ_FOREACH(obj, &bsdar->v_obj, objs) {
746 archive_entry_copy_pathname(entry, obj->name);
747 archive_entry_set_uid(entry, obj->uid);
748 archive_entry_set_gid(entry, obj->gid);
749 archive_entry_set_mode(entry, obj->md);
750 archive_entry_set_size(entry, obj->size);
751 archive_entry_set_mtime(entry, obj->mtime, 0);
752 archive_entry_set_dev(entry, obj->dev);
753 archive_entry_set_ino(entry, obj->ino);
756 write_data(bsdar, a, obj->maddr, obj->size);