tools: check result of write

and also use the platform helpers
This commit is contained in:
Christian Hergert
2019-06-03 12:40:48 -07:00
parent 690bf90a14
commit 7df9221f8b
2 changed files with 35 additions and 12 deletions

View File

@ -38,20 +38,20 @@
#else
size_t _sysprof_getpagesize (void);
ssize_t _sysprof_pread (int fd,
void *buf,
size_t count,
off_t offset);
void *buf,
size_t count,
off_t offset);
ssize_t _sysprof_pwrite (int fd,
const void *buf,
size_t count,
off_t offset);
const void *buf,
size_t count,
off_t offset);
ssize_t _sysprof_write (int fd,
const void *buf,
size_t count);
const void *buf,
size_t count);
gint32 _sysprof_getpid (void);
ssize_t _sysprof_sendfile (int out_fd,
int in_fd,
off_t *offset,
size_t count);
int in_fd,
off_t *offset,
size_t count);
#endif

View File

@ -22,11 +22,14 @@
#include "config.h"
#include <errno.h>
#include <glib/gstdio.h>
#include <stdlib.h>
#include <sysprof-capture.h>
#include <unistd.h>
#include "sysprof-capture-util-private.h"
gint
main (gint argc,
gchar *argv[])
@ -84,7 +87,27 @@ main (gint argc,
}
if (g_file_get_contents (tmpname, &contents, &len, NULL))
write (STDOUT_FILENO, contents, len);
{
const gchar *buf = contents;
gsize to_write = len;
while (to_write > 0)
{
gssize n_written;
n_written = _sysprof_write (STDOUT_FILENO, buf, to_write);
if (n_written < 0)
{
g_printerr ("%s\n", g_strerror (errno));
g_unlink (tmpname);
return EXIT_FAILURE;
}
buf += n_written;
to_write -= n_written;
}
}
g_unlink (tmpname);