]> granicus.if.org Git - sysstat/commitdiff
sar: make buffers that hold timestamps bigger
authorMichal Sekletar <msekleta@redhat.com>
Fri, 30 Sep 2016 16:05:44 +0000 (18:05 +0200)
committerMichal Sekletar <msekleta@redhat.com>
Fri, 30 Sep 2016 16:21:18 +0000 (18:21 +0200)
On systems that use Korean UTF-8 locale sar will not print timestamp
because there is not enough space in the buffer.

I bumped buffer size to 64 bytes because I figured out that 32 bytes is
still not enough to print out timestamp when using some glibc supported
locales.

$ LC_TIME=ko_KR.UTF-8 ./sar 1 1

Before:
Linux 4.7.2-201.fc24.x86_64 (morgoth.usersys.redhat.com)        2016년 09월 30일   _x86_64_        (4 CPU)

                CPU     %user     %nice   %system   %iowait    %steal     %idle
                all      4.51      0.00      2.51      0.00      0.00     92.98
Average:        all      4.51      0.00      2.51      0.00      0.00     92.98

After:
Linux 4.7.2-201.fc24.x86_64 (morgoth.usersys.redhat.com)   2016년 09월 30일   _x86_64_        (4 CPU)

18시 18분 36초     CPU     %user     %nice   %system   %iowait    %steal     %idle
18시 18분 37초     all      3.76      0.00      2.26      0.00      0.00     93.98
Average:        all      3.76      0.00      2.26      0.00      0.00     93.98

sa.h
sar.c

diff --git a/sa.h b/sa.h
index 7b57e7f8b86645a76a43527c5efeaa41b097593a..f76ff66aec81ed9f99204342330e5063112c4874 100644 (file)
--- a/sa.h
+++ b/sa.h
 #define BITMAP_SIZE(m) ((((m) + 1) / 8) + 1)
 
 #define UTSNAME_LEN    65
-#define TIMESTAMP_LEN  16
+#define TIMESTAMP_LEN  64
 #define HEADER_LINE_LEN        512
 
 /*
diff --git a/sar.c b/sar.c
index 68985843e8d87a01784baa4e96492b58d0554329..9c4e7e2f195a2219727dd027ea3eab0f28e0abe7 100644 (file)
--- a/sar.c
+++ b/sar.c
@@ -449,14 +449,14 @@ int write_stats(int curr, int read_from_file, long *cnt, int use_tm_start,
                                           &rectime, NULL))
                return 0;
        set_record_timestamp_string(flags, &record_hdr[!curr],
-                                   NULL, timestamp[!curr], 16, &rectime);
+                                   NULL, timestamp[!curr], TIMESTAMP_LEN, &rectime);
 
        /* Get then set current timestamp */
        if (sa_get_record_timestamp_struct(flags + S_F_LOCAL_TIME, &record_hdr[curr],
                                           &rectime, NULL))
                return 0;
        set_record_timestamp_string(flags, &record_hdr[curr],
-                                   NULL, timestamp[curr], 16, &rectime);
+                                   NULL, timestamp[curr], TIMESTAMP_LEN, &rectime);
 
        /* Check if we are beginning a new day */
        if (use_tm_start && record_hdr[!curr].ust_time &&