time_t strtotimet(const char *np, const char **errpp);
bool lock(int fd, bool write);
bool find_email(strlist *list, strlist *matches, const char *delim, char **recipextra);
+char *readlf(int fd, bool online);
ctrlval(int ctrlfd, const char *ctrlstr, int oneline)
{
int fd;
- FILE *fp;
- size_t bufcap = 0;
- ssize_t buflen;
- char *buf = NULL;
if(ctrlfd < 0)
return NULL;
if (fd == -1)
return (NULL);
- fp = fdopen(fd, "r");
- if (fp == NULL) {
- close(ctrlfd);
- return (NULL);
- }
-
- if (oneline) {
- buflen = getline(&buf, &bufcap, fp);
- if (buflen > 0)
- chomp(buf);
- } else {
- buflen = getdelim(&buf, &bufcap, EOF, fp);
- }
- fclose(fp);
- if (buflen < 0) {
- free(buf);
- buf = NULL;
- }
-
- return (buf);
+ return (readlf(fd, oneline));
}
char *
#include "xmalloc.h"
#include "utils.h"
#include "getlistdelim.h"
+#include "chomp.h"
extern char **environ;
return false;
}
+char *
+readlf(int fd, bool oneline)
+{
+ FILE *fp;
+ size_t bufcap = 0;
+ ssize_t buflen;
+ char *buf = NULL;
+
+ fp = fdopen(fd, "r");
+ if (fp == NULL) {
+ close(fd);
+ return (NULL);
+ }
+
+ if (oneline) {
+ buflen = getline(&buf, &bufcap, fp);
+ if (buflen > 0)
+ chomp(buf);
+ } else {
+ buflen = getdelim(&buf, &bufcap, EOF, fp);
+ }
+ fclose(fp);
+ if (buflen < 0) {
+ free(buf);
+ buf = NULL;
+ }
+ return (buf);
+}
ATF_TC_WITHOUT_HEAD(send_help);
ATF_TC_WITHOUT_HEAD(requeuemail);
ATF_TC_WITHOUT_HEAD(gethdrline);
+ATF_TC_WITHOUT_HEAD(readlf);
ATF_TC_BODY(random_int, tc)
{
fclose(f);
}
+ATF_TC_BODY(readlf, tc)
+{
+ ATF_REQUIRE(readlf(-1, true) == NULL);
+}
+
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, random_int);
ATF_TP_ADD_TC(tp, send_help);
ATF_TP_ADD_TC(tp, requeuemail);
ATF_TP_ADD_TC(tp, gethdrline);
+ ATF_TP_ADD_TC(tp, readlf);
return (atf_no_error());
}