refractored 04-find.c to seperate compilation units

master
Tibor Bizjak 2023-07-22 14:17:28 +02:00
parent ee037ecf6f
commit ff3df46f36
3 changed files with 37 additions and 60 deletions

View File

@ -3,40 +3,13 @@
#include <math.h>
#include <assert.h>
int grep(char pattern[]);
/* grep with graceful buffer overflow */
/* parse and verify arg pattern, pass it to grep */
int main(int argc, char *argv[])
{
/* verify arg is given */
if (argc < 2) {
printf("error: excpected pattern\n");
return -1;
}
char *pattern = argv[1];
/* verify pattern */
char c;
int i;
for (i = 0; (c = pattern[i]) != '\0'; i++)
if (c == '\n') {
printf("error: newline in pattern\n");
return -2;
}
int found = grep(pattern);
printf("found = %d\n", found);
return found;
}
void println(void);
int flush_lnbuff(void);
int getch_lnbuff(void);
/* grep: prints lines containing pattern, returns number of matching lines */
int grep(char *pattern)
/* find: prints lines containing pattern, returns number of matching lines
* gracefully handle line overflow */
int find(char *pattern)
{
int found, i, c;
const int plen = strlen(pattern);

View File

@ -3,39 +3,11 @@
#define MAXLINE 1000 /* maximum input line length */
int grep(char *pattern);
/* somewhat optimized book version of grep */
/* find all lines matching pattern */
int main(int argc, char *argv[])
{
/* verify arg is given */
if (argc < 2) {
printf("error: excpected pattern\n");
return -1;
}
char *pattern = argv[1];
/* verify pattern */
char c;
int i;
for (i = 0; (c = pattern[i]) != '\0'; i++)
if (c == '\n') {
printf("error: newline in pattern\n");
return -2;
}
int found = grep(pattern);
printf("found = %d\n", found);
return found;
}
int getln(char line[], int lim);
int strindex(char source[], char searchfor[], int slen);
/* grep: prints lines containing pattern, returns number of matching lines */
int grep(char *pattern)
/* find: prints lines containing pattern, returns number of matching lines */
int find(char *pattern)
{
char line[MAXLINE];
int found = 0;

View File

@ -0,0 +1,32 @@
#include <stdio.h>
/* compile with 04-find-no-overflow.c or 04-find-opt.c
* gcc 04-find.c [04-find-no-overflow.c | 04-find-opt.c] */
int find(char *pattern);
/* find pattern given by first arg in lines and print them
* compile with 04-find-no-overflow.c or 04-find-opt.c */
int main(int argc, char *argv[])
{
/* verify arg is given */
if (argc < 2) {
printf("error: excpected pattern\n");
return -1;
}
char *pattern = argv[1];
/* verify pattern */
char c;
int i;
for (i = 0; (c = pattern[i]) != '\0'; i++)
if (c == '\n') {
printf("error: newline in pattern\n");
return -2;
}
int found = find(pattern);
printf("found = %d\n", found);
return found;
}