From 4397f0148ad0967cf3a2d794fb3d6b2c7f8738d7 Mon Sep 17 00:00:00 2001
From: Linus Torvalds <torvalds@ppc970.osdl.org>
Date: Tue, 28 Jun 2005 11:10:06 -0700
Subject: [PATCH] csum-file: add "sha1fd()" to create a SHA1 csum file from an
 existing file descriptor

We'll use this soon to write pack-files to stdout.
---
 csum-file.c | 20 ++++++++++++++++++++
 csum-file.h |  1 +
 2 files changed, 21 insertions(+)

diff --git a/csum-file.c b/csum-file.c
index 3ab65b7515..c8c7369152 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -96,6 +96,26 @@ struct sha1file *sha1create(const char *fmt, ...)
 	return f;
 }
 
+struct sha1file *sha1fd(int fd, const char *name)
+{
+	struct sha1file *f;
+	unsigned len;
+
+	f = xmalloc(sizeof(*f));
+
+	len = strlen(name);
+	if (len >= PATH_MAX)
+		die("you wascally wabbit, you");
+	f->namelen = len;
+	memcpy(f->name, name, len+1);
+
+	f->fd = fd;
+	f->error = 0;
+	f->offset = 0;
+	SHA1_Init(&f->ctx);
+	return f;
+}
+
 int sha1write_compressed(struct sha1file *f, void *in, unsigned int size)
 {
 	z_stream stream;
diff --git a/csum-file.h b/csum-file.h
index 2b6c8dcad2..776cfb152a 100644
--- a/csum-file.h
+++ b/csum-file.h
@@ -10,6 +10,7 @@ struct sha1file {
 	unsigned char buffer[8192];
 };
 
+extern struct sha1file *sha1fd(int fd, const char *name);
 extern struct sha1file *sha1create(const char *fmt, ...);
 extern int sha1close(struct sha1file *, unsigned char *, int);
 extern int sha1write(struct sha1file *, void *, unsigned int);