svn commit: r310871 - user/bapt/diff
Baptiste Daroussin
bapt at FreeBSD.org
Fri Dec 30 23:14:19 UTC 2016
Author: bapt
Date: Fri Dec 30 23:14:18 2016
New Revision: 310871
URL: https://svnweb.freebsd.org/changeset/base/310871
Log:
Make diff -u header printing similar to GNU diff -u
Obtained from: soc2012
Modified:
user/bapt/diff/diff.c
user/bapt/diff/diff.h
user/bapt/diff/diffreg.c
Modified: user/bapt/diff/diff.c
==============================================================================
--- user/bapt/diff/diff.c Fri Dec 30 23:05:06 2016 (r310870)
+++ user/bapt/diff/diff.c Fri Dec 30 23:14:18 2016 (r310871)
@@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
#include "diff.h"
#include "xmalloc.h"
-int lflag, Nflag, Pflag, rflag, sflag, Tflag;
+int lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag;
int diff_format, diff_context, status;
int tabsize = 8;
char *start, *ifdefname, *diffargs, *label[2], *ignore_pats;
@@ -124,6 +124,7 @@ main(int argc, char **argv)
break;
case 'C':
case 'c':
+ cflag = 1;
diff_format = D_CONTEXT;
if (optarg != NULL) {
l = strtol(optarg, &ep, 10);
Modified: user/bapt/diff/diff.h
==============================================================================
--- user/bapt/diff/diff.h Fri Dec 30 23:05:06 2016 (r310870)
+++ user/bapt/diff/diff.h Fri Dec 30 23:14:18 2016 (r310871)
@@ -82,7 +82,7 @@ struct excludes {
struct excludes *next;
};
-extern int lflag, Nflag, Pflag, rflag, sflag, Tflag;
+extern int lflag, Nflag, Pflag, rflag, sflag, Tflag, cflag;
extern int diff_format, diff_context, status;
extern int tabsize;
extern char *start, *ifdefname, *diffargs, *label[2], *ignore_pats;
Modified: user/bapt/diff/diffreg.c
==============================================================================
--- user/bapt/diff/diffreg.c Fri Dec 30 23:05:06 2016 (r310870)
+++ user/bapt/diff/diffreg.c Fri Dec 30 23:14:18 2016 (r310871)
@@ -89,6 +89,12 @@ __FBSDID("$FreeBSD$");
#define _PATH_PR "/usr/bin/pr"
+#ifdef ST_MTIM_NSEC
+# define TIMESPEC_NS(timespec) ((timespec).ST_MTIM_NSEC)
+#else
+# define TIMESPEC_NS(timespec) 0
+#endif
+
#define MINIMUM(a, b) (((a) < (b)) ? (a) : (b))
#define MAXIMUM(a, b) (((a) > (b)) ? (a) : (b))
@@ -1529,16 +1535,43 @@ dump_unified_vec(FILE *f1, FILE *f2, int
static void
print_header(const char *file1, const char *file2)
{
+ const char *time_format;
+ char buf1[256];
+ char buf2[256];
+ char end1[10];
+ char end2[10];
+ struct tm *tm_ptr1, *tm_ptr2;
+ int nsec1 = TIMESPEC_NS (stb1.st_mtime);
+ int nsec2 = TIMESPEC_NS (stb2.st_mtime);
+
+#ifdef ST_MTIM_NSEC
+ time_format = "%Y-%m-%d %H:%M:%S.%N";
+#else
+ time_format = "%Y-%m-%d %H:%M:%S";
+#endif
+
+ if (cflag)
+ time_format = "%c";
+ tm_ptr1 = localtime(&stb1.st_mtime);
+ tm_ptr2 = localtime(&stb2.st_mtime);
+ strftime(buf1, 256, time_format, tm_ptr1);
+ strftime(buf2, 256, time_format, tm_ptr2);
+ if (!cflag) {
+ strftime(end1, 10, "%z", tm_ptr1);
+ strftime(end2, 10, "%z", tm_ptr2);
+ sprintf(buf1, "%s.%.9d %s", buf1, nsec1, end1);
+ sprintf(buf2, "%s.%.9d %s", buf2, nsec2, end2);
+ }
if (label[0] != NULL)
diff_output("%s %s\n", diff_format == D_CONTEXT ? "***" : "---",
label[0]);
else
- diff_output("%s %s\t%s", diff_format == D_CONTEXT ? "***" : "---",
- file1, ctime(&stb1.st_mtime));
+ diff_output("%s %s\t%s\n", diff_format == D_CONTEXT ? "***" : "---",
+ file1, buf1);
if (label[1] != NULL)
diff_output("%s %s\n", diff_format == D_CONTEXT ? "---" : "+++",
label[1]);
else
- diff_output("%s %s\t%s", diff_format == D_CONTEXT ? "---" : "+++",
- file2, ctime(&stb2.st_mtime));
+ diff_output("%s %s\t%s\n", diff_format == D_CONTEXT ? "---" : "+++",
+ file2, buf2);
}
More information about the svn-src-user
mailing list