blob: dc9c1186b16d79c5357c81c1bc474d232caa8be6 [file] [log] [blame]
From ad557de2c31ac61ef253fc71e3d8a803982e460b Mon Sep 17 00:00:00 2001
From: Avery Pennarun <apenwarr@gmail.com>
Date: Sat, 23 Feb 2013 00:22:01 -0500
Subject: [PATCH] Make it compile on linux.
---
.gitignore | 3 +++
Makefile | 17 ++++++++---------
file.c | 8 +++++++-
grep.c | 7 ++++---
mmfile.c | 2 --
util.c | 8 ++++++++
6 files changed, 30 insertions(+), 15 deletions(-)
create mode 100644 .gitignore
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f806a1a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+*~
+*.o
+grep
diff --git a/Makefile b/Makefile
index 5c066d2..3752f46 100644
--- a/Makefile
+++ b/Makefile
@@ -15,13 +15,12 @@ MLINKS= grep.1 egrep.1 \
grep.1 zegrep.1 \
grep.1 zfgrep.1
-CFLAGS+= -Wall
+CFLAGS+= -Wall -DNOZ -DNOFTS -D_GNU_SOURCE -g
-.if ${OPSYS} == "Minix"
-CPPFLAGS+= -DNOZ -D_POSIX_SOURCE -D_MINIX
-.include <minix.prog.mk>
-.else
-LDADD= -lz
-DPADD= ${LIBZ}
-.include <bsd.prog.mk>
-.endif
+all: grep
+
+grep: $(SRCS)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
+
+clean:
+ rm -f *~ grep *.o
diff --git a/file.c b/file.c
index 1787ac0..b565aab 100644
--- a/file.c
+++ b/file.c
@@ -53,6 +53,8 @@ struct file {
#ifndef NOZ
gzFile *gzf;
#endif
+ char *buf;
+ size_t n;
};
#ifndef NOZ
@@ -133,6 +135,8 @@ grep_open(char *path, char *mode)
f = grep_malloc(sizeof *f);
f->noseek = 0;
+ f->buf = NULL;
+ f->n = 0;
#ifndef NOZ
if (Zflag) {
@@ -182,7 +186,8 @@ grep_fgetln(file_t *f, size_t *l)
{
switch (f->type) {
case FILE_STDIO:
- return fgetln(f->f, l);
+ *l = getline(&f->buf, &f->n, f->f);
+ return (ssize_t)*l >= 0 ? f->buf : NULL;
case FILE_MMAP:
return mmfgetln(f->mmf, l);
#ifndef NOZ
@@ -198,6 +203,7 @@ grep_fgetln(file_t *f, size_t *l)
void
grep_close(file_t *f)
{
+ free(f->buf);
switch (f->type) {
case FILE_STDIO:
fclose(f->f);
diff --git a/grep.c b/grep.c
index b316981..6b0431b 100755
--- a/grep.c
+++ b/grep.c
@@ -218,13 +218,14 @@ static void
read_patterns(const char *fn)
{
FILE *f;
- char *line;
- size_t len;
+ char *line = NULL;
+ size_t n, len;
if ((f = fopen(fn, "r")) == NULL)
err(2, "%s", fn);
- while ((line = fgetln(f, &len)) != NULL)
+ while ((len = getline(&line, &n, f)) >= 0)
add_pattern(line, *line == '\n' ? 0 : len);
+ free(line);
if (ferror(f))
err(2, "%s", fn);
fclose(f);
diff --git a/mmfile.c b/mmfile.c
index aa1a28a..ddf915d 100644
--- a/mmfile.c
+++ b/mmfile.c
@@ -53,8 +53,6 @@ mmopen(char *fn, char *mode)
goto ouch1;
if (fstat(mmf->fd, &st) == -1)
goto ouch2;
- if (st.st_size > SIZE_T_MAX) /* too big to mmap */
- goto ouch2;
if (!S_ISREG(st.st_mode)) /* only mmap regular files */
goto ouch2;
mmf->len = (size_t)st.st_size;
diff --git a/util.c b/util.c
index 028ddc6..fb9e18e 100644
--- a/util.c
+++ b/util.c
@@ -32,7 +32,9 @@
#include <ctype.h>
#include <err.h>
#include <errno.h>
+#ifndef NOFTS
#include <fts.h>
+#endif
#include <regex.h>
#include <stdio.h>
#include <stdlib.h>
@@ -54,6 +56,7 @@ static void grep_revstr(unsigned char *, int);
int
grep_tree(char **argv)
{
+#ifndef NOFTS
FTS *fts;
FTSENT *p;
int c, fts_flags;
@@ -90,6 +93,11 @@ grep_tree(char **argv)
err(2, "fts_read");
return c;
+#else
+ errno = ENOTSUP;
+ warn("recursive mode");
+ return 0;
+#endif
}
int
--
1.7.9.dirty