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>
This commit is contained in:
Shawn O. Pearce 2006-12-23 02:33:55 -05:00 коммит произвёл Junio C Hamano
Родитель 2dc3a23409
Коммит 75025ccdb7
2 изменённых файлов: 17 добавлений и 0 удалений

Просмотреть файл

@ -428,6 +428,7 @@ extern char *git_commit_encoding;
extern char *git_log_output_encoding; extern char *git_log_output_encoding;
extern int copy_fd(int ifd, int ofd); 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 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); extern int write_or_whine(int fd, const void *buf, size_t count, const char *msg);

Просмотреть файл

@ -1,5 +1,21 @@
#include "cache.h" #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) void write_or_die(int fd, const void *buf, size_t count)
{ {
const char *p = buf; const char *p = buf;