Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
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
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
ae236823
Commit
ae236823
authored
4 years ago
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
system/FileDescriptor: add method FullWrite()
parent
540919f2
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
30 deletions
+26
-30
FileDescriptor.cxx
src/system/FileDescriptor.cxx
+18
-0
FileDescriptor.hxx
src/system/FileDescriptor.hxx
+6
-0
run_filter.cxx
test/run_filter.cxx
+2
-30
No files found.
src/system/FileDescriptor.cxx
View file @
ae236823
...
...
@@ -298,6 +298,24 @@ FileDescriptor::FullRead(void *_buffer, size_t length)
}
}
void
FileDescriptor
::
FullWrite
(
const
void
*
_buffer
,
size_t
length
)
{
const
uint8_t
*
buffer
=
(
const
uint8_t
*
)
_buffer
;
while
(
length
>
0
)
{
ssize_t
nbytes
=
Write
(
buffer
,
length
);
if
(
nbytes
<=
0
)
{
if
(
nbytes
<
0
)
throw
MakeErrno
(
"Failed to write"
);
throw
std
::
runtime_error
(
"Failed to write"
);
}
buffer
+=
nbytes
;
length
-=
nbytes
;
}
}
#ifndef _WIN32
int
...
...
This diff is collapsed.
Click to expand it.
src/system/FileDescriptor.hxx
View file @
ae236823
...
...
@@ -237,6 +237,12 @@ public:
return
::
write
(
fd
,
buffer
,
length
);
}
/**
* Write until all of the given buffer has been written.
* Throws on error.
*/
void
FullWrite
(
const
void
*
buffer
,
size_t
length
);
#ifndef _WIN32
int
Poll
(
short
events
,
int
timeout
)
const
noexcept
;
...
...
This diff is collapsed.
Click to expand it.
test/run_filter.cxx
View file @
ae236823
...
...
@@ -71,34 +71,6 @@ ReadOrThrow(FileDescriptor fd, void *buffer, size_t size)
}
static
size_t
WriteOrThrow
(
FileDescriptor
fd
,
const
void
*
buffer
,
size_t
size
)
{
auto
nbytes
=
fd
.
Write
(
buffer
,
size
);
if
(
nbytes
<
0
)
throw
MakeErrno
(
"Write failed"
);
return
nbytes
;
}
static
void
FullWrite
(
FileDescriptor
fd
,
ConstBuffer
<
uint8_t
>
src
)
{
while
(
!
src
.
empty
())
{
size_t
nbytes
=
WriteOrThrow
(
fd
,
src
.
data
,
src
.
size
);
if
(
nbytes
==
0
)
throw
std
::
runtime_error
(
"Write failed"
);
src
.
skip_front
(
nbytes
);
}
}
static
void
FullWrite
(
FileDescriptor
fd
,
ConstBuffer
<
void
>
src
)
{
FullWrite
(
fd
,
ConstBuffer
<
uint8_t
>::
FromVoid
(
src
));
}
static
size_t
ReadFrames
(
FileDescriptor
fd
,
void
*
_buffer
,
size_t
size
,
size_t
frame_size
)
{
auto
buffer
=
(
uint8_t
*
)
_buffer
;
...
...
@@ -166,14 +138,14 @@ try {
break
;
auto
dest
=
filter
->
FilterPCM
({(
const
void
*
)
buffer
,
(
size_t
)
nbytes
});
FullWrite
(
output_fd
,
dest
);
output_fd
.
FullWrite
(
dest
.
data
,
dest
.
size
);
}
while
(
true
)
{
auto
dest
=
filter
->
Flush
();
if
(
dest
.
IsNull
())
break
;
FullWrite
(
output_fd
,
dest
);
output_fd
.
FullWrite
(
dest
.
data
,
dest
.
size
);
}
/* cleanup and exit */
...
...
This diff is collapsed.
Click to expand it.
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