Skip to content

Commit

Permalink
diff --no-index: support /dev/null as filename
Browse files Browse the repository at this point in the history
This allows us to create "new file" and "delete file" patches.
It also cleans up the code.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Johannes Schindelin authored and Junio C Hamano committed Mar 4, 2007
1 parent 3afaa72 commit 0c725f1
Showing 1 changed file with 17 additions and 17 deletions.
34 changes: 17 additions & 17 deletions diff-lib.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,28 +30,28 @@ static int read_directory(const char *path, struct path_list *list)
return 0;
}

static int get_mode(const char *path, int *mode)
{
struct stat st;

if (!path || !strcmp(path, "/dev/null"))
*mode = 0;
else if (!strcmp(path, "-"))
*mode = ntohl(create_ce_mode(0666));
else if (stat(path, &st))
return error("Could not access '%s'", path);
else
*mode = st.st_mode;
return 0;
}

static int queue_diff(struct diff_options *o,
const char *name1, const char *name2)
{
struct stat st;
int mode1 = 0, mode2 = 0;

if (name1) {
if (!strcmp(name1, "-"))
mode1 = ntohl(create_ce_mode(0666));
else if (stat(name1, &st))
return error("Could not access '%s'", name1);
else
mode1 = st.st_mode;
}
if (name2) {
if (!strcmp(name2, "-"))
mode2 = ntohl(create_ce_mode(0666));
else if (stat(name2, &st))
return error("Could not access '%s'", name2);
else
mode2 = st.st_mode;
}
if (get_mode(name1, &mode1) || get_mode(name2, &mode2))
return -1;

if (mode1 && mode2 && S_ISDIR(mode1) != S_ISDIR(mode2))
return error("file/directory conflict: %s, %s", name1, name2);
Expand Down

0 comments on commit 0c725f1

Please sign in to comment.