On Thu, 3 Apr 2014, Xin LI wrote:

Log:
 Implement GNU's extension of 'status' operand.  The GNU syntax is
 borrowed where syntax status=noxfer means no transfer statistics
 and status=none means no status information at all.

 This feature is useful because the statistics information can
 sometimes be annoying, and redirecting stderr to /dev/null would
 mean error messages also gets silenced.

 Obtained from: OpenBSD
 MFC after:     2 weeks
...
Modified: head/bin/dd/dd.h
==============================================================================
--- head/bin/dd/dd.h    Wed Apr  2 23:07:15 2014        (r264058)
+++ head/bin/dd/dd.h    Thu Apr  3 00:55:16 2014        (r264059)
@@ -68,32 +68,35 @@ typedef struct {
} STAT;

/* Flags (in ddflags). */
-#define        C_ASCII         0x00001
-#define        C_BLOCK         0x00002

The table should have been reformatted separately, or better not at all.

-#define        C_BS            0x00004
-#define        C_CBS           0x00008
-#define        C_COUNT         0x00010
-#define        C_EBCDIC        0x00020
-#define        C_FILES         0x00040
-#define        C_IBS           0x00080
-#define        C_IF            0x00100
-#define        C_LCASE         0x00200
-#define        C_NOERROR       0x00400
-#define        C_NOTRUNC       0x00800
-#define        C_OBS           0x01000
-#define        C_OF            0x02000
-#define        C_OSYNC         0x04000
-#define        C_PAREVEN       0x08000
-#define        C_PARNONE       0x100000

The previous formatting was not too good, and obfuscated a bug here.
4 bits are unused.  Someone added this bug together with many others
in 2004, and I missed it then when I committed a fix for the others.
Most of the bugs that I fixed were unsorting of the table by adding
to its end.  Insertion sort tends to give large churn of the table by
changing all the numbers, but for the 2004 fix there wasn't much churn
except relative to the unsorted version because all the changes were
near the end.

-#define        C_PARODD        0x200000
-#define        C_PARSET        0x400000
-#define        C_SEEK          0x800000
-#define        C_SKIP          0x1000000
-#define        C_SPARSE        0x2000000
-#define        C_SWAB          0x4000000
-#define        C_SYNC          0x8000000
-#define        C_UCASE         0x10000000
-#define        C_UNBLOCK       0x20000000
-#define        C_FILL          0x40000000
+#define        C_ASCII         0x000000001
+#define        C_BLOCK         0x000000002
+#define        C_BS            0x000000004
+#define        C_CBS           0x000000008
+#define        C_COUNT         0x000000010
+#define        C_EBCDIC        0x000000020
+#define        C_FILES         0x000000040
+#define        C_IBS           0x000000080
+#define        C_IF            0x000000100
+#define        C_LCASE         0x000000200
+#define        C_NOERROR       0x000000400
+#define        C_NOTRUNC       0x000000800
+#define        C_OBS           0x000001000
+#define        C_OF            0x000002000
+#define        C_OSYNC         0x000004000
+#define        C_PAREVEN       0x000008000
+#define        C_PARNONE       0x000100000
+#define        C_PARODD        0x000200000
+#define        C_PARSET        0x000400000
+#define        C_SEEK          0x000800000
+#define        C_SKIP          0x001000000
+#define        C_SPARSE        0x002000000
+#define        C_SWAB          0x004000000
+#define        C_SYNC          0x008000000
+#define        C_UCASE         0x010000000
+#define        C_UNBLOCK       0x020000000

Unsorting of the table continued from here after I stopped policing the
order.

+#define        C_FILL          0x040000000
+#define        C_STATUS        0x080000000

The above 2 unsorted entries are old, but reformatting in this commit
obfuscates the change.

+#define        C_NOXFER        0x100000000
+#define        C_NOINFO        0x200000000

Latest unsorting.

The 2 values above UINT_MAX also won't compile with compilers that warn
that 'integer constant is too large for "long" type'.  Mainly gcc without
-std=c99.  clang is too incompatible to warn about this even with
-std=c89 -Wall.  The fix is not to further churn the table by adding
a ULL suffix to all entries.


#define C_PARITY        (C_PAREVEN | C_PARODD | C_PARNONE | C_PARSET)

Modified: head/bin/dd/extern.h
==============================================================================
--- head/bin/dd/extern.h        Wed Apr  2 23:07:15 2014        (r264058)
+++ head/bin/dd/extern.h        Thu Apr  3 00:55:16 2014        (r264059)
@@ -53,7 +53,7 @@ extern STAT st;
extern void (*cfunc)(void);
extern uintmax_t cpy_cnt;
extern size_t cbsz;
-extern u_int ddflags;
+extern u_int64_t ddflags;

Not needed when the unused bits in the first 32 are used.  There are only
30 flags now.

extern uintmax_t files_cnt;
extern const u_char *ctab;
extern const u_char a2e_32V[], a2e_POSIX[];


Bruce
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to