"Fossies" - the Fresh Open Source Software Archive 
Member "chkrootkit-0.57/strings.c" (16 Jun 2022, 2531 Bytes) of package /linux/misc/chkrootkit-0.57.tar.gz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "strings.c" see the
Fossies "Dox" file reference documentation and the last
Fossies "Diffs" side-by-side code changes report:
0.51_vs_0.52.
1 /*
2 * Poor developer's strings.
3 * (c) 2002, Sean D. True, WebReply.Com, Inc.
4 * Use freely, under the Python license
5 * In short: use with or without attribution as you like, but
6 * no warranty of fitness, suitability, or anything else is given!
7 *
8 * ChangeLog:
9 * superfluous printable() function deleted - 2002/02/20 - Nelson Murilo
10 */
11
12 #include <stdio.h>
13 #include <strings.h>
14 #include <sys/types.h>
15 #include <sys/stat.h>
16 #include <ctype.h>
17 #include <stdlib.h>
18 #ifdef __FreeBSD__
19 #include <string.h>
20 #endif
21 #ifdef __linux__
22 #include <string.h>
23 #endif
24
25 #define MAXFILESIZE (4*1024*1024)
26
27 /*
28 * Many options here. The current choice produces a little more output
29 * than gnu strings
30 */
31
32 /*
33 * Try to get the filesize via stat, and get a buffer to match
34 * Naievely allocate a 4MB buffer if we can't
35 * Fails badly if it allocate a buffer big enough to load a file
36 */
37 unsigned char *filebuf(FILE *pf, int *sz) {
38 struct stat buf;
39 unsigned char *cdata;
40
41 if (fstat(fileno(pf), &buf) < 0) {
42 perror("fstat");
43 exit (1);
44 }
45
46 *sz = buf.st_size;
47 if(*sz == 0) *sz = MAXFILESIZE;
48
49 if ((cdata = malloc(*sz+1)) == NULL) {
50 perror("malloc");
51 exit (1);
52 }
53 return cdata;
54 }
55
56 /*
57 * Find printable strings of 4 or more characters
58 * Always scans entire file (-a option of gnu strings)
59 */
60 void strings(FILE *pf) {
61 static char printme[1024];
62 int sz;
63 unsigned char *cdata;
64 int nread;
65 int printmeindex;
66 cdata = filebuf(pf,&sz);
67 nread = fread(cdata, 1, sz, pf);
68 printmeindex = 0;
69 if (nread > 0) {
70 int i;
71 unsigned char c;
72 int isprintable;
73 int iseol;
74 for (i = 0; i < nread; i++) {
75 c = cdata[i];
76 isprintable = isprint(c);
77 iseol = 0;
78 if (c == 0 || c == '\n' || printmeindex >= sizeof(printme)-1) iseol = 1;
79 if (iseol || !isprintable) {
80 if (printmeindex > 3 && iseol) {
81 printme[printmeindex++] = 0;
82 printf("%s\n", printme);
83 printmeindex = 0;
84 }
85 }
86 else if (isprintable) {
87 printme[printmeindex++] = c;
88 }
89 }
90 }
91 if (printmeindex > 3) {
92 printme[printmeindex++] = 0;
93 printf("%s\n", printme);
94 printmeindex = 0;
95 }
96 free(cdata);
97 }
98
99 /*
100 * Silently accepts the -a option
101 */
102 int main(int argc, char **argv)
103 {
104 if (argc > 1) {
105 int i;
106 for (i = 1; i < argc; i++) {
107 FILE *pf;
108 if (strcmp(argv[i], "-a") == 0) continue;
109
110 if ((pf = fopen(argv[i],"rb")) == NULL) {
111 perror("fopen");
112 return(1);
113 }
114 strings(pf);
115 }
116 }
117 else {
118 strings(stdin);
119 }
120 return(0);
121 }