Browse Source

Merge topic 'reduce-strcpy'

e43cb4c1 CursesDialog: avoid calling strcpy()

Acked-by: Kitware Robot <[email protected]>
Merge-request: !1311
Brad King 8 years ago
parent
commit
2c50f7a795
1 changed files with 16 additions and 33 deletions
  1. 16 33
      Source/CursesDialog/cmCursesMainForm.cxx

+ 16 - 33
Source/CursesDialog/cmCursesMainForm.cxx

@@ -17,6 +17,7 @@
 #include "cmVersion.h"
 #include "cmake.h"
 
+#include <algorithm>
 #include <stdio.h>
 #include <string.h>
 
@@ -353,11 +354,9 @@ void cmCursesMainForm::PrintKeys(int process /* = 0 */)
     char secondLine[512] = "";
     char thirdLine[512] = "";
     if (process) {
-      const char* clearLine =
-        "                                                                    ";
-      strcpy(firstLine, clearLine);
-      strcpy(secondLine, clearLine);
-      strcpy(thirdLine, clearLine);
+      memset(firstLine, ' ', 68);
+      memset(secondLine, ' ', 68);
+      memset(thirdLine, ' ', 68);
     } else {
       if (this->OkToGenerate) {
         sprintf(firstLine,
@@ -380,7 +379,7 @@ void cmCursesMainForm::PrintKeys(int process /* = 0 */)
     char fmt[512] =
       "Press [enter] to edit option Press [d] to delete an entry";
     if (process) {
-      strcpy(fmt, "                           ");
+      memset(fmt, ' ', 27);
     }
     printw(fmt_s, fmt);
     curses_move(y - 3, 0);
@@ -456,41 +455,27 @@ void cmCursesMainForm::UpdateStatusBar(const char* message)
   // Join the key, help string and pad with spaces
   // (or truncate) as necessary
   char bar[cmCursesMainForm::MAX_WIDTH];
-  size_t i, curFieldLen = strlen(curField);
+  size_t curFieldLen = strlen(curField);
   size_t helpLen = strlen(help);
 
-  size_t width;
-  if (x < cmCursesMainForm::MAX_WIDTH) {
-    width = x;
-  } else {
-    width = cmCursesMainForm::MAX_WIDTH;
-  }
+  size_t width = std::min<size_t>(x, cmCursesMainForm::MAX_WIDTH);
 
   if (message) {
     curField = message;
     curFieldLen = strlen(message);
+    strncpy(bar, curField, width);
     if (curFieldLen < width) {
-      strcpy(bar, curField);
-      for (i = curFieldLen; i < width; ++i) {
-        bar[i] = ' ';
-      }
-    } else {
-      strncpy(bar, curField, width);
+      memset(bar + curFieldLen, ' ', width - curFieldLen);
     }
   } else {
-    if (curFieldLen >= width) {
-      strncpy(bar, curField, width);
-    } else {
-      strcpy(bar, curField);
+    strncpy(bar, curField, width);
+    if (curFieldLen < width) {
       bar[curFieldLen] = ':';
       bar[curFieldLen + 1] = ' ';
-      if (curFieldLen + helpLen + 2 >= width) {
-        strncpy(bar + curFieldLen + 2, help, width - curFieldLen - 2);
-      } else {
-        strcpy(bar + curFieldLen + 2, help);
-        for (i = curFieldLen + helpLen + 2; i < width; ++i) {
-          bar[i] = ' ';
-        }
+      strncpy(bar + curFieldLen + 2, help, width - curFieldLen - 2);
+      if (curFieldLen + helpLen + 2 < width) {
+        memset(bar + curFieldLen + helpLen + 2, ' ',
+               width - curFieldLen + helpLen + 2);
       }
     }
   }
@@ -503,9 +488,7 @@ void cmCursesMainForm::UpdateStatusBar(const char* message)
   char vertmp[128];
   sprintf(vertmp, "CMake Version %s", cmVersion::GetCMakeVersion());
   size_t sideSpace = (width - strlen(vertmp));
-  for (i = 0; i < sideSpace; i++) {
-    version[i] = ' ';
-  }
+  memset(version, ' ', sideSpace);
   sprintf(version + sideSpace, "%s", vertmp);
   version[width] = '\0';