亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? archive.c

?? 早期freebsd實現
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* BFD back-end for archive files (libraries).   Copyright 1990, 1991, 1992 Free Software Foundation, Inc.   Written by Cygnus Support.  Mostly Gumby Henkel-Wallace's fault.This file is part of BFD, the Binary File Descriptor library.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  *//*@setfilename archive-infoSECTION	ArchivesDESCRIPTION	Archives are supported in BFD in <<archive.c>>.	An archive (or library) is just another BFD.  It has a symbol	table, although there's not much a user program will do with it.	The big difference between an archive BFD and an ordinary BFD	is that the archive doesn't have sections.  Instead it has a	chain of BFDs considered its contents.  These BFDs can be	manipulated just like any other.  The BFDs contained in an	archive opened for reading will all be opened for reading; you	may put either input or output BFDs into an archive opened for	output; it will be handled correctly when the archive is closed.	Use <<bfd_openr_next_archived_file>> to step through all	the contents of an archive opened for input.  It's not	required that you read the entire archive if you don't want	to!  Read it until you find what you want.	Archive contents of output BFDs are chained through the	<<next>> pointer in a BFD.  The first one is findable through	the <<archive_head>> slot of the archive.  Set it with	<<set_archive_head>> (q.v.).  A given BFD may be in only one	open output archive at a time.	As expected, the BFD archive code is more general than the	archive code of any given environment.  BFD archives may	contain files of different formats (eg a.out and coff) and	even different architectures.  You may even place archives	recursively into archives!	This can cause unexpected confusion, since some archive	formats are more expressive than others.  For instance intel	COFF archives can preserve long filenames; Sun a.out archives	cannot.  If you move a file from the first to the second	format and back again, the filename may be truncated.	Likewise, different a.out environments have different	conventions as to how they truncate filenames, whether they	preserve directory names in filenames, etc.  When	interoperating with native tools, be sure your files are	homogeneous.	Beware: most of these formats do not react well to the	presence of spaces in filenames.  We do the best we can, but	can't always handle this due to restrctions in the format of	archives.  Many unix utilities are braindead in regards to	spaces and such in filenames anyway, so this shouldn't be much	of a restriction.*//* Assumes:   o - all archive elements start on an even boundary, newline padded;   o - all arch headers are char *;   o - all arch headers are the same size (across architectures).*//* Some formats provide a way to cram a long filename into the short   (16 chars) space provided by a bsd archive.  The trick is: make a   special "file" in the front of the archive, sort of like the SYMDEF   entry.  If the filename is too long to fit, put it in the extended   name table, and use its index as the filename.  To prevent   confusion prepend the index with a space.  This means you can't   have filenames that start with a space, but then again, many unix   utilities can't handle that anyway.   This scheme unfortunately requires that you stand on your head in   order to write an archive since you need to put a magic file at the   front, and need to touch every entry to do so.  C'est la vie.*/#include "bfd.h"#include "sysdep.h"#include "libbfd.h"#include "aout/ar.h"#include "aout/ranlib.h"#include <errno.h>#ifndef errnoextern int errno;#endif#ifdef GNU960#define BFD_GNU960_ARMAG(abfd)	(BFD_COFF_FILE_P((abfd)) ? ARMAG : ARMAGB)#endif/* We keep a cache of archive filepointers to archive elements to   speed up searching the archive by filepos.  We only add an entry to   the cache when we actually read one.  We also don't sort the cache;   it's generally short enough to search linearly.   Note that the pointers here point to the front of the ar_hdr, not   to the front of the contents!*/struct ar_cache {  file_ptr ptr;  bfd* arelt;  struct ar_cache *next;};#define ar_padchar(abfd) ((abfd)->xvec->ar_pad_char)#define ar_maxnamelen(abfd) ((abfd)->xvec->ar_max_namelen)#define arch_hdr(bfd) ((struct ar_hdr *)   \		       (((struct areltdata *)((bfd)->arelt_data))->arch_header))boolean_bfd_generic_mkarchive (abfd)     bfd *abfd;{  abfd->tdata.aout_ar_data = (struct artdata *)bfd_zalloc(abfd, sizeof (struct artdata));  if (bfd_ardata (abfd) == NULL) {      bfd_error = no_memory;      return false;    }  bfd_ardata(abfd)->cache = 0;  return true;}/*FUNCTION	bfd_get_next_mapentSYNOPSIS	symindex bfd_get_next_mapent(bfd *, symindex previous, carsym ** sym);DESCRIPTION	This function steps through an archive's symbol table (if it	has one).  Successively updates <<sym>> with the next symbol's	information, returning that symbol's (internal) index into the	symbol table.	Supply BFD_NO_MORE_SYMBOLS as the <<previous>> entry to get	the first one; returns BFD_NO_MORE_SYMBOLS when you're already	got the last one.	A <<carsym>> is a canonical archive symbol.  The only	user-visible element is its name, a null-terminated string.*/symindexDEFUN(bfd_get_next_mapent,(abfd, prev, entry),     bfd *abfd AND     symindex prev AND     carsym **entry){  if (!bfd_has_map (abfd)) {    bfd_error = invalid_operation;    return BFD_NO_MORE_SYMBOLS;  }    if (prev == BFD_NO_MORE_SYMBOLS) prev = 0;  else if (++prev >= bfd_ardata (abfd)->symdef_count)    return BFD_NO_MORE_SYMBOLS;  *entry = (bfd_ardata (abfd)->symdefs + prev);  return prev;}/* To be called by backends only */bfd *_bfd_create_empty_archive_element_shell (obfd)     bfd *obfd;{  bfd *nbfd;  nbfd = new_bfd_contained_in(obfd);  if (nbfd == NULL) {    bfd_error = no_memory;    return NULL;  }  return nbfd;}/*FUNCTION	bfd_set_archive_headSYNOPSIS	boolean bfd_set_archive_head(bfd *output, bfd *new_head);DESCRIPTION	Used whilst processing archives. Sets the head of the chain of	BFDs contained in an archive to @var{new_head}. */booleanDEFUN(bfd_set_archive_head,(output_archive, new_head),     bfd *output_archive AND      bfd *new_head){  output_archive->archive_head = new_head;  return true;}bfd *look_for_bfd_in_cache (arch_bfd, filepos)     bfd *arch_bfd;     file_ptr filepos;{  struct ar_cache *current;  for (current = bfd_ardata (arch_bfd)->cache; current != NULL;       current = current->next)    if (current->ptr == filepos) return current->arelt;  return NULL;}/* Kind of stupid to call cons for each one, but we don't do too many */booleanadd_bfd_to_cache (arch_bfd, filepos, new_elt)     bfd *arch_bfd, *new_elt;     file_ptr filepos;{  struct ar_cache *new_cache = (struct ar_cache *)				bfd_zalloc(arch_bfd, sizeof (struct ar_cache));  if (new_cache == NULL) {    bfd_error = no_memory;    return false;  }  new_cache->ptr = filepos;  new_cache->arelt = new_elt;  new_cache->next = (struct ar_cache *)NULL;  if (bfd_ardata (arch_bfd)->cache == NULL)    bfd_ardata (arch_bfd)->cache = new_cache;  else {    struct ar_cache *current = bfd_ardata (arch_bfd)->cache;    for (; current->next != NULL; current = current->next);    current->next = new_cache;  }      return true;}/* The name begins with space.  Hence the rest of the name is an index into   the string table. */char *get_extended_arelt_filename (arch, name)     bfd *arch;     char *name;{  unsigned long index = 0;  /* Should extract string so that I can guarantee not to overflow into     the next region, but I"m too lazy. */  errno = 0;  index = strtol (name, NULL, 10);  if (errno != 0) {      bfd_error = malformed_archive;      return NULL;    }  return bfd_ardata (arch)->extended_names + index;}  /* This functions reads an arch header and returns an areltdata pointer, or   NULL on error.   Presumes the file pointer is already in the right place (ie pointing   to the ar_hdr in the file).   Moves the file pointer; on success it   should be pointing to the front of the file contents; on failure it   could have been moved arbitrarily.*/struct areltdata *snarf_ar_hdr (abfd)     bfd *abfd;{#ifndef errno  extern int errno;#endif    struct ar_hdr hdr;    char *hdrp = (char *) &hdr;    unsigned int parsed_size;    struct areltdata *ared;    char *filename = NULL;    unsigned int namelen = 0;    unsigned int allocsize = sizeof (struct areltdata) + sizeof (struct ar_hdr);    char *allocptr;    if (bfd_read ((PTR)hdrp, 1, sizeof (struct ar_hdr), abfd)	!= sizeof (struct ar_hdr)) {	bfd_error = no_more_archived_files;	return NULL;    }    if (strncmp ((hdr.ar_fmag), ARFMAG, 2)) {	bfd_error = malformed_archive;	return NULL;    }    errno = 0;    parsed_size = strtol (hdr.ar_size, NULL, 10);    if (errno != 0) {	bfd_error = malformed_archive;	return NULL;    }    /* extract the filename from the archive - there are two ways to       specify an extendend name table, either the first char of the       name is a space, or it's a slash  */    if ((hdr.ar_name[0] == '/' || hdr.ar_name[0] == ' ') 	&& bfd_ardata (abfd)->extended_names != NULL) {	filename = get_extended_arelt_filename (abfd, hdr.ar_name);	if (filename == NULL) {	    bfd_error = malformed_archive;	    return NULL;	}    }     else 	{	    /* We judge the end of the name by looking for a space or a	       padchar */	    namelen = 0;	    while (namelen < (unsigned)ar_maxnamelen(abfd) &&		   ( hdr.ar_name[namelen] != 0 &&		    hdr.ar_name[namelen] != ' ' &&		    hdr.ar_name[namelen] != ar_padchar(abfd))) {		namelen++;	    }	    allocsize += namelen + 1;	}    allocptr = bfd_zalloc(abfd, allocsize);    if (allocptr == NULL) {	bfd_error = no_memory;	return NULL;    }    ared = (struct areltdata *) allocptr;    ared->arch_header = allocptr + sizeof (struct areltdata);    memcpy ((char *) ared->arch_header, (char *) &hdr, sizeof (struct ar_hdr));    ared->parsed_size = parsed_size;    if (filename != NULL) ared->filename = filename;    else {	ared->filename = allocptr + (sizeof (struct areltdata) +				     sizeof (struct ar_hdr));	if (namelen)	    memcpy (ared->filename, hdr.ar_name, namelen);	ared->filename[namelen] = '\0';    }      return ared;}/* This is an internal function; it's mainly used when indexing   through the archive symbol table, but also used to get the next   element, since it handles the bookkeeping so nicely for us.*/bfd *get_elt_at_filepos (archive, filepos)     bfd *archive;     file_ptr filepos;{  struct areltdata *new_areldata;  bfd *n_nfd;  n_nfd = look_for_bfd_in_cache (archive, filepos);  if (n_nfd) return n_nfd;  if (0 > bfd_seek (archive, filepos, SEEK_SET)) {    bfd_error = system_call_error;    return NULL;  }  if ((new_areldata = snarf_ar_hdr (archive)) == NULL) return NULL;    n_nfd = _bfd_create_empty_archive_element_shell (archive);  if (n_nfd == NULL) {    bfd_release (archive, (PTR)new_areldata);    return NULL;  }  n_nfd->origin = bfd_tell (archive);  n_nfd->arelt_data = (PTR) new_areldata;  n_nfd->filename = new_areldata->filename;  if (add_bfd_to_cache (archive, filepos, n_nfd))    return n_nfd;  /* huh? */  bfd_release (archive, (PTR)n_nfd);  bfd_release (archive, (PTR)new_areldata);  return NULL;}/*FUNCTION	bfd_get_elt_at_indexSYNOPSIS	bfd *bfd_get_elt_at_index(bfd * archive, int index);DESCRIPTION	Return the bfd which is referenced by the symbol indexed by <<index>>.	<<index>> should have been returned by <<bfd_get_next_mapent>> (q.v.).*/bfd *DEFUN(bfd_get_elt_at_index,(abfd, index),     bfd *abfd AND     int index){  bfd *result =    get_elt_at_filepos      (abfd, (bfd_ardata (abfd)->symdefs + index)->file_offset);  return result;}/*FUNCTION	bfd_openr_next_archived_fileSYNOPSIS	bfd* bfd_openr_next_archived_file(bfd *archive, bfd *previous);DESCRIPTION	Initially provided a BFD containing an archive and NULL, opens	an inpout BFD on the first contained element and returns that.	Subsequent calls to bfd_openr_next_archived_file should pass	the archive and the previous return value to return a created	BFD to the next contained element. NULL is returned when there	are no more.*/bfd *DEFUN(bfd_openr_next_archived_file,(archive, last_file),     bfd *archive AND        bfd*last_file){    if ((bfd_get_format (archive) != bfd_archive) ||	(archive->direction == write_direction)) {	    bfd_error = invalid_operation;	    return NULL;	}    return BFD_SEND (archive,		     openr_next_archived_file,		     (archive,		      last_file));}bfd *bfd_generic_openr_next_archived_file(archive, last_file)     bfd *archive;     bfd *last_file;{  file_ptr filestart;  if (!last_file)    filestart = bfd_ardata (archive)->first_file_filepos;  else {    unsigned int size = arelt_size(last_file);    /* Pad to an even boundary... */    filestart = last_file->origin + size + size%2;  }  return get_elt_at_filepos (archive, filestart);}bfd_target *bfd_generic_archive_p (abfd)     bfd *abfd;{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美电影一区二区三区| 99精品偷自拍| 欧美草草影院在线视频| 奇米四色…亚洲| 精品国产三级a在线观看| 国产麻豆成人精品| 国产精品久久久久影视| 成人av电影在线观看| 亚洲精品国产品国语在线app| 在线视频观看一区| 美国毛片一区二区| 日本一区二区成人在线| 色8久久精品久久久久久蜜| 亚洲五码中文字幕| 欧美精品一区二区在线观看| 成人国产亚洲欧美成人综合网| 日韩毛片一二三区| 制服丝袜亚洲网站| 国产成人精品一区二区三区四区 | 一区二区三区国产精华| 欧美美女一区二区| 国产**成人网毛片九色 | 成人av小说网| 婷婷久久综合九色综合绿巨人| 精品日韩欧美在线| 99久久国产综合精品色伊| 视频一区中文字幕国产| 国产精品日日摸夜夜摸av| 色猫猫国产区一区二在线视频| 三级欧美韩日大片在线看| 国产欧美一区二区三区网站| 欧美色偷偷大香| 国产精品一二三区在线| 亚洲成人av电影| 国产精品色哟哟| 欧美一区日本一区韩国一区| av不卡在线观看| 国产自产高清不卡| 亚洲18女电影在线观看| 中文字幕永久在线不卡| 久久综合网色—综合色88| 91福利精品视频| 高清不卡在线观看av| 久久99热狠狠色一区二区| 亚洲综合网站在线观看| 国产精品私人影院| 精品日韩一区二区三区| 777午夜精品免费视频| eeuss影院一区二区三区| 久久精品免费观看| 日韩电影一二三区| 一区二区理论电影在线观看| 中日韩免费视频中文字幕| 精品国产91乱码一区二区三区 | 国产精品国产自产拍在线| 67194成人在线观看| 91啦中文在线观看| 成人国产一区二区三区精品| 国产精品一二二区| 久久国产精品色| 久久国产乱子精品免费女| 日韩精品视频网| 日韩精品亚洲一区二区三区免费| 一区二区日韩av| 亚洲自拍与偷拍| 亚洲一区二区综合| 亚洲欧美偷拍另类a∨色屁股| 欧美国产欧美亚州国产日韩mv天天看完整| 欧美私人免费视频| 欧美在线色视频| 欧美日韩综合在线免费观看| 日本国产一区二区| 色网站国产精品| 91国偷自产一区二区开放时间 | 国产麻豆午夜三级精品| 韩国毛片一区二区三区| 蜜臀av亚洲一区中文字幕| 日韩中文字幕亚洲一区二区va在线| 亚洲精品五月天| 一区二区三区视频在线看| 亚洲国产精品尤物yw在线观看| 亚洲欧美二区三区| 亚洲综合色成人| 亚洲成av人片在线观看无码| 亚洲福利一二三区| 日韩精品亚洲一区二区三区免费| 美女视频一区在线观看| 国产一区二区0| 国产91丝袜在线播放| av影院午夜一区| 欧美亚洲综合色| 91精品国产麻豆| 国产亚洲欧美日韩俺去了| 337p日本欧洲亚洲大胆色噜噜| 久久精品男人的天堂| 中文字幕五月欧美| 一区二区三区产品免费精品久久75| 亚洲超碰97人人做人人爱| 美脚の诱脚舐め脚责91| 国产精品一级在线| 日本高清视频一区二区| 337p亚洲精品色噜噜| 久久久久久久免费视频了| 亚洲色图一区二区| 日韩av电影天堂| 成人精品一区二区三区四区| 日本丶国产丶欧美色综合| 日韩丝袜情趣美女图片| 国产精品少妇自拍| 亚洲成人7777| 成人精品gif动图一区| 欧美三区免费完整视频在线观看| 精品少妇一区二区三区在线播放| 中文字幕免费不卡| 三级精品在线观看| av激情综合网| 日韩一区二区三区免费看 | 天堂va蜜桃一区二区三区漫画版| 秋霞电影网一区二区| 不卡视频一二三四| 91精品国产色综合久久久蜜香臀| 久久久99久久| 日韩影视精彩在线| 91丨porny丨最新| 久久久久青草大香线综合精品| 亚洲免费资源在线播放| 国产精品羞羞答答xxdd| 欧美日韩久久久一区| 中文字幕av资源一区| 日韩电影免费在线观看网站| aa级大片欧美| 久久日韩粉嫩一区二区三区| 亚洲国产成人porn| 成人激情校园春色| 欧美成人在线直播| 日韩精品五月天| 欧美性色欧美a在线播放| 日本一区二区三区dvd视频在线| 日韩精品福利网| 欧美性一区二区| 伊人婷婷欧美激情| 成人免费观看av| 久久女同互慰一区二区三区| 丝袜美腿成人在线| 欧美日韩视频一区二区| 亚洲乱码国产乱码精品精可以看| 国产精品亚洲а∨天堂免在线| 日韩三级在线观看| 亚洲在线视频免费观看| 99精品视频在线免费观看| 久久综合色播五月| 久久成人精品无人区| 8x福利精品第一导航| 亚洲r级在线视频| 欧美性受xxxx黑人xyx| 一区二区三区四区五区视频在线观看 | 久久久亚洲精品一区二区三区| 日韩中文欧美在线| 欧美三级视频在线观看| 夜夜夜精品看看| 色综合久久天天| 自拍偷自拍亚洲精品播放| 成人精品国产免费网站| 国产精品久久99| 色天使色偷偷av一区二区| 亚洲色图在线看| 欧美性猛片xxxx免费看久爱| 亚洲愉拍自拍另类高清精品| 色成人在线视频| 亚洲一二三四区| 欧美亚洲国产一卡| 日日夜夜精品视频免费| 在线不卡一区二区| 另类小说图片综合网| 日韩亚洲欧美中文三级| 蜜桃91丨九色丨蝌蚪91桃色| 日韩欧美亚洲国产另类| 韩国在线一区二区| 国产精品天干天干在观线| 色悠久久久久综合欧美99| 亚洲gay无套男同| 久久色中文字幕| 国产精品一级片| 亚洲男人天堂一区| 欧美日韩国产美女| 麻豆91精品视频| 国产精品私人自拍| 欧美亚洲综合久久| 久久爱www久久做| 国产精品视频免费| 欧美视频在线一区| 日韩电影在线一区二区三区| 久久综合九色欧美综合狠狠 | 久久久三级国产网站| 色综合久久综合网97色综合| 日韩精品免费视频人成| 欧美videofree性高清杂交| 成人精品亚洲人成在线| 亚洲一区在线观看免费观看电影高清| 91精品国产一区二区三区|