+++ /dev/null
-/* 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 */
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
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)
@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) \
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
@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@
#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"
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));
}
+++ /dev/null
-/* 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;
-}
#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;
}