static bfd_boolean close_one (void) { register bfd *kill; if (bfd_last_cache == NULL) kill = NULL; else { for (kill = bfd_last_cache->lru_prev; ! kill->cacheable; kill = kill->lru_prev) { if (kill == bfd_last_cache) { kill = NULL; break; } } } if (kill == NULL) { /* There are no open cacheable BFD's. */ return TRUE; } kill->where = real_ftell ((FILE *) kill->iostream); return bfd_cache_delete (kill); }
vfspos VFSFileReal::getpos(void) const { VFS_GUARD_OPT(this); if(!_fh) return npos; return real_ftell((FILE*)_fh); }
static file_ptr cache_btell (struct bfd *abfd) { FILE *f = bfd_cache_lookup (abfd, CACHE_NO_OPEN); if (f == NULL) return abfd->where; return real_ftell (f); }
static bfd_boolean close_one (void) { register bfd *kill; if (bfd_last_cache == NULL) kill = NULL; else { for (kill = bfd_last_cache->lru_prev; ! kill->cacheable; kill = kill->lru_prev) { if (kill == bfd_last_cache) { kill = NULL; break; } } } if (kill == NULL) { /* There are no open cacheable BFD's. */ return TRUE; } kill->where = real_ftell ((FILE *) kill->iostream); /* Save the file st_mtime. This is a hack so that gdb can detect when an executable has been deleted and recreated. The only thing that makes this reasonable is that st_mtime doesn't change when a file is unlinked, so saving st_mtime makes BFD's file cache operation a little more transparent for this particular usage pattern. If we hadn't closed the file then we would not have lost the original contents, st_mtime etc. Of course, if something is writing to an existing file, then this is the wrong thing to do. FIXME: gdb should save these times itself on first opening a file, and this hack be removed. */ if (kill->direction == no_direction || kill->direction == read_direction) { bfd_get_mtime (kill); kill->mtime_set = TRUE; } return bfd_cache_delete (kill); }
vfspos DiskFile::getpos() const { return _fh ? real_ftell((FILE*)_fh) : npos; }