Mercurial > hg > toybox
annotate toys/pending/strings.c @ 1349:bf2e5591bdf0 draft
Cleanup strings.
author | Rob Landley <rob@landley.net> |
---|---|
date | Wed, 11 Jun 2014 08:02:55 -0500 |
parents | 3191aa9490aa |
children |
rev | line source |
---|---|
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
1 /*strings.c - print the strings of printable characters in files. |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
2 * |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
3 * Copyright 2014 Kyung-su Kim <kaspyx@gmail.com> |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
4 * Copyright 2014 Kyungwan Han <asura321@gmail.com> |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
5 * |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
6 * No Standard |
1349 | 7 * TODO: utf8 strings |
8 * TODO: posix -t | |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
9 |
1349 | 10 USE_STRINGS(NEWTOY(strings, "an#=4<1fo", TOYFLAG_USR|TOYFLAG_BIN)) |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
11 |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
12 config STRINGS |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
13 bool "strings" |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
14 default n |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
15 help |
1349 | 16 usage: strings [-fo] [-n LEN] [FILE...] |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
17 |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
18 Display printable strings in a binary file |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
19 |
1349 | 20 -f Precede strings with filenames |
21 -n At least LEN characters form a string (default 4) | |
22 -o Precede strings with decimal offsets | |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
23 */ |
1349 | 24 |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
25 #define FOR_strings |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
26 #include "toys.h" |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
27 |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
28 GLOBALS( |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
29 long num; |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
30 ) |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
31 |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
32 void do_strings(int fd, char *filename) |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
33 { |
1349 | 34 int nread, i, wlen = TT.num, count = 0; |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
35 off_t offset = 0; |
1349 | 36 char *string = xzalloc(wlen + 1); |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
37 |
1349 | 38 for (;;) { |
39 nread = read(fd, toybuf, sizeof(toybuf)); | |
40 if (nread < 0) perror_msg("%s", filename); | |
41 if (nread < 1) break; | |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
42 for (i = 0; i < nread; i++, offset++) { |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
43 if (((toybuf[i] >= 32) && (toybuf[i] <= 126)) || (toybuf[i] == '\t')) { |
1349 | 44 if (count == wlen) fputc(toybuf[i], stdout); |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
45 else { |
1349 | 46 string[count++] = toybuf[i]; |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
47 if (count == wlen) { |
1349 | 48 if (toys.optflags & FLAG_f) printf("%s: ", filename); |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
49 if (toys.optflags & FLAG_o) |
1349 | 50 printf("%7lld ",(long long)(offset - wlen)); |
51 printf("%s", string); | |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
52 } |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
53 } |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
54 } else { |
1349 | 55 if (count == wlen) xputc('\n'); |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
56 count = 0; |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
57 } |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
58 } |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
59 } |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
60 xclose(fd); |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
61 free(string); |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
62 } |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
63 |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
64 void strings_main(void) |
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
65 { |
1349 | 66 loopfiles(toys.optargs, do_strings); |
1324
3191aa9490aa
strings - print the strings in the file.
Ashwini Sharma <ak.ashwini1981@gmail.com>
parents:
diff
changeset
|
67 } |