summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2014-05-02 01:23:21 +0100
committerPádraig Brady <P@draigBrady.com>2014-05-02 02:02:20 +0100
commitbe9f38bf6c7c228bc0d749703060228b16793167 (patch)
treed006fc1e14882ff39a258e6016c0cfcb839aabc6
parent10a96524355775e6d8533555f185656c7f29075c (diff)
downloadcoreutils-be9f38bf6c7c228bc0d749703060228b16793167.tar.xz
numfmt: improve processing throughput by 800%
The devmsg() calls that took quote_n() arguments, didn't normally output anything, but still incurred the overhead of those quote_n() calls. * src/numfmt.c (devmsg): Move the inline function with _internal_ enablement check to... * src/system.h: ...here as a variadic macro, with the enablement check at the outer level. * src/factor.c: As per numfmt.c but there is no performance change in this case. * NEWS: Mention the significant performance improvement.
-rw-r--r--NEWS1
-rw-r--r--src/factor.c16
-rw-r--r--src/numfmt.c16
-rw-r--r--src/system.h10
4 files changed, 11 insertions, 32 deletions
diff --git a/NEWS b/NEWS
index 92ab59df4..50303f99a 100644
--- a/NEWS
+++ b/NEWS
@@ -68,6 +68,7 @@ GNU coreutils NEWS -*- outline -*-
numfmt supports zero padding of numbers using the standard printf
syntax of a leading zero, for example --format="%010f".
+ Also throughput was improved by up to 800% by avoiding redundant processing.
shred now supports multiple passes on GNU/Linux tape devices by rewinding
the tape before each pass, avoids redundant writes to empty files,
diff --git a/src/factor.c b/src/factor.c
index c55edb894..63924d545 100644
--- a/src/factor.c
+++ b/src/factor.c
@@ -689,22 +689,6 @@ verify (W <= WIDE_UINT_BITS);
This flag is used only in the GMP code. */
static bool dev_debug = false;
-/* Like error(0, 0, ...), but without an implicit newline.
- Also a noop unless the global DEV_DEBUG is set.
- TODO: Replace with variadic macro in system.h or
- move to a separate module. */
-static inline void
-devmsg (char const *fmt, ...)
-{
- if (dev_debug)
- {
- va_list ap;
- va_start (ap, fmt);
- vfprintf (stderr, fmt, ap);
- va_end (ap);
- }
-}
-
/* Prove primality or run probabilistic tests. */
static bool flag_prove_primality = true;
diff --git a/src/numfmt.c b/src/numfmt.c
index c7448752c..e8f53fc3f 100644
--- a/src/numfmt.c
+++ b/src/numfmt.c
@@ -198,22 +198,6 @@ static int decimal_point_length;
/* debugging for developers. Enables devmsg(). */
static bool dev_debug = false;
-/* Like error(0, 0, ...), but without an implicit newline.
- Also a noop unless the global DEV_DEBUG is set.
- TODO: Replace with variadic macro in system.h or
- move to a separate module. */
-static inline void
-devmsg (char const *fmt, ...)
-{
- if (dev_debug)
- {
- va_list ap;
- va_start (ap, fmt);
- vfprintf (stderr, fmt, ap);
- va_end (ap);
- }
-}
-
static inline int
default_scale_base (enum scale_type scale)
{
diff --git a/src/system.h b/src/system.h
index a9588e779..f295ad1c2 100644
--- a/src/system.h
+++ b/src/system.h
@@ -617,6 +617,16 @@ usable_st_size (struct stat const *sb)
void usage (int status) ATTRIBUTE_NORETURN;
+/* Like error(0, 0, ...), but without an implicit newline.
+ Also a noop unless the global DEV_DEBUG is set. */
+#define devmsg(...) \
+ do \
+ { \
+ if (dev_debug) \
+ fprintf (stderr, __VA_ARGS__); \
+ } \
+ while (0)
+
#define emit_cycle_warning(file_name) \
do \
{ \