changeset 26:035484b0da60

Bye bye readln--you wont be missed.
author mmj
date Fri, 23 Apr 2004 03:41:20 +1000
parents 65d01831c0eb
children 91830455b49c
files include/readln.h src/Makefile.am src/Makefile.in src/mlmmj-unsubscribe.c src/readln.c src/subscriberfuncs.c
diffstat 6 files changed, 45 insertions(+), 87 deletions(-) [+]
line wrap: on
line diff
--- a/include/readln.h	Fri Apr 23 01:38:55 2004 +1000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-/* Copyright (C) 2002, 2003 Mads Martin Joergensen <mmj at mmj.dk>
- *
- * $Id$
- *
- * This file is redistributable under version 2 of the GNU General
- * Public License as described at http://www.gnu.org/licenses/gpl.txt
- */
-
-#ifndef READLN_H
-#define READLN_H
-
-#include <sys/types.h>
-
-ssize_t readln(int fd, char *buf, size_t bufsize);
-
-#endif /* READLN_H */
--- a/src/Makefile.am	Fri Apr 23 01:38:55 2004 +1000
+++ b/src/Makefile.am	Fri Apr 23 03:41:20 2004 +1000
@@ -30,9 +30,9 @@
 
 mlmmj_subscribe_SOURCES = mlmmj-subscribe.c writen.c mylocking.c \
 			getlistaddr.c chomp.c random-int.c strgen.c \
-			subscriberfuncs.c readln.c print-version.c \
-			log_error.c
+			subscriberfuncs.c print-version.c \
+			log_error.c mygetline.c
 
-mlmmj_unsubscribe_SOURCES = mlmmj-unsubscribe.c writen.c readln.c mylocking.c\
+mlmmj_unsubscribe_SOURCES = mlmmj-unsubscribe.c writen.c mylocking.c\
 			getlistaddr.c chomp.c subscriberfuncs.c random-int.c \
-			strgen.c print-version.c log_error.c
+			strgen.c print-version.c log_error.c mygetline.c
--- a/src/Makefile.in	Fri Apr 23 01:38:55 2004 +1000
+++ b/src/Makefile.in	Fri Apr 23 03:41:20 2004 +1000
@@ -81,15 +81,15 @@
 am_mlmmj_subscribe_OBJECTS = mlmmj-subscribe.$(OBJEXT) \
 	writen.$(OBJEXT) mylocking.$(OBJEXT) getlistaddr.$(OBJEXT) \
 	chomp.$(OBJEXT) random-int.$(OBJEXT) strgen.$(OBJEXT) \
-	subscriberfuncs.$(OBJEXT) readln.$(OBJEXT) \
-	print-version.$(OBJEXT) log_error.$(OBJEXT)
+	subscriberfuncs.$(OBJEXT) print-version.$(OBJEXT) \
+	log_error.$(OBJEXT) mygetline.$(OBJEXT)
 mlmmj_subscribe_OBJECTS = $(am_mlmmj_subscribe_OBJECTS)
 mlmmj_subscribe_LDADD = $(LDADD)
 am_mlmmj_unsubscribe_OBJECTS = mlmmj-unsubscribe.$(OBJEXT) \
-	writen.$(OBJEXT) readln.$(OBJEXT) mylocking.$(OBJEXT) \
-	getlistaddr.$(OBJEXT) chomp.$(OBJEXT) \
-	subscriberfuncs.$(OBJEXT) random-int.$(OBJEXT) \
-	strgen.$(OBJEXT) print-version.$(OBJEXT) log_error.$(OBJEXT)
+	writen.$(OBJEXT) mylocking.$(OBJEXT) getlistaddr.$(OBJEXT) \
+	chomp.$(OBJEXT) subscriberfuncs.$(OBJEXT) random-int.$(OBJEXT) \
+	strgen.$(OBJEXT) print-version.$(OBJEXT) log_error.$(OBJEXT) \
+	mygetline.$(OBJEXT)
 mlmmj_unsubscribe_OBJECTS = $(am_mlmmj_unsubscribe_OBJECTS)
 mlmmj_unsubscribe_LDADD = $(LDADD)
 binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
@@ -116,8 +116,8 @@
 @AMDEP_TRUE@	./$(DEPDIR)/mlmmj-unsubscribe.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/mygetline.Po ./$(DEPDIR)/mylocking.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/print-version.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/random-int.Po ./$(DEPDIR)/readln.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/send_help.Po ./$(DEPDIR)/strgen.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/random-int.Po ./$(DEPDIR)/send_help.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/strgen.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/subscriberfuncs.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/writen.Po
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
@@ -224,12 +224,12 @@
 
 mlmmj_subscribe_SOURCES = mlmmj-subscribe.c writen.c mylocking.c \
 			getlistaddr.c chomp.c random-int.c strgen.c \
