iuse strncpy and a null terminator, use strncacestr - iomenu - interactive terminal-based selection menu Err bitreich.org 70 hgit clone git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu URL:git://bitreich.org/iomenu git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/iomenu bitreich.org 70 1Log /scm/iomenu/log.gph bitreich.org 70 1Files /scm/iomenu/files.gph bitreich.org 70 1Refs /scm/iomenu/refs.gph bitreich.org 70 1Tags /scm/iomenu/tag bitreich.org 70 1README /scm/iomenu/file/README.gph bitreich.org 70 1LICENSE /scm/iomenu/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 9adba189e74c6b6752d04f8e6954177b35a99bbd /scm/iomenu/commit/9adba189e74c6b6752d04f8e6954177b35a99bbd.gph bitreich.org 70 1parent c1f1cc577680699b8fe524d33d7de2e6d2bfe173 /scm/iomenu/commit/c1f1cc577680699b8fe524d33d7de2e6d2bfe173.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sun, 31 Dec 2017 18:30:56 +0100 Err bitreich.org 70 i Err bitreich.org 70 iuse strncpy and a null terminator, use strncacestr Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M iomenu.c | 32 +++++++++++++++++++++++++++---- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 28 insertions(+), 4 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/iomenu.c b/iomenu.c /scm/iomenu/file/iomenu.c.gph bitreich.org 70 i@@ -33,6 +33,27 @@ char input[LINE_MAX], formatted[LINE_MAX * 8]; Err bitreich.org 70 i char *flag_p = ""; Err bitreich.org 70 i int flag_hs = 0; Err bitreich.org 70 i Err bitreich.org 70 i+static char * Err bitreich.org 70 i+strcasestr(const char *str1, const char *str2) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ const char *s1; Err bitreich.org 70 i+ const char *s2; Err bitreich.org 70 i+ Err bitreich.org 70 i+ while (1) { Err bitreich.org 70 i+ s1 = str1; Err bitreich.org 70 i+ s2 = str2; Err bitreich.org 70 i+ while (*s1 != '\0' && tolower(*s1) == tolower(*s2)) Err bitreich.org 70 i+ s1++, s2++; Err bitreich.org 70 i+ if (*s2 == '\0') Err bitreich.org 70 i+ return (char *) str1; Err bitreich.org 70 i+ if (*s1 == '\0') Err bitreich.org 70 i+ return NULL; Err bitreich.org 70 i+ str1++; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ Err bitreich.org 70 i+ return NULL; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i /* Err bitreich.org 70 i * Keep the line if it match every token (in no particular order, and allowed to Err bitreich.org 70 i * be overlapping). Err bitreich.org 70 i@@ -43,7 +64,7 @@ match_line(char *line, char **tokv, int tokc) Err bitreich.org 70 i if (flag_hs && line[0] == '#') Err bitreich.org 70 i return 2; Err bitreich.org 70 i while (tokc-- > 0) Err bitreich.org 70 i- if (strstr(line, tokv[tokc]) == NULL) Err bitreich.org 70 i+ if (strcasestr(line, tokv[tokc]) == NULL) Err bitreich.org 70 i return 0; Err bitreich.org 70 i return 1; Err bitreich.org 70 i } Err bitreich.org 70 i@@ -143,7 +164,8 @@ filter(void) Err bitreich.org 70 i Err bitreich.org 70 i tokv = NULL; Err bitreich.org 70 i cur = 0; Err bitreich.org 70 i- strcpy(buf, input); Err bitreich.org 70 i+ strncpy(buf, input, sizeof(input)); Err bitreich.org 70 i+ buf[sizeof(input) - 1] = '\0'; Err bitreich.org 70 i tokc = 0; Err bitreich.org 70 i n = 0; Err bitreich.org 70 i s = strtok(buf, " "); Err bitreich.org 70 i@@ -286,8 +308,10 @@ top: Err bitreich.org 70 i move_page(+1); Err bitreich.org 70 i break; Err bitreich.org 70 i case CTL('I'): /* tab */ Err bitreich.org 70 i- if (linec > 0) Err bitreich.org 70 i- strcpy(input, matchv[cur]); Err bitreich.org 70 i+ if (linec > 0) { Err bitreich.org 70 i+ strncpy(input, matchv[cur], sizeof(input)); Err bitreich.org 70 i+ input[sizeof(input) - 1] = '\0'; Err bitreich.org 70 i+ } Err bitreich.org 70 i filter(); Err bitreich.org 70 i break; Err bitreich.org 70 i case CTL('J'): /* enter */ Err bitreich.org 70 .