Mercurial > hg > mlmmj
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; }