# HG changeset patch # User mmj # Date 1082655680 -36000 # Node ID 035484b0da60fd0a2d030c895f61a33aa5d650c5 # Parent 65d01831c0eb000caf3929132e423b6969923968 Bye bye readln--you wont be missed. diff -r 65d01831c0eb -r 035484b0da60 include/readln.h --- 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 - * - * $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 - -ssize_t readln(int fd, char *buf, size_t bufsize); - -#endif /* READLN_H */ diff -r 65d01831c0eb -r 035484b0da60 src/Makefile.am --- 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 diff -r 65d01831c0eb -r 035484b0da60 src/Makefile.in --- 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@ diff -r 65d01831c0eb -r 035484b0da60 src/mlmmj-unsubscribe.c --- 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)); } diff -r 65d01831c0eb -r 035484b0da60 src/readln.c --- 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 - * - * $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 -#include -#include -#include -#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; -} diff -r 65d01831c0eb -r 035484b0da60 src/subscriberfuncs.c --- 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 #include #include +#include #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; }