Apache HTTPD
framework
httpd-2.4.62
srclib
apr
file_io
unix
fullrw.c
Go to the documentation of this file.
1
/* Licensed to the Apache Software Foundation (ASF) under one or more
2
* contributor license agreements. See the NOTICE file distributed with
3
* this work for additional information regarding copyright ownership.
4
* The ASF licenses this file to You under the Apache License, Version 2.0
5
* (the "License"); you may not use this file except in compliance with
6
* the License. You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
#include "
apr_file_io.h
"
18
19
20
APR_DECLARE
(
apr_status_t
)
apr_file_read_full
(
apr_file_t
*
thefile
,
void
*
buf
,
21
apr_size_t
nbytes
,
22
apr_size_t
*
bytes_read
)
23
{
24
apr_status_t
status
;
25
apr_size_t
total_read
= 0;
26
27
do
{
28
apr_size_t
amt
=
nbytes
;
29
30
status
=
apr_file_read
(
thefile
,
buf
, &
amt
);
31
buf
= (
char
*)
buf
+
amt
;
32
nbytes
-=
amt
;
33
total_read
+=
amt
;
34
}
while
(
status
==
APR_SUCCESS
&&
nbytes
> 0);
35
36
if
(
bytes_read
!=
NULL
)
37
*
bytes_read
=
total_read
;
38
39
return
status
;
40
}
41
42
APR_DECLARE
(
apr_status_t
)
apr_file_write_full
(
apr_file_t
*
thefile
,
43
const
void
*
buf
,
44
apr_size_t
nbytes
,
45
apr_size_t
*
bytes_written
)
46
{
47
apr_status_t
status
;
48
apr_size_t
total_written
= 0;
49
50
do
{
51
apr_size_t
amt
=
nbytes
;
52
53
status
=
apr_file_write
(
thefile
,
buf
, &
amt
);
54
buf
= (
char
*)
buf
+
amt
;
55
nbytes
-=
amt
;
56
total_written
+=
amt
;
57
}
while
(
status
==
APR_SUCCESS
&&
nbytes
> 0);
58
59
if
(
bytes_written
!=
NULL
)
60
*
bytes_written
=
total_written
;
61
62
return
status
;
63
}
64
65
APR_DECLARE
(
apr_status_t
)
apr_file_writev_full
(
apr_file_t
*
thefile
,
66
const
struct
iovec
*
vec
,
67
apr_size_t
nvec
,
68
apr_size_t
*
bytes_written
)
69
{
70
apr_status_t
rv =
APR_SUCCESS
;
71
apr_size_t
i
;
72
apr_size_t
amt
= 0;
73
apr_size_t
total = 0;
74
75
for
(
i
= 0;
i
<
nvec
;
i
++) {
76
total +=
vec
[
i
].iov_len;
77
}
78
79
rv = apr_file_writev(
thefile
,
vec
,
nvec
, &
amt
);
80
81
if
(
bytes_written
!=
NULL
)
82
*
bytes_written
=
amt
;
83
84
if
(rv !=
APR_SUCCESS
|| (
amt
== total)) {
85
return
rv;
86
}
87
88
for
(
i
= 0;
i
<
nvec
&&
amt
;
i
++) {
89
if
(
amt
>=
vec
[
i
].
iov_len
) {
90
amt
-=
vec
[
i
].iov_len;
91
}
92
else
{
93
break
;
94
}
95
}
96
97
if
(
amt
) {
98
rv =
apr_file_write_full
(
thefile
, (
const
char
*)
vec
[
i
].
iov_base
+
amt
,
99
vec
[
i
].
iov_len
-
amt
,
NULL
);
100
}
101
102
for
(;
i
<
nvec
&& rv ==
APR_SUCCESS
;
i
++) {
103
rv =
apr_file_write_full
(
thefile
,
vec
[
i
].
iov_base
,
104
vec
[
i
].
iov_len
, &
amt
);
105
}
106
107
if
(
bytes_written
!=
NULL
)
108
*
bytes_written
= total;
109
110
return
rv;
111
}
apr_file_io.h
APR File I/O Handling.
buf
const unsigned char * buf
Definition
util_md5.h:50
APR_DECLARE
const void apr_status_t(*) apr_status_t(* APR_DECLARE)(void) apr_pool_pre_cleanup_register(apr_pool_t *p
Definition
apr_pools.h:646
size
apr_size_t size
Definition
apr_allocator.h:115
APR_SUCCESS
#define APR_SUCCESS
Definition
apr_errno.h:225
apr_status_t
int apr_status_t
Definition
apr_errno.h:44
thefile
apr_file_t * thefile
Definition
apr_file_io.h:565
nbytes
void apr_size_t * nbytes
Definition
apr_file_io.h:454
vec
const struct iovec * vec
Definition
apr_file_io.h:490
bytes_read
void apr_size_t apr_size_t * bytes_read
Definition
apr_file_io.h:515
bytes_written
const void apr_size_t apr_size_t * bytes_written
Definition
apr_file_io.h:540
nvec
const struct iovec apr_size_t nvec
Definition
apr_file_io.h:491
status
int int status
Definition
apr_thread_proc.h:760
NULL
return NULL
Definition
mod_so.c:359
i
int i
Definition
mod_so.c:347
apr_file_t
Definition
apr_arch_file_io.h:97
Generated by
1.9.8