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

📄 rom.c

📁 RTEMS (Real-Time Executive for Multiprocessor Systems) is a free open source real-time operating sys
💻 C
字号:
/* * rom.c -- Support for ROMed page retrieval. * * Copyright (c) GoAhead Software Inc., 1995-2000. All Rights Reserved. * * See the file "license.txt" for usage and redistribution license requirements *//******************************** Description *********************************//* *	This module provides web page retrieval from compiled web pages. Use the *	webcomp program to compile web pages and link into the GoAhead WebServer. *	This module uses a hashed symbol table for fast page lookup. * *	Usage: webcomp -f webPageFileList -p Prefix >webrom.c *//********************************* Includes ***********************************/#include	<stdlib.h>#include	"wsIntrn.h"/******************************** Local Data **********************************/#if WEBS_PAGE_ROMsym_fd_t	romTab;						/* Symbol table for web pages *//*********************************** Code *************************************//* *	Open the ROM module */int websRomOpen(){	websRomPageIndexType	*wip;	int						nchars;	char_t					name[SYM_MAX];	romTab = symOpen(WEBS_SYM_INIT);	for (wip = websRomPageIndex; wip->path; wip++) {		gstrncpy(name, wip->path, SYM_MAX);		nchars = gstrlen(name) - 1;		if (nchars > 0 &&			(name[nchars] == '/' || name[nchars] == '\\')) {			name[nchars] = '\0';		}		symEnter(romTab, name, valueInteger((int) wip), 0);	}	return 0;}/******************************************************************************//* *	Close the ROM module */void websRomClose(){	symClose(romTab);}/******************************************************************************//* *	Open a web page */int websRomPageOpen(webs_t wp, char_t *path, int mode, int perm){	websRomPageIndexType	*wip;	sym_t					*sp;	a_assert(websValid(wp));	a_assert(path && *path);	if ((sp = symLookup(romTab, path)) == NULL) {		return -1;	}	wip = (websRomPageIndexType*) sp->content.value.integer;	wip->pos = 0;	return (wp->docfd = wip - websRomPageIndex);}/******************************************************************************//* *	Close a web page */void websRomPageClose(int fd){}/******************************************************************************//* *	Stat a web page */int websRomPageStat(char_t *path, websStatType *sbuf){	websRomPageIndexType	*wip;	sym_t					*sp;	a_assert(path && *path);	if ((sp = symLookup(romTab, path)) == NULL) {		return -1;	}	wip = (websRomPageIndexType*) sp->content.value.integer;	memset(sbuf, 0, sizeof(websStatType));	sbuf->size = wip->size;	if (wip->page == NULL) {		sbuf->isDir = 1;	}	return 0;}/******************************************************************************//* *	Read a web page */int websRomPageReadData(webs_t wp, char *buf, int nBytes){	websRomPageIndexType	*wip;	int						len;	a_assert(websValid(wp));	a_assert(buf);	a_assert(wp->docfd >= 0);	wip = &websRomPageIndex[wp->docfd];	len = min(wip->size - wip->pos, nBytes);	memcpy(buf, &wip->page[wip->pos], len);	wip->pos += len;	return len;}/******************************************************************************//* *	Position a web page */long websRomPageSeek(webs_t wp, long offset, int origin){	websRomPageIndexType	*wip;	long pos;	a_assert(websValid(wp));	a_assert(origin == SEEK_SET || origin == SEEK_CUR || origin == SEEK_END);	a_assert(wp->docfd >= 0);	wip = &websRomPageIndex[wp->docfd];	if (origin != SEEK_SET && origin != SEEK_CUR && origin != SEEK_END) {		errno = EINVAL;		return -1;	}	if (wp->docfd < 0) {		errno = EBADF;		return -1;	}	pos = offset;	switch (origin) {	case SEEK_CUR:		pos = wip->pos + offset;		break;	case SEEK_END:		pos = wip->size + offset;		break;	default:		break;	}	if (pos < 0) {		errno = EBADF;		return -1;	}	return (wip->pos = pos);}#endif /* WEBS_PAGE_ROM *//******************************************************************************/

⌨️ 快捷键说明

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