📄 ldclose.c
字号:
/** ldclose - close current object file.* if current object file is an archive member,* set up for next object file from archive.** #ifdef PORTAR printable ascii headers archive version* #else #ifdef PORT5AR UNIX 5.0 semi-portable archive version* #else pre UNIX 5.0 (old) archive version* #endif*//* static char *sccs_id = "@(#)ldclose.c 1.2 12/8/89 ESI, ATT"; */#include <system.h>#include <stdio.h>#include <string.h>#include "ar.h"#include "filehdr.h"#include "ldfcn.h"#if ANSI int vldldptr(LDFILE *); void freeldptr(LDFILE *); long sgetl(char *);#else int vldldptr(); void freeldptr(); long sgetl();#endif intldclose(ldptr)LDFILE *ldptr;{#ifdef PORTAR struct ar_hdr arhdr; long ar_size; if (vldldptr(ldptr) == FAILURE) return (SUCCESS); if (TYPE(ldptr) == ARTYPE && FSEEK(ldptr, -((long)sizeof(arhdr)), BEGINNING) == OKFSEEK && FREAD((char *)&arhdr, sizeof(arhdr), 1, ldptr) == 1 && !strncmp(arhdr.ar_fmag, ARFMAG, sizeof(arhdr.ar_fmag)) && sscanf(arhdr.ar_size, "%ld", &ar_size) == 1) { /* * Be sure OFFSET is even */ OFFSET(ldptr) += ar_size + sizeof(arhdr) + (ar_size & 01); if (FSEEK(ldptr, 0L, BEGINNING) == OKFSEEK && FREAD((char *)&(HEADER(ldptr)), FILHSZ, 1, ldptr) == 1) { return (FAILURE); } }#else#ifdef PORT5AR struct arf_hdr arhdr; long ar_size, nsyms; if (vldldptr(ldptr) == FAILURE) return (SUCCESS); if (TYPE(ldptr) == ARTYPE && FSEEK(ldptr, -((long)sizeof(arhdr)), BEGINNING) == OKFSEEK && FREAD((char *)&arhdr, sizeof(arhdr), 1, ldptr) == 1) { ar_size = sgetl(arhdr.arf_size); /* * Be sure offset is even */ OFFSET(ldptr) += ar_size + sizeof(arhdr) + (ar_size & 01); if (FSEEK(ldptr, 0L, BEGINNING) == OKFSEEK && FREAD((char *)&(HEADER(ldptr)), FILHSZ, 1, ldptr) == 1) { return (FAILURE); } }#else ARCHDR arhdr; if (vldldptr(ldptr) == FAILURE) return (SUCCESS); if (TYPE(ldptr) == ARTYPE && FSEEK(ldptr, -((long)ARCHSZ), BEGINNING) == OKFSEEK && FREAD((char *)&arhdr, ARCHSZ, 1, ldptr) == 1) { /* * Be sure OFFSET is even */ OFFSET(ldptr) += arhdr.ar_size + ARCHSZ + (arhdr.ar_size & 01); if (FSEEK(ldptr, 0L, BEGINNING) == OKFSEEK && FREAD((char *)&(HEADER(ldptr)), FILHSZ, 1, ldptr) == 1) { return (FAILURE); } }#endif#endif fclose(IOPTR(ldptr)); freeldptr(ldptr); return (SUCCESS);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -