summaryrefslogtreecommitdiffstats
path: root/cpukit/httpd/webpage.c
blob: efac13f5082e9b1cf0eb1662dc5115b4c439ade5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * Page.c -- Support for 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 page retrieval handling. It provides support for
 *	reading web pages from file systems and has expansion for ROMed web
 *	pages.
 */

/********************************* Includes ***********************************/

#include	"wsIntrn.h"

/*********************************** Code *************************************/
/*
 *	Open a web page. lpath is the local filename. path is the URL path name.
 */

int websPageOpen(webs_t wp, char_t *lpath, char_t *path, int mode, int perm)
{
	a_assert(websValid(wp));

#if WEBS_PAGE_ROM
	return websRomPageOpen(wp, path, mode, perm);
#else
	return (wp->docfd = gopen(lpath, mode, perm));
#endif /* WEBS_PAGE_ROM */
}

/******************************************************************************/
/*
 *	Close a web page
 */

void websPageClose(webs_t wp)
{
	a_assert(websValid(wp));

#if WEBS_PAGE_ROM
	websRomPageClose(wp->docfd);
#else
	if (wp->docfd >= 0) {
		close(wp->docfd);
		wp->docfd = -1;
	}
#endif
}

/******************************************************************************/
/*
 *	Stat a web page lpath is the local filename. path is the URL path name.
 */

int websPageStat(webs_t wp, char_t *lpath, char_t *path, websStatType* sbuf)
{
#if WEBS_PAGE_ROM
	return websRomPageStat(path, sbuf);
#else
	gstat_t	s;

	if (gstat(lpath, &s) < 0) {
		return -1;
	}
	sbuf->size = s.st_size;
	sbuf->mtime = s.st_mtime;
	sbuf->isDir = s.st_mode & S_IFDIR;
	return 0;
#endif
}

/******************************************************************************/
/*
 *	Is this file a directory?
 */

int websPageIsDirectory(char_t *lpath)
{
#if WEBS_PAGE_ROM
	websStatType	sbuf;

	if (websRomPageStat(lpath, &sbuf) >= 0) {
		return(sbuf.isDir);
	} else {
		return 0;
	}
#else
	gstat_t sbuf;

	if (gstat(lpath, &sbuf) >= 0) {
		return(sbuf.st_mode & S_IFDIR);
	} else {
		return 0;
	}
#endif
}


/******************************************************************************/
/*
 *	Read a web page. Returns the number of _bytes_ read.
 *	len is the size of buf, in bytes.
 */

int websPageReadData(webs_t wp, char *buf, int nBytes)
{

#if WEBS_PAGE_ROM
	a_assert(websValid(wp));
	return websRomPageReadData(wp, buf, nBytes);
#else
	a_assert(websValid(wp));
	return read(wp->docfd, buf, nBytes);
#endif
}

/******************************************************************************/
/*
 *	Move file pointer offset bytes.
 */

void websPageSeek(webs_t wp, long offset)
{
	a_assert(websValid(wp));

#if WEBS_PAGE_ROM
	websRomPageSeek(wp, offset, SEEK_CUR);
#else
	lseek(wp->docfd, offset, SEEK_CUR);
#endif
}

/******************************************************************************/