summaryrefslogtreecommitdiff
path: root/convert.c
diff options
context:
space:
mode:
authorAlex Riesen <raa.lkml@gmail.com>2007-04-19 00:05:03 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-04-21 06:24:34 (GMT)
commitac78e548049f4e86b38368d2c4b4dbb546c64ac6 (patch)
tree37994b847883946eefb34b50d53549335525d428 /convert.c
parent88e7fdf2cb436e068434241b0519577293055c19 (diff)
downloadgit-ac78e548049f4e86b38368d2c4b4dbb546c64ac6.zip
git-ac78e548049f4e86b38368d2c4b4dbb546c64ac6.tar.gz
git-ac78e548049f4e86b38368d2c4b4dbb546c64ac6.tar.bz2
Simplify calling of CR/LF conversion routines
Signed-off-by: Alex Riesen <raa.lkml@gmail.com> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'convert.c')
-rw-r--r--convert.c71
1 files changed, 35 insertions, 36 deletions
diff --git a/convert.c b/convert.c
index da64253..742b895 100644
--- a/convert.c
+++ b/convert.c
@@ -79,25 +79,24 @@ 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 action)
+static char *crlf_to_git(const char *path, const char *src, unsigned long *sizep, int action)
{
- char *buffer, *nbuf;
+ char *buffer, *dst;
unsigned long size, nsize;
struct text_stat stats;
if ((action == CRLF_BINARY) || (action == CRLF_GUESS && !auto_crlf))
- return 0;
+ return NULL;
size = *sizep;
if (!size)
- return 0;
- buffer = *bufp;
+ return NULL;
- gather_stats(buffer, size, &stats);
+ gather_stats(src, size, &stats);
/* No CR? Nothing to convert, regardless. */
if (!stats.cr)
- return 0;
+ return NULL;
if (action == CRLF_GUESS) {
/*
@@ -106,13 +105,13 @@ static int crlf_to_git(const char *path, char **bufp, unsigned long *sizep, int
* 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;
}
/*
@@ -120,10 +119,10 @@ 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 = xmalloc(nsize);
*sizep = nsize;
+ dst = buffer;
if (action == CRLF_GUESS) {
/*
* If we guessed, we already know we rejected a file with
@@ -131,54 +130,53 @@ static int crlf_to_git(const char *path, char **bufp, unsigned long *sizep, int
* follow it.
*/
do {
- unsigned char c = *buffer++;
+ unsigned char c = *src++;
if (c != '\r')
- *nbuf++ = c;
+ *dst++ = c;
} while (--size);
} else {
do {
- unsigned char c = *buffer++;
+ unsigned char c = *src++;
if (! (c == '\r' && (1 < size && *buffer == '\n')))
- *nbuf++ = c;
+ *dst++ = c;
} while (--size);
}
- return 1;
+ return buffer;
}
-static int crlf_to_worktree(const char *path, char **bufp, unsigned long *sizep, int action)
+static char *crlf_to_worktree(const char *path, const char *src, unsigned long *sizep, int action)
{
- char *buffer, *nbuf;
+ char *buffer, *dst;
unsigned long size, nsize;
struct text_stat stats;
unsigned char last;
if ((action == CRLF_BINARY) || (action == CRLF_INPUT) ||
(action == CRLF_GUESS && auto_crlf <= 0))
- return 0;
+ return NULL;
size = *sizep;
if (!size)
- return 0;
- buffer = *bufp;
+ return NULL;
- gather_stats(buffer, size, &stats);
+ gather_stats(src, 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 (action == CRLF_GUESS) {
/* 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;
}
/*
@@ -186,19 +184,20 @@ static int crlf_to_worktree(const char *path, char **bufp, unsigned long *sizep,
* to let the caller know that we switched buffers on it.
*/
nsize = size + stats.lf - stats.crlf;
- nbuf = xmalloc(nsize);
- *bufp = nbuf;
+ buffer = xmalloc(nsize);
*sizep = nsize;
last = 0;
+
+ dst = buffer;
do {
- unsigned char c = *buffer++;
+ unsigned char c = *src++;
if (c == '\n' && last != '\r')
- *nbuf++ = '\r';
- *nbuf++ = c;
+ *dst++ = '\r';
+ *dst++ = c;
last = c;
} while (--size);
- return 1;
+ return buffer;
}
static void setup_crlf_check(struct git_attr_check *check)
@@ -231,12 +230,12 @@ static int git_path_check_crlf(const char *path)
return CRLF_GUESS;
}
-int convert_to_git(const char *path, char **bufp, unsigned long *sizep)
+char *convert_to_git(const char *path, const char *src, unsigned long *sizep)
{
- return crlf_to_git(path, bufp, sizep, git_path_check_crlf(path));
+ return crlf_to_git(path, src, sizep, git_path_check_crlf(path));
}
-int convert_to_working_tree(const char *path, char **bufp, unsigned long *sizep)
+char *convert_to_working_tree(const char *path, const char *src, unsigned long *sizep)
{
- return crlf_to_worktree(path, bufp, sizep, git_path_check_crlf(path));
+ return crlf_to_worktree(path, src, sizep, git_path_check_crlf(path));
}