X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Futils.c;h=062b17e4a8db64cc11e42c43ffe184219f313f51;hb=7e54469ed4f3c2ecc1006475dcd10df1d1fe35d3;hp=8c7045298b7bf0546022fc25a8a705549df12659;hpb=f53a48eb9d74db3c71938e114b7f489c339bc003;p=ppp.git diff --git a/pppd/utils.c b/pppd/utils.c index 8c70452..062b17e 100644 --- a/pppd/utils.c +++ b/pppd/utils.c @@ -10,16 +10,11 @@ * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - * 3. The name(s) of the authors of this software must not be used to + * 2. The name(s) of the authors of this software must not be used to * endorse or promote products derived from this software without * prior written permission. * - * 4. Redistributions of any form whatsoever must retain the following + * 3. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by Paul Mackerras * ". @@ -33,7 +28,7 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#define RCSID "$Id: utils.c,v 1.20 2002/12/04 23:03:33 paulus Exp $" +#define RCSID "$Id: utils.c,v 1.25 2008/06/03 12:06:37 paulus Exp $" #include #include @@ -123,7 +118,7 @@ strlcat(dest, src, len) /* * slprintf - format a message into a buffer. Like sprintf except we * also specify the length of the output buffer, and we handle - * %r (recursive format), %m (error message), %v (visible string), + * %m (error message), %v (visible string), * %q (quoted string), %t (current time) and %I (IP address) formats. * Doesn't do floating-point formats. * Returns the number of chars put into buf. @@ -241,8 +236,8 @@ vslprintf(buf, buflen, fmt, args) base = 10; break; default: - *buf++ = '%'; --buflen; - *buf++ = 'l'; --buflen; + OUTCHAR('%'); + OUTCHAR('l'); --fmt; /* so %lz outputs %lz etc. */ continue; } @@ -292,6 +287,7 @@ vslprintf(buf, buflen, fmt, args) (ip >> 16) & 0xff, (ip >> 8) & 0xff, ip & 0xff); str = num; break; +#if 0 /* not used, and breaks on S/390, apparently */ case 'r': f = va_arg(args, char *); #ifndef __powerpc__ @@ -303,6 +299,7 @@ vslprintf(buf, buflen, fmt, args) buf += n; buflen -= n; continue; +#endif case 't': time(&t); str = ctime(&t); @@ -530,7 +527,7 @@ static int llevel; /* level for logging */ void init_pr_log(prefix, level) - char *prefix; + const char *prefix; int level; { linep = line; @@ -720,6 +717,7 @@ error __V((char *fmt, ...)) logit(LOG_ERR, fmt, pvar); va_end(pvar); + ++error_count; } /* @@ -832,6 +830,32 @@ dump_packet(const char *tag, unsigned char *p, int len) dbglog("%s %P", tag, p, len); } +/* + * complete_read - read a full `count' bytes from fd, + * unless end-of-file or an error other than EINTR is encountered. + */ +ssize_t +complete_read(int fd, void *buf, size_t count) +{ + size_t done; + ssize_t nb; + char *ptr = buf; + + for (done = 0; done < count; ) { + nb = read(fd, ptr, count - done); + if (nb < 0) { + if (errno == EINTR) + continue; + return -1; + } + if (nb == 0) + break; + done += nb; + ptr += nb; + } + return done; +} + /* Procedures for locking the serial device using a lock file. */ #ifndef LOCK_DIR #ifdef __linux__