]> granicus.if.org Git - procps-ng/commitdiff
top: provided for nls table integrity validation
authorJim Warner <james.warner@comcast.net>
Sat, 29 Oct 2011 01:38:08 +0000 (20:38 -0500)
committerCraig Small <csmall@enc.com.au>
Thu, 22 Dec 2011 12:48:05 +0000 (23:48 +1100)
top/top.h
top/top_nls.c

index 866fc5e42c61c5015c473fe53bf761554d9256f6..fdb6449eca8cbfdebec6a76bb6a19ebacc1b67d5 100644 (file)
--- a/top/top.h
+++ b/top/top.h
@@ -41,6 +41,7 @@
 //#define TREE_NORESET            /* sort keys do NOT force forest view OFF  */
 //#define TREE_ONEPASS            /* for speed, tolerate dangling children   */
 //#define USE_X_COLHDR            /* emphasize header vs. whole col, for 'x' */
+//#define VALIDATE_NLS            /* validate integrity of all 3 nls tables  */
 
 
 /*######  Notes, etc.  ###################################################*/
index b9a772c738b412c59a27a7a43ce497f26ae90382..034e7545d33c8a77acaa44b8e757a7d007c6c201 100644 (file)
@@ -589,7 +589,34 @@ static void build_uniq_nsltab (void) {
         /*
          * Duh... */
 void initialize_nsl (void) {
+#ifdef VALIDATE_NLS
+   static const char *nls_err ="\t%s_nlstab[%d] == NULL\n";
+   int i;
+
+   memset(Desc_nlstab, 0, sizeof(Desc_nlstab));
    build_desc_nlstab();
+   for (i = 0; i < P_MAXPFLGS; i++)
+      if (!Desc_nlstab[i]) {
+         fprintf(stderr, nls_err, "Desc", i);
+         exit(1);
+      }
+   memset(Norm_nlstab, 0, sizeof(Norm_nlstab));
    build_norm_nlstab();
+   for (i = 0; i < norm_MAX; i++)
+      if (!Norm_nlstab[i]) {
+         fprintf(stderr, nls_err, "Norm", i);
+         exit(1);
+      }
+   memset(Uniq_nlstab, 0, sizeof(Uniq_nlstab));
    build_uniq_nsltab();
+   for (i = 0; i < uniq_MAX; i++)
+      if (!Uniq_nlstab[i]) {
+         fprintf(stderr, nls_err, "Uniq", i);
+         exit(1);
+      }
+#else
+   build_desc_nlstab();
+   build_norm_nlstab();
+   build_uniq_nsltab();
+#endif
 }