Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
liblongpath-rsync
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liblongpath
liblongpath-rsync
Commits
71daa07f
Commit
71daa07f
authored
Feb 06, 2008
by
Wayne Davison
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make get_xattr_names() even safer at fetching the list of attr names.
parent
287bb276
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
22 deletions
+20
-22
xattrs.c
xattrs.c
+20
-22
No files found.
xattrs.c
View file @
71daa07f
...
...
@@ -111,6 +111,7 @@ static int rsync_xal_compare_names(const void *x1, const void *x2)
static
ssize_t
get_xattr_names
(
const
char
*
fname
)
{
ssize_t
list_len
;
double
arg
;
if
(
!
namebuf
)
{
namebuf_len
=
1024
;
...
...
@@ -119,39 +120,36 @@ static ssize_t get_xattr_names(const char *fname)
out_of_memory
(
"get_xattr_names"
);
}
/* The length returned includes all the '\0' terminators. */
list_len
=
sys_llistxattr
(
fname
,
namebuf
,
namebuf_len
);
if
(
list_len
>
(
ssize_t
)
namebuf_len
)
{
list_len
=
-
1
;
errno
=
ERANGE
;
}
if
(
list_len
>=
0
)
return
list_len
;
if
(
errno
==
ENOTSUP
)
return
0
;
if
(
errno
==
ERANGE
)
{
list_len
=
sys_llistxattr
(
fname
,
NULL
,
0
);
if
(
list_len
<
0
)
{
while
(
1
)
{
/* The length returned includes all the '\0' terminators. */
list_len
=
sys_llistxattr
(
fname
,
namebuf
,
namebuf_len
);
if
(
list_len
>=
0
)
{
if
((
size_t
)
list_len
<=
namebuf_len
)
break
;
}
else
if
(
errno
==
ENOTSUP
)
return
0
;
else
if
(
errno
!=
ERANGE
)
{
arg
=
(
double
)
namebuf_len
;
got_error:
rsyserr
(
FERROR_XFER
,
errno
,
"get_xattr_names: llistxattr(
\"
%s
\"
,
0
) failed"
,
fname
);
"get_xattr_names: llistxattr(
\"
%s
\"
,
%.0f
) failed"
,
fname
,
arg
);
return
-
1
;
}
list_len
=
sys_llistxattr
(
fname
,
NULL
,
0
);
if
(
list_len
<
0
)
{
arg
=
0
;
goto
got_error
;
}
if
(
namebuf_len
)
free
(
namebuf
);
namebuf_len
=
list_len
+
1024
;
namebuf
=
new_array
(
char
,
namebuf_len
);
if
(
!
namebuf
)
out_of_memory
(
"get_xattr_names"
);
list_len
=
sys_llistxattr
(
fname
,
namebuf
,
namebuf_len
);
if
(
list_len
>=
0
)
return
list_len
;
}
rsyserr
(
FERROR_XFER
,
errno
,
"get_xattr_names: llistxattr(
\"
%s
\"
,%ld) failed"
,
fname
,
(
long
)
namebuf_len
);
return
-
1
;
return
list_len
;
}
/* On entry, the *len_ptr parameter contains the size of the extra space we
...
...
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