Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci-2.6.23
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci-2.6.23
Commits
4e3e43ad
Commit
4e3e43ad
authored
Oct 17, 2006
by
Trond Myklebust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SUNRPC: Add __(read|write)_bytes_from_xdr_buf
Signed-off-by:
Trond Myklebust
<
Trond.Myklebust@netapp.com
>
parent
1e78957e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
37 additions
and
29 deletions
+37
-29
net/sunrpc/xdr.c
net/sunrpc/xdr.c
+37
-29
No files found.
net/sunrpc/xdr.c
View file @
4e3e43ad
...
...
@@ -688,56 +688,64 @@ xdr_buf_subsegment(struct xdr_buf *buf, struct xdr_buf *subbuf,
return
0
;
}
/* obj is assumed to point to allocated memory of size at least len: */
int
read_bytes_from_xdr_buf
(
struct
xdr_buf
*
buf
,
unsigned
int
base
,
void
*
obj
,
unsigned
int
len
)
static
void
__read_bytes_from_xdr_buf
(
struct
xdr_buf
*
subbuf
,
void
*
obj
,
unsigned
int
len
)
{
struct
xdr_buf
subbuf
;
unsigned
int
this_len
;
int
status
;
status
=
xdr_buf_subsegment
(
buf
,
&
subbuf
,
base
,
len
);
if
(
status
)
goto
out
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
.
head
[
0
].
iov_len
);
memcpy
(
obj
,
subbuf
.
head
[
0
].
iov_base
,
this_len
);
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
->
head
[
0
].
iov_len
);
memcpy
(
obj
,
subbuf
->
head
[
0
].
iov_base
,
this_len
);
len
-=
this_len
;
obj
+=
this_len
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
.
page_len
);
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
->
page_len
);
if
(
this_len
)
_copy_from_pages
(
obj
,
subbuf
.
pages
,
subbuf
.
page_base
,
this_len
);
_copy_from_pages
(
obj
,
subbuf
->
pages
,
subbuf
->
page_base
,
this_len
);
len
-=
this_len
;
obj
+=
this_len
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
.
tail
[
0
].
iov_len
);
memcpy
(
obj
,
subbuf
.
tail
[
0
].
iov_base
,
this_len
);
out:
return
status
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
->
tail
[
0
].
iov_len
);
memcpy
(
obj
,
subbuf
->
tail
[
0
].
iov_base
,
this_len
);
}
/* obj is assumed to point to allocated memory of size at least len: */
int
write_bytes_to_xdr_buf
(
struct
xdr_buf
*
buf
,
unsigned
int
base
,
void
*
obj
,
unsigned
int
len
)
int
read_bytes_from_xdr_buf
(
struct
xdr_buf
*
buf
,
unsigned
int
base
,
void
*
obj
,
unsigned
int
len
)
{
struct
xdr_buf
subbuf
;
unsigned
int
this_len
;
int
status
;
status
=
xdr_buf_subsegment
(
buf
,
&
subbuf
,
base
,
len
);
if
(
status
)
goto
out
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
.
head
[
0
].
iov_len
);
memcpy
(
subbuf
.
head
[
0
].
iov_base
,
obj
,
this_len
);
if
(
status
!=
0
)
return
status
;
__read_bytes_from_xdr_buf
(
&
subbuf
,
obj
,
len
);
return
0
;
}
static
void
__write_bytes_to_xdr_buf
(
struct
xdr_buf
*
subbuf
,
void
*
obj
,
unsigned
int
len
)
{
unsigned
int
this_len
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
->
head
[
0
].
iov_len
);
memcpy
(
subbuf
->
head
[
0
].
iov_base
,
obj
,
this_len
);
len
-=
this_len
;
obj
+=
this_len
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
.
page_len
);
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
->
page_len
);
if
(
this_len
)
_copy_to_pages
(
subbuf
.
pages
,
subbuf
.
page_base
,
obj
,
this_len
);
_copy_to_pages
(
subbuf
->
pages
,
subbuf
->
page_base
,
obj
,
this_len
);
len
-=
this_len
;
obj
+=
this_len
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
.
tail
[
0
].
iov_len
);
memcpy
(
subbuf
.
tail
[
0
].
iov_base
,
obj
,
this_len
);
out:
return
status
;
this_len
=
min_t
(
unsigned
int
,
len
,
subbuf
->
tail
[
0
].
iov_len
);
memcpy
(
subbuf
->
tail
[
0
].
iov_base
,
obj
,
this_len
);
}
/* obj is assumed to point to allocated memory of size at least len: */
int
write_bytes_to_xdr_buf
(
struct
xdr_buf
*
buf
,
unsigned
int
base
,
void
*
obj
,
unsigned
int
len
)
{
struct
xdr_buf
subbuf
;
int
status
;
status
=
xdr_buf_subsegment
(
buf
,
&
subbuf
,
base
,
len
);
if
(
status
!=
0
)
return
status
;
__write_bytes_to_xdr_buf
(
&
subbuf
,
obj
,
len
);
return
0
;
}
int
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment