Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
U
unique-xids
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
uplex-varnish
unique-xids
Commits
10bfefca
Commit
10bfefca
authored
Nov 13, 2011
by
Poul-Henning Kamp
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Rewrite VCLI_ReadResult() to be much more robust.
parent
62986111
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
47 additions
and
35 deletions
+47
-35
cli_common.c
lib/libvarnish/cli_common.c
+47
-35
No files found.
lib/libvarnish/cli_common.c
View file @
10bfefca
...
...
@@ -121,7 +121,7 @@ read_tmo(int fd, char *ptr, unsigned len, double tmo)
struct
pollfd
pfd
;
if
(
tmo
>
0
)
to
=
tmo
*
1e3
;
to
=
(
int
)(
tmo
*
1e3
)
;
else
to
=
-
1
;
pfd
.
fd
=
fd
;
...
...
@@ -150,44 +150,56 @@ VCLI_ReadResult(int fd, unsigned *status, char **ptr, double tmo)
char
res
[
CLI_LINE0_LEN
];
/* For NUL */
int
i
,
j
;
unsigned
u
,
v
,
s
;
char
*
p
;
char
*
p
=
NULL
;
const
char
*
err
=
"CLI communication error (hdr)"
;
if
(
status
==
NULL
)
status
=
&
s
;
if
(
ptr
!=
NULL
)
*
ptr
=
NULL
;
i
=
read_tmo
(
fd
,
res
,
CLI_LINE0_LEN
,
tmo
);
if
(
i
!=
CLI_LINE0_LEN
)
{
*
status
=
CLIS_COMMS
;
if
(
ptr
!=
NULL
)
*
ptr
=
strdup
(
"CLI communication error (hdr)"
);
if
(
i
!=
0
)
return
(
i
);
return
(
*
status
);
}
assert
(
i
==
CLI_LINE0_LEN
);
assert
(
res
[
3
]
==
' '
);
assert
(
res
[
CLI_LINE0_LEN
-
1
]
==
'\n'
);
res
[
CLI_LINE0_LEN
-
1
]
=
'\0'
;
j
=
sscanf
(
res
,
"%u %u
\n
"
,
&
u
,
&
v
);
assert
(
j
==
2
);
*
status
=
u
;
p
=
malloc
(
v
+
1L
);
assert
(
p
!=
NULL
);
i
=
read_tmo
(
fd
,
p
,
v
+
1
,
tmo
);
if
(
i
<
0
)
{
*
status
=
CLIS_COMMS
;
free
(
p
);
if
(
ptr
!=
NULL
)
*
ptr
=
strdup
(
"CLI communication error (body)"
);
return
(
i
);
}
assert
(
i
==
v
+
1
);
assert
(
p
[
v
]
==
'\n'
);
p
[
v
]
=
'\0'
;
if
(
ptr
==
NULL
)
do
{
i
=
read_tmo
(
fd
,
res
,
CLI_LINE0_LEN
,
tmo
);
if
(
i
!=
CLI_LINE0_LEN
)
break
;
if
(
res
[
3
]
!=
' '
)
break
;
if
(
res
[
CLI_LINE0_LEN
-
1
]
!=
'\n'
)
break
;
res
[
CLI_LINE0_LEN
-
1
]
=
'\0'
;
j
=
sscanf
(
res
,
"%u %u
\n
"
,
&
u
,
&
v
);
if
(
j
!=
2
)
break
;
err
=
"CLI communication error (body)"
;
*
status
=
u
;
p
=
malloc
(
v
+
1L
);
if
(
p
==
NULL
)
break
;
i
=
read_tmo
(
fd
,
p
,
v
+
1
,
tmo
);
if
(
i
<
0
)
break
;
if
(
i
!=
v
+
1
)
break
;
if
(
p
[
v
]
!=
'\n'
)
break
;
p
[
v
]
=
'\0'
;
if
(
ptr
==
NULL
)
free
(
p
);
else
*
ptr
=
p
;
return
(
0
);
}
while
(
0
);
if
(
p
!=
NULL
)
free
(
p
);
else
*
ptr
=
p
;
return
(
0
);
*
status
=
CLIS_COMMS
;
if
(
ptr
!=
NULL
)
*
ptr
=
strdup
(
err
);
return
(
*
status
);
}
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