git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] Simplify calling of CR/LF conversion routines
@ 2007-04-18 22:28 Alex Riesen
  2007-04-18 23:03 ` Alex Riesen
  2007-04-22 13:45 ` Martin Waitz
  0 siblings, 2 replies; 5+ messages in thread
From: Alex Riesen @ 2007-04-18 22:28 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Linus Torvalds

What is the point of having a return value if it is discarded
afterwords anyway?

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---

It passes the tests.

 builtin-apply.c |   18 +++++++-----------
 cache.h         |    4 ++--
 convert.c       |   46 +++++++++++++++++++++-------------------------
 diff.c          |    4 ++--
 entry.c         |    7 ++-----
 sha1_file.c     |    7 +++----
 6 files changed, 37 insertions(+), 49 deletions(-)

diff --git a/builtin-apply.c b/builtin-apply.c
index fd92ef7..ccd342c 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -1475,8 +1475,8 @@ static int read_old_data(struct stat *st, const char *path, char **buf_p, unsign
 		}
 		close(fd);
 		nsize = got;
-		nbuf = buf;
-		if (convert_to_git(path, &nbuf, &nsize)) {
+		nbuf = convert_to_git(path, buf, &nsize);
+		if (nbuf) {
 			free(buf);
 			*buf_p = nbuf;
 			*alloc_p = nsize;
@@ -2355,9 +2355,8 @@ static void add_index_file(const char *path, unsigned mode, void *buf, unsigned
 
 static int try_create_file(const char *path, unsigned int mode, const char *buf, unsigned long size)
 {
-	int fd, converted;
+	int fd;
 	char *nbuf;
-	unsigned long nsize;
 
 	if (has_symlinks && S_ISLNK(mode))
 		/* Although buf:size is counted string, it also is NUL
@@ -2369,13 +2368,10 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,
 	if (fd < 0)
 		return -1;
 
-	nsize = size;
-	nbuf = (char *) buf;
-	converted = convert_to_working_tree(path, &nbuf, &nsize);
-	if (converted) {
+	nbuf = convert_to_working_tree(path, buf, &size);
+	if (nbuf)
 		buf = nbuf;
-		size = nsize;
-	}
+
 	while (size) {
 		int written = xwrite(fd, buf, size);
 		if (written < 0)
@@ -2387,7 +2383,7 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,
 	}
 	if (close(fd) < 0)
 		die("closing file %s: %s", path, strerror(errno));
-	if (converted)
+	if (nbuf)
 		free(nbuf);
 	return 0;
 }
diff --git a/cache.h b/cache.h
index 53c2341..67fd050 100644
--- a/cache.h
+++ b/cache.h
@@ -493,8 +493,8 @@ extern void trace_printf(const char *format, ...);
 extern void trace_argv_printf(const char **argv, int count, const char *format, ...);
 
 /* convert.c */
-extern int convert_to_git(const char *path, char **bufp, unsigned long *sizep);
-extern int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep);
+extern char *convert_to_git(const char *path, const char *bufp, unsigned long *sizep);
+extern char *convert_to_working_tree(const char *path, const char *bufp, unsigned long *sizep);
 
 /* match-trees.c */
 void shift_tree(const unsigned char *, const unsigned char *, unsigned char *, int);
diff --git a/convert.c b/convert.c
index 898bfe3..b219c39 100644
--- a/convert.c
+++ b/convert.c
@@ -72,7 +72,7 @@ static int is_binary(unsigned long size, struct text_stat *stats)
 	return 0;
 }
 
-int convert_to_git(const char *path, char **bufp, unsigned long *sizep)
+char *convert_to_git(const char *path, const char *bufp, unsigned long *sizep)
 {
 	char *buffer, *nbuf;
 	unsigned long size, nsize;
@@ -84,18 +84,17 @@ int convert_to_git(const char *path, char **bufp, unsigned long *sizep)
 	 * stupid auto-CRLF one.
 	 */
 	if (!auto_crlf)
-		return 0;
+		return NULL;
 
 	size = *sizep;
 	if (!size)
-		return 0;
-	buffer = *bufp;
+		return NULL;
 
-	gather_stats(buffer, size, &stats);
+	gather_stats(bufp, size, &stats);
 
 	/* No CR? Nothing to convert, regardless. */
 	if (!stats.cr)
-		return 0;
+		return NULL;
 
 	/*
 	 * We're currently not going to even try to convert stuff
@@ -103,32 +102,31 @@ int convert_to_git(const char *path, char **bufp, unsigned long *sizep)
 	 * stuff?
 	 */
 	if (stats.cr != stats.crlf)
-		return 0;
+		return NULL;
 
 	/*
 	 * And add some heuristics for binary vs text, of course...
 	 */
 	if (is_binary(size, &stats))
-		return 0;
+		return NULL;
 
 	/*
 	 * Ok, allocate a new buffer, fill it in, and return true
 	 * to let the caller know that we switched buffers on it.
 	 */
 	nsize = size - stats.crlf;
-	nbuf = xmalloc(nsize);
-	*bufp = nbuf;
+	buffer = nbuf = xmalloc(nsize);
 	*sizep = nsize;
 	do {
-		unsigned char c = *buffer++;
+		unsigned char c = *bufp++;
 		if (c != '\r')
 			*nbuf++ = c;
 	} while (--size);
 
-	return 1;
+	return buffer;
 }
 
-int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep)
+char *convert_to_working_tree(const char *path, const char *bufp, unsigned long *sizep)
 {
 	char *buffer, *nbuf;
 	unsigned long size, nsize;
@@ -141,46 +139,44 @@ int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep)
 	 * stupid auto-CRLF one.
 	 */
 	if (auto_crlf <= 0)
-		return 0;
+		return NULL;
 
 	size = *sizep;
 	if (!size)
-		return 0;
-	buffer = *bufp;
+		return NULL;
 
-	gather_stats(buffer, size, &stats);
+	gather_stats(bufp, size, &stats);
 
 	/* No LF? Nothing to convert, regardless. */
 	if (!stats.lf)
-		return 0;
+		return NULL;
 
 	/* Was it already in CRLF format? */
 	if (stats.lf == stats.crlf)
-		return 0;
+		return NULL;
 
 	/* If we have any bare CR characters, we're not going to touch it */
 	if (stats.cr != stats.crlf)
-		return 0;
+		return NULL;
 
 	if (is_binary(size, &stats))
-		return 0;
+		return NULL;
 
 	/*
 	 * Ok, allocate a new buffer, fill it in, and return true
 	 * to let the caller know that we switched buffers on it.
 	 */
 	nsize = size + stats.lf - stats.crlf;
-	nbuf = xmalloc(nsize);
-	*bufp = nbuf;
+	buffer = nbuf = xmalloc(nsize);
 	*sizep = nsize;
 	last = 0;
 	do {
-		unsigned char c = *buffer++;
+		unsigned char c = *bufp++;
 		if (c == '\n' && last != '\r')
 			*nbuf++ = '\r';
 		*nbuf++ = c;
 		last = c;
 	} while (--size);
 
-	return 1;
+	return buffer;
 }
