apr
1.7.0
About:
APR
(Apache Portable Runtime) project offers software libraries that provide a predictable and consistent interface to underlying platform-specific implementations (APR core library).
Fossies
Dox
:
apr-1.7.0.tar.bz2
("inofficial" and yet experimental doxygen-generated source code documentation)
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
}
bytes_written
const void apr_size_t apr_size_t * bytes_written
Definition:
apr_file_io.h:567
status
int int status
Definition:
apr_thread_proc.h:769
nvec
const struct iovec apr_size_t nvec
Definition:
apr_file_io.h:519
APR_DECLARE
APR_DECLARE(apr_status_t)
Definition:
fullrw.c:20
thefile
apr_file_t * thefile
Definition:
apr_file_io.h:594
buf
char * buf
Definition:
apr_errno.h:52
vec
const struct iovec * vec
Definition:
apr_file_io.h:519
apr_file_t
Definition:
apr_arch_file_io.h:97
apr_file_io.h
APR File I/O Handling.
apr_status_t
int apr_status_t
Definition:
apr_errno.h:44
bytes_read
void apr_size_t apr_size_t * bytes_read
Definition:
apr_file_io.h:542
APR_SUCCESS
#define APR_SUCCESS
Definition:
apr_errno.h:225
nbytes
void apr_size_t * nbytes
Definition:
apr_file_io.h:482
file_io
unix
fullrw.c
Generated by
1.8.16