OpenMAXBellagio
0.9.3
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
content_pipe_file.c
Go to the documentation of this file.
1
26
#include "
content_pipe_file.h
"
27
29
static
CPresult
Create(
CPhandle
*hContent,
CPstring
szURI )
30
{
31
file_ContentPipe
* pFilePipe = (
file_ContentPipe
*) hContent;
32
char
* pathname = szURI + 7;
33
CPresult
err
= 0;
34
int
flags, ret;
35
36
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
37
38
if
(0 != strncmp(szURI,
"file://"
, 7))
39
err =
KD_EINVAL
;
40
41
flags = O_WRONLY | O_CREAT;
42
43
if
(0 == err) {
44
ret = open(pathname, flags, 0);
45
if
(-1 != ret) {
46
pFilePipe->
fd
= ret;
47
}
else
{
48
err =
KD_EIO
;
/* ??? */
49
}
50
}
51
52
return
err
;
53
}
54
56
static
CPresult
Open(
CPhandle
* hContent,
CPstring
szURI,
CP_ACCESSTYPE
eAccess )
57
{
58
file_ContentPipe
* pFilePipe = (
file_ContentPipe
*) hContent;
59
CPresult
err = 0;
60
int
flags, ret;
61
62
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
63
64
if
(0 != strncmp(szURI,
"file://"
, 7))
65
err =
KD_EINVAL
;
66
67
if
(0 == err)
68
switch
(eAccess) {
69
case
CP_AccessRead
:
70
flags = O_RDONLY;
71
break
;
72
case
CP_AccessWrite
:
73
flags = O_WRONLY;
74
break
;
75
case
CP_AccessReadWrite
:
76
flags = O_RDWR;
77
break
;
78
default
:
79
err =
KD_EINVAL
;
/* ??? */
80
break
;
81
}
82
83
if
(0 == err) {
84
char
* pathname = szURI + 7;
85
ret = open(pathname, flags);
86
if
(-1 != ret) {
87
pFilePipe->
fd
= ret;
88
}
else
{
89
/* Map errno */
90
err =
KD_EIO
;
/* ??? */
91
}
92
}
93
94
return
err
;
95
}
96
98
static
CPresult
Close(
CPhandle
hContent )
99
{
100
file_ContentPipe
* pFilePipe = (
file_ContentPipe
*) hContent;
101
CPresult
err = 0;
102
int
ret;
103
104
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
105
106
ret = close(pFilePipe->
fd
);
107
if
(ret == -1) {
108
/* Map errno */
109
err =
KD_EIO
;
/* ??? */
110
}
111
112
return
err
;
113
}
114
116
static
CPresult
CheckAvailableBytes(
CPhandle
hContent,
CPuint
nBytesRequested,
CP_CHECKBYTESRESULTTYPE
*eResult )
117
{
118
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
119
120
return
KD_EBADF
;
121
}
122
124
static
CPresult
SetPosition(
CPhandle
hContent,
CPint
nOffset,
CP_ORIGINTYPE
eOrigin)
125
{
126
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
127
128
return
KD_EBADF
;
129
}
130
132
static
CPresult
GetPosition(
CPhandle
hContent,
CPuint
*pPosition)
133
{
134
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
135
136
return
KD_EBADF
;
137
}
138
141
static
CPresult
Read(
CPhandle
hContent,
CPbyte
*pData,
CPuint
nSize)
142
{
143
file_ContentPipe
* pFilePipe = (
file_ContentPipe
*) hContent;
144
CPresult
err = 0;
145
ssize_t count;
146
147
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
148
149
count = read(pFilePipe->
fd
, (
void
*) pData, (
size_t
) nSize);
150
151
if
(count < nSize) {
152
err =
KD_EIO
;
/* ??? */
153
}
else
if
(count == -1) {
154
err =
KD_EIO
;
/* ??? */
155
}
156
157
return
err
;
158
}
159
172
static
CPresult
ReadBuffer(
CPhandle
hContent,
CPbyte
**ppBuffer,
CPuint
*nSize,
CPbool
bForbidCopy)
173
{
174
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
175
176
return
KD_EBADF
;
177
}
178
180
static
CPresult
ReleaseReadBuffer(
CPhandle
hContent,
CPbyte
*pBuffer)
181
{
182
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
183
184
return
KD_EBADF
;
185
}
186
189
static
CPresult
Write(
CPhandle
hContent,
CPbyte
*pData,
CPuint
nSize)
190
{
191
file_ContentPipe
* pFilePipe = (
file_ContentPipe
*) hContent;
192
CPresult
err = 0;
193
ssize_t ret;
194
195
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
196
197
ret = write(pFilePipe->
fd
, (
void
*) pData, (
size_t
) nSize);
198
199
if
(ret < nSize) {
200
err =
KD_EIO
;
/* ??? */
201
}
else
if
(ret == -1) {
202
err =
KD_EIO
;
/* ??? */
203
}
204
205
return
err
;
206
}
207
211
static
CPresult
GetWriteBuffer(
CPhandle
hContent,
CPbyte
**ppBuffer,
CPuint
nSize)
212
{
213
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
214
215
return
KD_EBADF
;
216
}
217
220
static
CPresult
WriteBuffer(
CPhandle
hContent,
CPbyte
*pBuffer,
CPuint
nFilledSize)
221
{
222
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
223
224
return
KD_EBADF
;
225
}
226
228
static
CPresult
RegisterCallback(
CPhandle
hContent,
CPresult
(*ClientCallback)(
CP_EVENTTYPE
eEvent,
CPuint
iParam))
229
{
230
DEBUG
(
DEB_LEV_FUNCTION_NAME
,
"content_pipe_file:%s \n"
, __func__);
231
232
return
KD_EBADF
;
233
}
234
235
CPresult
file_pipe_Constructor
(
CP_PIPETYPE
**ppPipe,
CPstring
szURI)
236
{
237
file_ContentPipe
* pFilePipe;
238
239
pFilePipe = (
file_ContentPipe
*) calloc(1,
sizeof
(
file_ContentPipe
));
240
241
if
(NULL != pFilePipe) {
242
243
pFilePipe->
pipe
.
Open
= Open;
244
pFilePipe->
pipe
.
Close
= Close;
245
pFilePipe->
pipe
.
Create
= Create;
246
pFilePipe->
pipe
.
CheckAvailableBytes
= CheckAvailableBytes;
247
pFilePipe->
pipe
.
SetPosition
= SetPosition;
248
pFilePipe->
pipe
.
GetPosition
= GetPosition;
249
pFilePipe->
pipe
.
Read
= Read;
250
pFilePipe->
pipe
.
ReadBuffer
= ReadBuffer;
251
pFilePipe->
pipe
.
ReleaseReadBuffer
= ReleaseReadBuffer;
252
pFilePipe->
pipe
.
Write
= Write;
253
pFilePipe->
pipe
.
GetWriteBuffer
= GetWriteBuffer;
254
pFilePipe->
pipe
.
WriteBuffer
= WriteBuffer;
255
pFilePipe->
pipe
.
RegisterCallback
= RegisterCallback;
256
257
pFilePipe->
fd
= -1;
/* An invalid value */
258
259
*ppPipe = (
CP_PIPETYPE
*) pFilePipe;
260
}
261
262
return
0;
263
}
264
Generated for OpenMAX Bellagio rel. 0.9.3 by
1.5.1