diff --git a/diff.c b/diff.c
index fbb79d7..ee72cc6 100644
--- a/diff.c
+++ b/diff.c
@@ -1461,9 +1461,9 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
 		/*
 		 * Convert from working tree format to canonical git format
 		 */
-		buf = s->data;
 		size = s->size;
-		if (convert_to_git(s->path, &buf, &size)) {
+		buf = convert_to_git(s->path, s->data, &size);
+		if (buf) {
 			munmap(s->data, s->size);
 			s->should_munmap = 0;
 			s->data = buf;
diff --git a/entry.c b/entry.c
index d72f811..3771209 100644
--- a/entry.c
+++ b/entry.c
@@ -79,7 +79,6 @@ static int write_entry(struct cache_entry *ce, char *path, struct checkout *stat
 	}
 	switch (ntohl(ce->ce_mode) & S_IFMT) {
 		char *buf;
-		unsigned long nsize;
 
 	case S_IFREG:
 		if (to_tempfile) {
@@ -96,12 +95,10 @@ static int write_entry(struct cache_entry *ce, char *path, struct checkout *stat
 		/*
 		 * Convert from git internal format to working tree format
 		 */
-		buf = new;
-		nsize = size;
-		if (convert_to_working_tree(ce->name, &buf, &nsize)) {
+		buf = convert_to_working_tree(ce->name, new, &size);
+		if (buf) {
 			free(new);
 			new = buf;
-			size = nsize;
 		}
 
 		wrote = write_in_full(fd, new, size);
diff --git a/sha1_file.c b/sha1_file.c
index 4304fe9..1978d5f 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -2277,10 +2277,9 @@ int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object,
 	 */
 	if ((type == OBJ_BLOB) && S_ISREG(st->st_mode)) {
 		unsigned long nsize = size;
-		char *nbuf = buf;
-		if (convert_to_git(path, &nbuf, &nsize)) {
-			if (size)
-				munmap(buf, size);
+		char *nbuf = convert_to_git(path, buf, &nsize);
+		if (nbuf) {
+			munmap(buf, size);
 			size = nsize;
 			buf = nbuf;
 			re_allocated = 1;
-- 
1.5.1.1.876.ge36f76

^ permalink raw reply related	[flat|nested] 5+ messages in thread
* [PATCH] Simplify calling of CR/LF conversion routines
@ 2007-04-19  0:05 Alex Riesen
  0 siblings, 0 replies; 5+ messages in thread
From: Alex Riesen @ 2007-04-19  0:05 UTC (permalink / raw)
  To: git; +Cc: Junio C Hamano, Linus Torvalds

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
---

This is against next.

 builtin-apply.c |   18 +++++++-----------
 cache.h         |    4 ++--
 convert.c       |   50 +++++++++++++++++++++++---------------------------
 diff.c          |    4 ++--
 entry.c         |    8 +++-----
 sha1_file.c     |    7 +++----
 6 files changed, 40 insertions(+), 51 deletions(-)

diff --git a/builtin-apply.c b/builtin-apply.c
index fd92ef7..ccd342c 100644
--- a/builtin-apply.c
+++ b/builtin-apply.c
@@ -1475,8 +1475,8 @@ static int read_old_data(struct stat *st, const char *path, char **buf_p, unsign
 		}
 		close(fd);
 		nsize = got;
-		nbuf = buf;
-		if (convert_to_git(path, &nbuf, &nsize)) {
+		nbuf = convert_to_git(path, buf, &nsize);
+		if (nbuf) {
 			free(buf);
 			*buf_p = nbuf;
 			*alloc_p = nsize;
@@ -2355,9 +2355,8 @@ static void add_index_file(const char *path, unsigned mode, void *buf, unsigned
 
 static int try_create_file(const char *path, unsigned int mode, const char *buf, unsigned long size)
 {
-	int fd, converted;
+	int fd;
 	char *nbuf;
-	unsigned long nsize;
 
 	if (has_symlinks && S_ISLNK(mode))
 		/* Although buf:size is counted string, it also is NUL
@@ -2369,13 +2368,10 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,
 	if (fd < 0)
 		return -1;
 
-	nsize = size;
-	nbuf = (char *) buf;
-	converted = convert_to_working_tree(path, &nbuf, &nsize);
-	if (converted) {
+	nbuf = convert_to_working_tree(path, buf, &size);
+	if (nbuf)
 		buf = nbuf;
-		size = nsize;
-	}
+
 	while (size) {
 		int written = xwrite(fd, buf, size);
 		if (written < 0)
@@ -2387,7 +2383,7 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,
 	}
 	if (close(fd) < 0)
 		die("closing file %s: %s", path, strerror(errno));
-	if (converted)
+	if (nbuf)
 		free(nbuf);
 	return 0;
 }
diff --git a/cache.h b/cache.h
index 6d462bd..39b53e5 100644
--- a/cache.h
+++ b/cache.h
@@ -512,8 +512,8 @@ extern void trace_printf(const char *format, ...);
 extern void trace_argv_printf(const char **argv, int count, const char *format, ...);
 
 /* convert.c */
-extern int convert_to_git(const char *path, char **bufp, unsigned long *sizep);
-extern int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep);
+extern char *convert_to_git(const char *path, const char *bufp, unsigned long *sizep);
+extern char *convert_to_working_tree(const char *path, const char *bufp, unsigned long *sizep);
 
 /* match-trees.c */
 void shift_tree(const unsigned char *, const unsigned char *, unsigned char *, int);
diff --git a/convert.c b/convert.c
index 68bb70f..17d7324 100644
--- a/convert.c
+++ b/convert.c
@@ -74,7 +74,7 @@ static int is_binary(unsigned long size, struct text_stat *stats)
 	return 0;
 }
 
-static int crlf_to_git(const char *path, char **bufp, unsigned long *sizep, int guess)
+char *crlf_to_git(const char *path, const char *bufp, unsigned long *sizep, int guess)
 {
 	char *buffer, *nbuf;
 	unsigned long size, nsize;
@@ -85,14 +85,13 @@ static int crlf_to_git(const char *path, char **bufp, unsigned long *sizep, int
 
 	size = *sizep;
 	if (!size)
-		return 0;
-	buffer = *bufp;
+		return NULL;
 
-	gather_stats(buffer, size, &stats);
+	gather_stats(bufp, size, &stats);
 
 	/* No CR? Nothing to convert, regardless. */
 	if (!stats.cr)
-		return 0;
+		return NULL;
 
 	if (guess) {
 		/*
@@ -115,38 +114,37 @@ static int crlf_to_git(const char *path, char **bufp, unsigned long *sizep, int
 	 * to let the caller know that we switched buffers on it.
 	 */
 	nsize = size - stats.crlf;
-	nbuf = xmalloc(nsize);
-	*bufp = nbuf;
+	buffer = nbuf = xmalloc(nsize);
 	*sizep = nsize;
 
 	if (guess) {
 		do {
-			unsigned char c = *buffer++;
+			unsigned char c = *bufp++;
 			if (c != '\r')
 				*nbuf++ = c;
 		} while (--size);
 	} else {
 		do {
-			unsigned char c = *buffer++;
-			if (! (c == '\r' && (1 < size && *buffer == '\n')))
+			unsigned char c = *bufp++;
+			if (! (c == '\r' && (1 < size && *bufp == '\n')))
 				*nbuf++ = c;
 		} while (--size);
 	}
 
-	return 1;
+	return buffer;
 }
 
-static int autocrlf_to_git(const char *path, char **bufp, unsigned long *sizep)
+static char *autocrlf_to_git(const char *path, const char *bufp, unsigned long *sizep)
 {
 	return crlf_to_git(path, bufp, sizep, 1);
 }
 
-static int forcecrlf_to_git(const char *path, char **bufp, unsigned long *sizep)
+static char *forcecrlf_to_git(const char *path, const char *bufp, unsigned long *sizep)
 {
 	return crlf_to_git(path, bufp, sizep, 0);
 }
 
-static int crlf_to_working_tree(const char *path, char **bufp, unsigned long *sizep, int guess)
+static char *crlf_to_working_tree(const char *path, const char *bufp, unsigned long *sizep, int guess)
 {
 	char *buffer, *nbuf;
 	unsigned long size, nsize;
@@ -158,18 +156,17 @@ static int crlf_to_working_tree(const char *path, char **bufp, unsigned long *si
 
 	size = *sizep;
 	if (!size)
-		return 0;
-	buffer = *bufp;
+		return NULL;
 
-	gather_stats(buffer, size, &stats);
+	gather_stats(bufp, size, &stats);
 
 	/* No LF? Nothing to convert, regardless. */
 	if (!stats.lf)
-		return 0;
+		return NULL;
 
 	/* Was it already in CRLF format? */
 	if (stats.lf == stats.crlf)
-		return 0;
+		return NULL;
 
 	if (guess) {
 		/* If we have any bare CR characters, we're not going to touch it */
@@ -185,27 +182,26 @@ static int crlf_to_working_tree(const char *path, char **bufp, unsigned long *si
 	 * to let the caller know that we switched buffers on it.
 	 */
 	nsize = size + stats.lf - stats.crlf;
-	nbuf = xmalloc(nsize);
-	*bufp = nbuf;
+	buffer = nbuf = xmalloc(nsize);
 	*sizep = nsize;
 	last = 0;
 	do {
-		unsigned char c = *buffer++;
+		unsigned char c = *bufp++;
 		if (c == '\n' && last != '\r')
 			*nbuf++ = '\r';
 		*nbuf++ = c;
 		last = c;
 	} while (--size);
 
-	return 1;
+	return buffer;
 }
 
-static int autocrlf_to_working_tree(const char *path, char **bufp, unsigned long *sizep)
+static char *autocrlf_to_working_tree(const char *path, const char *bufp, unsigned long *sizep)
 {
 	return crlf_to_working_tree(path, bufp, sizep, 1);
 }
 
-static int forcecrlf_to_working_tree(const char *path, char **bufp, unsigned long *sizep)
+static char *forcecrlf_to_working_tree(const char *path, const char *bufp, unsigned long *sizep)
 {
 	return crlf_to_working_tree(path, bufp, sizep, 0);
 }
@@ -240,7 +236,7 @@ static int git_path_check_crlf(const char *path)
 	return -1;
 }
 
-int convert_to_git(const char *path, char **bufp, unsigned long *sizep)
+char *convert_to_git(const char *path, const char *bufp, unsigned long *sizep)
 {
 	switch (git_path_check_crlf(path)) {
 	case 0:
@@ -252,7 +248,7 @@ int convert_to_git(const char *path, char **bufp, unsigned long *sizep)
 	}
 }
 
-int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep)
+char *convert_to_working_tree(const char *path, const char *bufp, unsigned long *sizep)
 {
 	switch (git_path_check_crlf(path)) {
 	case 0:
diff --git a/diff.c b/diff.c
index 294183b..3d36ce1 100644
--- a/diff.c
+++ b/diff.c
@@ -1513,9 +1513,9 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
 		/*
 		 * Convert from working tree format to canonical git format
 		 */
-		buf = s->data;
 		size = s->size;
-		if (convert_to_git(s->path, &buf, &size)) {
+		buf = convert_to_git(s->path, s->data, &size);
+		if (buf) {
 			munmap(s->data, s->size);
 			s->should_munmap = 0;
 			s->data = buf;
diff --git a/entry.c b/entry.c
index 50ffae4..84f7802 100644
--- a/entry.c
+++ b/entry.c
@@ -82,7 +82,7 @@ static int write_entry(struct cache_entry *ce, char *path, struct checkout *stat
 
 	switch (ntohl(ce->ce_mode) & S_IFMT) {
 		char *buf, *new;
-		unsigned long size, nsize;
+		unsigned long size;
 
 	case S_IFREG:
 		new = read_blob_entry(ce, path, &size);
@@ -103,12 +103,10 @@ static int write_entry(struct cache_entry *ce, char *path, struct checkout *stat
 		/*
 		 * Convert from git internal format to working tree format
 		 */
-		buf = new;
-		nsize = size;
-		if (convert_to_working_tree(ce->name, &buf, &nsize)) {
+		buf = convert_to_working_tree(ce->name, new, &size);
+		if (buf) {
 			free(new);
 			new = buf;
-			size = nsize;
 		}
 
 		wrote = write_in_full(fd, new, size);
diff --git a/sha1_file.c b/sha1_file.c
index 0c0fcc5..0642664 100644
--- a/sha1_file.c
+++ b/sha1_file.c
@@ -2338,10 +2338,9 @@ int index_fd(unsigned char *sha1, int fd, struct stat *st, int write_object,
 	 */
 	if ((type == OBJ_BLOB) && S_ISREG(st->st_mode)) {
 		unsigned long nsize = size;
-		char *nbuf = buf;
-		if (convert_to_git(path, &nbuf, &nsize)) {
-			if (size)
-				munmap(buf, size);
+		char *nbuf = convert_to_git(path, buf, &nsize);
+		if (nbuf) {
+			munmap(buf, size);
 			size = nsize;
 			buf = nbuf;
 			re_allocated = 1;
-- 
1.5.1.1.916.g7d4b

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-04-22 16:16 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-04-18 22:28 [PATCH] Simplify calling of CR/LF conversion routines Alex Riesen
2007-04-18 23:03 ` Alex Riesen
2007-04-22 13:45 ` Martin Waitz
2007-04-22 16:16   ` Alex Riesen
  -- strict thread matches above, loose matches on Subject: below --
2007-04-19  0:05 Alex Riesen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).