Commit 7c5d249ad3fb6ce3815c1ed5f04bece02a3e7030

Authored by Paulo Marques
Committed by Sam Ravnborg
1 parent af332aa387

kallsyms: remove usage of memmem and _GNU_SOURCE from scripts/kallsyms.c

The only in-kernel user of "memmem" is scripts/kallsyms.c and it only
uses it to find tokens that are 2 bytes in size. It is trivial to
replace it with a simple function that finds 2-byte tokens.

This should help users from systems that don't have the memmem GNU
extension available.

Signed-off-by: Paulo Marques <pmarques@grupopie.com>
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>

Showing 1 changed file with 13 additions and 4 deletions Side-by-side Diff

... ... @@ -24,8 +24,6 @@
24 24 *
25 25 */
26 26  
27   -#define _GNU_SOURCE
28   -
29 27 #include <stdio.h>
30 28 #include <stdlib.h>
31 29 #include <string.h>
... ... @@ -378,6 +376,17 @@
378 376 table_cnt = pos;
379 377 }
380 378  
  379 +static void *find_token(unsigned char *str, int len, unsigned char *token)
  380 +{
  381 + int i;
  382 +
  383 + for (i = 0; i < len - 1; i++) {
  384 + if (str[i] == token[0] && str[i+1] == token[1])
  385 + return &str[i];
  386 + }
  387 + return NULL;
  388 +}
  389 +
381 390 /* replace a given token in all the valid symbols. Use the sampled symbols
382 391 * to update the counts */
383 392 static void compress_symbols(unsigned char *str, int idx)
... ... @@ -391,7 +400,7 @@
391 400 p1 = table[i].sym;
392 401  
393 402 /* find the token on the symbol */
394   - p2 = memmem(p1, len, str, 2);
  403 + p2 = find_token(p1, len, str);
395 404 if (!p2) continue;
396 405  
397 406 /* decrease the counts for this symbol's tokens */
... ... @@ -410,7 +419,7 @@
410 419 if (size < 2) break;
411 420  
412 421 /* find the token on the symbol */
413   - p2 = memmem(p1, size, str, 2);
  422 + p2 = find_token(p1, size, str);
414 423  
415 424 } while (p2);
416 425