⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ldopen.c

📁 speech signal process tools
💻 C
字号:
/** ldopen - get LDFILE, header info for object file.*		if it is an archive, get the first file from the archive.*		if it is an already opened archive, assume ldclose() set*		up everything already.** #ifdef PORTAR		printable ascii header 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 = "@(#)ldopen.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 *);	LDFILE *allocldptr();	int freeldptr(LDFILE *);	long sgetl(char *);#else 	int vldldptr();	LDFILE *allocldptr();	int freeldptr();	long sgetl();#endif LDFILE *ldopen(filename, ldptr)char *filename;LDFILE *ldptr; {	FILE *ioptr;	unsigned short type;#ifdef PORTAR	struct ar_hdr arbuf;	char buf[SARMAG];#else#ifdef PORT5AR	struct ar_hdr arbuf;	long nsyms;#else	unsigned short atype = 0;#endif#endif	if (vldldptr(ldptr) == FAILURE)	{#if MSDOS		if ((ioptr = fopen(filename, "rb")) == NULL)#else		if ((ioptr = fopen(filename, "r")) == NULL)#endif			return (NULL);#ifdef PORTAR		if (fread(buf, sizeof(char) * SARMAG, 1, ioptr) != 1)			buf[0] = '\0';		fseek(ioptr, 0L, 0);#else#ifdef PORT5AR		if (fread((char *)&arbuf, sizeof(arbuf), 1, ioptr) != 1)			arbuf.ar_magic[0] = '\0';		fseek(ioptr, 0L, 0);#endif#endif		if (fread((char *)&type, sizeof(type), 1, ioptr) != 1 ||			(ldptr = allocldptr()) == NULL)		{			fclose(ioptr);			return (NULL);		}#ifdef PORTAR		if (strncmp(buf, ARMAG, SARMAG) == 0)		{			long ar_size;			TYPE(ldptr) = USH_ARTYPE;			if (fseek(ioptr, (long)(sizeof(char) * SARMAG), 0) ==				OKFSEEK &&				fread((char *)&arbuf, sizeof(arbuf), 1, ioptr)				== 1 &&				!strncmp(arbuf.ar_fmag, ARFMAG,				sizeof(arbuf.ar_fmag)) &&				arbuf.ar_name[0] == '/' &&				sscanf(arbuf.ar_size, "%ld", &ar_size) == 1)			{				OFFSET(ldptr) = sizeof(char) * SARMAG +					2 * sizeof(struct ar_hdr) +					((ar_size + 01) & ~01);			}			else				OFFSET(ldptr) = sizeof(char) * SARMAG +					sizeof(struct ar_hdr);		}		else		{			TYPE(ldptr) = type;			OFFSET(ldptr) = 0L;		}#else#ifdef PORT5AR		if (strncmp(arbuf.ar_magic, ARMAG, SARMAG) == 0)		{			TYPE(ldptr) = USH_ARTYPE;			nsyms = sgetl(arbuf.ar_syms);			OFFSET(ldptr) = (nsyms * sizeof(struct ar_sym)) +				sizeof(struct arf_hdr) + sizeof(arbuf);		}		else		{			TYPE(ldptr) = type;			OFFSET(ldptr) = 0L;		}#else		if (sizeof(ARTYPE) == sizeof(type) ||			fread((char *)&atype, sizeof(atype), 1, ioptr) != 1)		{			atype = type;		}		if (atype == USH_ARTYPE ||			type == USH_ARTYPE)		{			TYPE(ldptr) = USH_ARTYPE;			OFFSET(ldptr) = ARCHSZ + sizeof(ARMAG);		}		else		{			TYPE(ldptr) = type;			OFFSET(ldptr) = 0L;		}#endif#endif		IOPTR(ldptr) = ioptr;		if (FSEEK(ldptr, 0L, BEGINNING) == OKFSEEK &&			FREAD((char *)&(HEADER(ldptr)), FILHSZ, 1, ldptr) == 1)		{			return (ldptr);		}	}	else if (FSEEK(ldptr, 0L, BEGINNING) == OKFSEEK)		return (ldptr);	fclose(IOPTR(ldptr));	freeldptr(ldptr);	return (NULL);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -