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 #else
size_t _sysprof_getpagesize (void); size_t _sysprof_getpagesize (void);
ssize_t _sysprof_pread (int fd, ssize_t _sysprof_pread (int fd,
void *buf, void *buf,
size_t count, size_t count,
off_t offset); off_t offset);
ssize_t _sysprof_pwrite (int fd, ssize_t _sysprof_pwrite (int fd,
const void *buf, const void *buf,
size_t count, size_t count,
off_t offset); off_t offset);
ssize_t _sysprof_write (int fd, ssize_t _sysprof_write (int fd,
const void *buf, const void *buf,
size_t count); size_t count);
gint32 _sysprof_getpid (void); gint32 _sysprof_getpid (void);
ssize_t _sysprof_sendfile (int out_fd, ssize_t _sysprof_sendfile (int out_fd,
int in_fd, int in_fd,
off_t *offset, off_t *offset,
size_t count); size_t count);
#endif #endif

View File

@ -22,11 +22,14 @@
#include "config.h" #include "config.h"
#include <errno.h>
#include <glib/gstdio.h> #include <glib/gstdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <sysprof-capture.h> #include <sysprof-capture.h>
#include <unistd.h> #include <unistd.h>
#include "sysprof-capture-util-private.h"
gint gint
main (gint argc, main (gint argc,
gchar *argv[]) gchar *argv[])
@ -84,7 +87,27 @@ main (gint argc,
} }
if (g_file_get_contents (tmpname, &contents, &len, NULL)) 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); g_unlink (tmpname);