Browse Source

Create read_or_die utility routine.

Like write_or_die read_or_die reads the entire length requested
or it kills the current process with a die call.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Shawn O. Pearce 18 years ago committed by Junio C Hamano
parent
commit
75025ccdb7
  1. 1
      cache.h
  2. 16
      write_or_die.c

1
cache.h

@ -428,6 +428,7 @@ extern char *git_commit_encoding; @@ -428,6 +428,7 @@ extern char *git_commit_encoding;
extern char *git_log_output_encoding;

extern int copy_fd(int ifd, int ofd);
extern void read_or_die(int fd, void *buf, size_t count);
extern void write_or_die(int fd, const void *buf, size_t count);
extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg);


16
write_or_die.c

@ -1,5 +1,21 @@ @@ -1,5 +1,21 @@
#include "cache.h"

void read_or_die(int fd, void *buf, size_t count)
{
char *p = buf;
ssize_t loaded;

while (count > 0) {
loaded = xread(fd, p, count);
if (loaded == 0)
die("unexpected end of file");
else if (loaded < 0)
die("read error (%s)", strerror(errno));
count -= loaded;
p += loaded;
}
}

void write_or_die(int fd, const void *buf, size_t count)
{
const char *p = buf;

Loading…
Cancel
Save