-			subscriberfuncs.c readln.c print-version.c \
-			log_error.c
+			subscriberfuncs.c print-version.c \
+			log_error.c mygetline.c
 
-mlmmj_unsubscribe_SOURCES = mlmmj-unsubscribe.c writen.c readln.c mylocking.c\
+mlmmj_unsubscribe_SOURCES = mlmmj-unsubscribe.c writen.c mylocking.c\
 			getlistaddr.c chomp.c subscriberfuncs.c random-int.c \
-			strgen.c print-version.c log_error.c
+			strgen.c print-version.c log_error.c mygetline.c
 
 all: all-am
 
@@ -350,7 +350,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mylocking.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print-version.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random-int.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readln.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send_help.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strgen.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subscriberfuncs.Po@am__quote@
--- a/src/mlmmj-unsubscribe.c	Fri Apr 23 01:38:55 2004 +1000
+++ b/src/mlmmj-unsubscribe.c	Fri Apr 23 03:41:20 2004 +1000
@@ -20,7 +20,7 @@
 #include "mlmmj-subscribe.h"
 #include "mylocking.h"
 #include "wrappers.h"
-#include "readln.h"
+#include "mygetline.h"
 #include "getlistaddr.h"
 #include "subscriberfuncs.h"
 #include "strgen.h"
@@ -233,18 +233,22 @@
 
 void unsubscribe(int subreadfd, int subwritefd, const char *address)
 {
-	char buf[4096];
+	char *buf;
+	FILE *subfile;
 
 	lseek(subreadfd, 0, SEEK_SET);
 	lseek(subwritefd, 0, SEEK_SET);
 
-	/* XXX: readln only guarantees to have read a complete line
-	 * when the last char is a newline, so a check should be made
-	 */
-	while(readln(subreadfd, buf, sizeof(buf)) > 0)
+	if((subfile = fdopen(subreadfd, "r")) == NULL) {
+		log_error("could not fdopen subfilefd");
+		exit(EXIT_FAILURE);
+	}
+
+	while((buf = mygetline(subfile))) {
 		if(strncasecmp(buf, address, strlen(address)) != 0)
 			writen(subwritefd, buf, strlen(buf));
-	
+		free(buf);
+	}
 	ftruncate(subwritefd, lseek(subwritefd, 0, SEEK_CUR));
 }
 
--- a/src/readln.c	Fri Apr 23 01:38:55 2004 +1000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,43 +0,0 @@
-/* Copyright (C) 2002, 2003 Mads Martin Joergensen <mmj at mmj.dk>
- *
- * $Id$
- *
- * This file is redistributable under version 2 of the GNU General
- * Public License as described at http://www.gnu.org/licenses/gpl.txt
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <errno.h>
-#include "readln.h"
-
-/*! Read a line from filedescriptor fd. If bufsize-1 have been read and no
- * newline was found, zero terminate it and return. We can only guarantee to
- * have finished reading a line if there's a newline as the last char in the
- * buffer 'buf
- */
-ssize_t readln(int fd, char *buf, size_t bufsize)
-{
-	ssize_t len = 0, rlen = 0;
-
-	do {
-		rlen = read(fd, buf + len, bufsize - len - 1);
-		if(rlen < 0) {
-			if(errno == EINTR)
-				continue;
-			else
-				return -1;
-		} else {
-			if(rlen == 0) {
-				buf[len] = '\0';
-				return len;
-			}
-		}
-		len += rlen;
-	} while(buf[len - 1] != '\n');
-
-	buf[len] = '\0';
-
-	return len;
-}
--- a/src/subscriberfuncs.c	Fri Apr 23 01:38:55 2004 +1000
+++ b/src/subscriberfuncs.c	Fri Apr 23 03:41:20 2004 +1000
@@ -9,21 +9,35 @@
 #include <stdio.h>
 #include <string.h>
 #include <ctype.h>
+#include <stdlib.h>
 
 #include "mlmmj.h"
 #include "subscriberfuncs.h"
-#include "readln.h"
+#include "mygetline.h"
+#include "log_error.h"
 
 int find_subscriber(int subfilefd, const char *address)
 {
-	char buf[READ_BUFSIZE];
+	char *buf;
+	FILE *subfile;
 
-	while (readln(subfilefd, buf, sizeof(buf))) {
+	if((subfile = fdopen(subfilefd, "r")) == NULL) {
+		log_error("could not fdopen subfilefd");
+		exit(EXIT_FAILURE);
+	}
+	
+	while ((buf = mygetline(subfile))) {
 		while (buf[0] && isspace(buf[strlen(buf)-1]))
 			buf[strlen(buf)-1] = '\0';
-		if (strcasecmp(buf, address) == 0)
+		if (strcasecmp(buf, address) == 0) {
+			free(buf);
 			return 0;
 	}
+		free(buf);
+	}
+
+	free(buf);
+	
 	return 1;
 }