char *name;
int fd;
- if (S_ISREG(sb->st_mode))
+ if (S_ISREG(sb->st_mode) || S_ISBLK(sb->st_mode))
return NULL;
name = xstrdup("/tmp/difXXXXXX");
fd = mkstemp(name);
{
size_t i, j;
+ /* Prevent making copies for "/dev/null" (too common) */
+ tempname1 = tempname2 = NULL;
+ if (flags & (D_EMPTY1 | D_EMPTY2)) {
+ return 1;
+ }
+ /* Deal with input from pipes etc */
tempname1 = make_temp(f1, &stb1);
tempname2 = make_temp(f2, &stb2);
- if ((flags & (D_EMPTY1 | D_EMPTY2)) || stb1.st_size != stb2.st_size) {
+ if (stb1.st_size != stb2.st_size) {
return 1;
}
while (1) {
J[i] = 0;
if (c != '\n' && c != EOF)
ctold += skipline(f1);
-// BUG? Should be "if (d != '\n' && d != EOF)" ?
- if (d != '\n' && c != EOF)
+/* was buggy? "if (d != '\n' && c != EOF)" */
+ if (d != '\n' && d != EOF)
ctnew += skipline(f2);
break;
}