summaryrefslogtreecommitdiff
path: root/auth
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2003-08-28 21:54:06 +0000
committerSergey Poznyakoff <gray@gnu.org.ua>2003-08-28 21:54:06 +0000
commitcb24761827f2e55a8f3297a6ddd78a0d52f8908a (patch)
treedf7798e9fbae72d1011a9ac98a403bbec39bb6ad /auth
parentb637f9c86863130e5d2dc22777c1ada65ab37f9c (diff)
downloadmailutils-cb24761827f2e55a8f3297a6ddd78a0d52f8908a.tar.gz
mailutils-cb24761827f2e55a8f3297a6ddd78a0d52f8908a.tar.bz2
(_auth_lb_writelines): New function.
Diffstat (limited to 'auth')
-rw-r--r--auth/lbuf.c41
-rw-r--r--auth/lbuf.h39
2 files changed, 71 insertions, 9 deletions
diff --git a/auth/lbuf.c b/auth/lbuf.c
index 2f2322833..3d41b9851 100644
--- a/auth/lbuf.c
+++ b/auth/lbuf.c
@@ -110,7 +110,46 @@ _auth_lb_readline (struct _line_buffer *s, const char *ptr, size_t size)
size = p - s->buffer + 1;
return _auth_lb_read (s, ptr, size);
}
-
+
+int
+_auth_lb_writelines (struct _line_buffer *s, const char *iptr, size_t isize,
+ off_t offset,
+ int (*wr) (void *data, char *start, char *end),
+ void *data,
+ size_t *nbytes)
+{
+ if (s->level > 2)
+ {
+ char *start, *end;
+
+ for (start = s->buffer, end = strchr (start, '\n');
+ end && end < s->buffer + s->level;
+ start = end + 1, end = strchr (start, '\n'))
+ if (end[-1] == '\r')
+ {
+ int rc = wr (data, start, end);
+ if (rc)
+ return rc;
+ }
+
+ if (start > s->buffer)
+ {
+ if (start < s->buffer + s->level)
+ {
+ int rest = s->buffer + s->level - start + 1;
+ memmove (s->buffer, start, rest);
+ s->level = rest;
+ }
+ else
+ s->level = 0;
+ }
+ }
+
+ if (nbytes)
+ *nbytes = isize;
+ return 0;
+}
+
int
_auth_lb_level (struct _line_buffer *s)
{
diff --git a/auth/lbuf.h b/auth/lbuf.h
index 03db01e97..1ef36ad6e 100644
--- a/auth/lbuf.h
+++ b/auth/lbuf.h
@@ -1,13 +1,36 @@
+/* GNU Mailutils -- a suite of utilities for electronic mail
+ Copyright (C) 2003 Free Software Foundation, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+
struct _line_buffer;
-int _auth_lb_create (struct _line_buffer **s);
-void _auth_lb_destroy (struct _line_buffer **s);
-void _auth_lb_drop (struct _line_buffer *s);
+int _auth_lb_create __P((struct _line_buffer **s));
+void _auth_lb_destroy __P((struct _line_buffer **s));
+void _auth_lb_drop __P((struct _line_buffer *s));
-int _auth_lb_grow (struct _line_buffer *s, const char *ptr, size_t size);
-int _auth_lb_read (struct _line_buffer *s, const char *ptr, size_t size);
-int _auth_lb_readline (struct _line_buffer *s, const char *ptr, size_t size);
-int _auth_lb_level (struct _line_buffer *s);
-char *_auth_lb_data (struct _line_buffer *s);
+int _auth_lb_grow __P((struct _line_buffer *s, const char *ptr, size_t size));
+int _auth_lb_read __P((struct _line_buffer *s, const char *ptr, size_t size));
+int _auth_lb_readline __P((struct _line_buffer *s, const char *ptr,
+ size_t size));
+int _auth_lb_writelines __P((struct _line_buffer *s, const char *iptr,
+ size_t isize, off_t offset,
+ int (*wr) __PMT ((void *data, char *start,
+ char *end)),
+ void *data, size_t *nbytes));
+int _auth_lb_level __P((struct _line_buffer *s));
+char *_auth_lb_data __P((struct _line_buffer *s));

Return to:

Send suggestions and report system problems to the System administrator.