• Home
  • Raw
  • Download

Lines Matching refs:shf

42 static int shf_fillbuf(struct shf *);
43 static int shf_emptybuf(struct shf *, int);
50 struct shf *
53 struct shf *shf; in shf_open() local
60 shf = alloc(sizeof(struct shf) + bsize, ATEMP); in shf_open()
61 shf->areap = ATEMP; in shf_open()
62 shf->buf = (unsigned char *)&shf[1]; in shf_open()
63 shf->bsize = bsize; in shf_open()
64 shf->flags = SHF_ALLOCS; in shf_open()
70 afree(shf, shf->areap); in shf_open()
81 afree(shf, shf->areap); in shf_open()
91 return (shf_reopen(fd, sflags, shf)); in shf_open()
128 struct shf *
129 shf_fdopen(int fd, int sflags, struct shf *shf) in shf_fdopen() argument
136 if (shf) { in shf_fdopen()
138 shf->buf = alloc(bsize, ATEMP); in shf_fdopen()
141 shf->buf = NULL; in shf_fdopen()
143 shf = alloc(sizeof(struct shf) + bsize, ATEMP); in shf_fdopen()
144 shf->buf = (unsigned char *)&shf[1]; in shf_fdopen()
147 shf->areap = ATEMP; in shf_fdopen()
148 shf->fd = fd; in shf_fdopen()
149 shf->rp = shf->wp = shf->buf; in shf_fdopen()
150 shf->rnleft = 0; in shf_fdopen()
151 shf->rbsize = bsize; in shf_fdopen()
152 shf->wnleft = 0; /* force call to shf_emptybuf() */ in shf_fdopen()
153 shf->wbsize = sflags & SHF_UNBUF ? 0 : bsize; in shf_fdopen()
154 shf->flags = sflags; in shf_fdopen()
155 shf->errnosv = 0; in shf_fdopen()
156 shf->bsize = bsize; in shf_fdopen()
159 return (shf); in shf_fdopen()
163 struct shf *
164 shf_reopen(int fd, int sflags, struct shf *shf) in shf_reopen() argument
171 if (!shf || !shf->buf || shf->bsize < bsize) in shf_reopen()
175 shf->fd = fd; in shf_reopen()
176 shf->rp = shf->wp = shf->buf; in shf_reopen()
177 shf->rnleft = 0; in shf_reopen()
178 shf->rbsize = bsize; in shf_reopen()
179 shf->wnleft = 0; /* force call to shf_emptybuf() */ in shf_reopen()
180 shf->wbsize = sflags & SHF_UNBUF ? 0 : bsize; in shf_reopen()
181 shf->flags = (shf->flags & (SHF_ALLOCS | SHF_ALLOCB)) | sflags; in shf_reopen()
182 shf->errnosv = 0; in shf_reopen()
185 return (shf); in shf_reopen()
197 struct shf *
198 shf_sopen(char *buf, ssize_t bsize, int sflags, struct shf *shf) in shf_sopen() argument
205 if (!shf) { in shf_sopen()
206 shf = alloc(sizeof(struct shf), ATEMP); in shf_sopen()
209 shf->areap = ATEMP; in shf_sopen()
214 buf = alloc(bsize, shf->areap); in shf_sopen()
216 shf->fd = -1; in shf_sopen()
217 shf->buf = shf->rp = shf->wp = (unsigned char *)buf; in shf_sopen()
218 shf->rnleft = bsize; in shf_sopen()
219 shf->rbsize = bsize; in shf_sopen()
220 shf->wnleft = bsize - 1; /* space for a '\0' */ in shf_sopen()
221 shf->wbsize = bsize; in shf_sopen()
222 shf->flags = sflags | SHF_STRING; in shf_sopen()
223 shf->errnosv = 0; in shf_sopen()
224 shf->bsize = bsize; in shf_sopen()
226 return (shf); in shf_sopen()
231 shf_close(struct shf *shf) in shf_close() argument
235 if (shf->fd >= 0) { in shf_close()
236 ret = shf_flush(shf); in shf_close()
237 if (close(shf->fd) < 0) in shf_close()
240 if (shf->flags & SHF_ALLOCS) in shf_close()
241 afree(shf, shf->areap); in shf_close()
242 else if (shf->flags & SHF_ALLOCB) in shf_close()
243 afree(shf->buf, shf->areap); in shf_close()
250 shf_fdclose(struct shf *shf) in shf_fdclose() argument
254 if (shf->fd >= 0) { in shf_fdclose()
255 ret = shf_flush(shf); in shf_fdclose()
256 if (close(shf->fd) < 0) in shf_fdclose()
258 shf->rnleft = 0; in shf_fdclose()
259 shf->rp = shf->buf; in shf_fdclose()
260 shf->wnleft = 0; in shf_fdclose()
261 shf->fd = -1; in shf_fdclose()
273 shf_sclose(struct shf *shf) in shf_sclose() argument
275 unsigned char *s = shf->buf; in shf_sclose()
278 if (shf->flags & SHF_WR) { in shf_sclose()
279 shf->wnleft++; in shf_sclose()
280 shf_putc('\0', shf); in shf_sclose()
282 if (shf->flags & SHF_ALLOCS) in shf_sclose()
283 afree(shf, shf->areap); in shf_sclose()
292 shf_flush(struct shf *shf) in shf_flush() argument
296 if (shf->flags & SHF_STRING) in shf_flush()
297 rv = (shf->flags & SHF_WR) ? -1 : 0; in shf_flush()
298 else if (shf->fd < 0) in shf_flush()
300 else if (shf->flags & SHF_ERROR) { in shf_flush()
301 errno = shf->errnosv; in shf_flush()
303 } else if (shf->flags & SHF_READING) { in shf_flush()
304 shf->flags &= ~(SHF_EOF | SHF_READING); in shf_flush()
305 if (shf->rnleft > 0) { in shf_flush()
306 if (lseek(shf->fd, (off_t)-shf->rnleft, in shf_flush()
308 shf->flags |= SHF_ERROR; in shf_flush()
309 shf->errnosv = errno; in shf_flush()
312 shf->rnleft = 0; in shf_flush()
313 shf->rp = shf->buf; in shf_flush()
315 } else if (shf->flags & SHF_WRITING) in shf_flush()
316 rv = shf_emptybuf(shf, 0); in shf_flush()
326 shf_emptybuf(struct shf *shf, int flags) in shf_emptybuf() argument
330 if (!(shf->flags & SHF_STRING) && shf->fd < 0) in shf_emptybuf()
333 if (shf->flags & SHF_ERROR) { in shf_emptybuf()
334 errno = shf->errnosv; in shf_emptybuf()
338 if (shf->flags & SHF_READING) { in shf_emptybuf()
342 ret = shf_flush(shf); in shf_emptybuf()
343 shf->flags &= ~SHF_READING; in shf_emptybuf()
345 if (shf->flags & SHF_STRING) { in shf_emptybuf()
353 if (!(flags & EB_GROW) || !(shf->flags & SHF_DYNAMIC) || in shf_emptybuf()
354 !(shf->flags & SHF_ALLOCB)) in shf_emptybuf()
357 nbuf = aresize2(shf->buf, 2, shf->wbsize, shf->areap); in shf_emptybuf()
358 shf->rp = nbuf + (shf->rp - shf->buf); in shf_emptybuf()
359 shf->wp = nbuf + (shf->wp - shf->buf); in shf_emptybuf()
360 shf->rbsize += shf->wbsize; in shf_emptybuf()
361 shf->wnleft += shf->wbsize; in shf_emptybuf()
362 shf->wbsize <<= 1; in shf_emptybuf()
363 shf->buf = nbuf; in shf_emptybuf()
365 if (shf->flags & SHF_WRITING) { in shf_emptybuf()
366 ssize_t n, ntowrite = shf->wp - shf->buf; in shf_emptybuf()
367 unsigned char *buf = shf->buf; in shf_emptybuf()
370 n = write(shf->fd, buf, ntowrite); in shf_emptybuf()
373 !(shf->flags & SHF_INTERRUPT)) in shf_emptybuf()
375 shf->flags |= SHF_ERROR; in shf_emptybuf()
376 shf->errnosv = errno; in shf_emptybuf()
377 shf->wnleft = 0; in shf_emptybuf()
378 if (buf != shf->buf) { in shf_emptybuf()
383 memmove(shf->buf, buf, in shf_emptybuf()
385 shf->wp = shf->buf + ntowrite; in shf_emptybuf()
393 shf->wp = shf->buf; in shf_emptybuf()
394 shf->wnleft = 0; in shf_emptybuf()
395 shf->flags &= ~SHF_WRITING; in shf_emptybuf()
399 shf->wp = shf->buf; in shf_emptybuf()
400 shf->wnleft = shf->wbsize; in shf_emptybuf()
402 shf->flags |= SHF_WRITING; in shf_emptybuf()
409 shf_fillbuf(struct shf *shf) in shf_fillbuf() argument
413 if (shf->flags & SHF_STRING) in shf_fillbuf()
416 if (shf->fd < 0) in shf_fillbuf()
419 if (shf->flags & (SHF_EOF | SHF_ERROR)) { in shf_fillbuf()
420 if (shf->flags & SHF_ERROR) in shf_fillbuf()
421 errno = shf->errnosv; in shf_fillbuf()
425 if ((shf->flags & SHF_WRITING) && shf_emptybuf(shf, EB_READSW) == -1) in shf_fillbuf()
428 shf->flags |= SHF_READING; in shf_fillbuf()
430 shf->rp = shf->buf; in shf_fillbuf()
432 n = blocking_read(shf->fd, (char *)shf->buf, shf->rbsize); in shf_fillbuf()
433 if (n < 0 && errno == EINTR && !(shf->flags & SHF_INTERRUPT)) in shf_fillbuf()
438 shf->flags |= SHF_ERROR; in shf_fillbuf()
439 shf->errnosv = errno; in shf_fillbuf()
440 shf->rnleft = 0; in shf_fillbuf()
441 shf->rp = shf->buf; in shf_fillbuf()
444 if ((shf->rnleft = n) == 0) in shf_fillbuf()
445 shf->flags |= SHF_EOF; in shf_fillbuf()
455 shf_read(char *buf, ssize_t bsize, struct shf *shf) in shf_read() argument
459 if (!(shf->flags & SHF_RD)) in shf_read()
461 (unsigned int)shf->flags); in shf_read()
467 if (shf->rnleft == 0 && in shf_read()
468 (shf_fillbuf(shf) == -1 || shf->rnleft == 0)) in shf_read()
470 ncopy = shf->rnleft; in shf_read()
473 memcpy(buf, shf->rp, ncopy); in shf_read()
476 shf->rp += ncopy; in shf_read()
477 shf->rnleft -= ncopy; in shf_read()
480 return (orig_bsize == bsize ? (shf_error(shf) ? -1 : 0) : in shf_read()
491 shf_getse(char *buf, ssize_t bsize, struct shf *shf) in shf_getse() argument
497 if (!(shf->flags & SHF_RD)) in shf_getse()
499 (unsigned int)shf->flags); in shf_getse()
507 if (shf->rnleft == 0) { in shf_getse()
508 if (shf_fillbuf(shf) == -1) in shf_getse()
510 if (shf->rnleft == 0) { in shf_getse()
515 end = (unsigned char *)memchr((char *)shf->rp, '\n', in shf_getse()
516 shf->rnleft); in shf_getse()
517 ncopy = end ? end - shf->rp + 1 : shf->rnleft; in shf_getse()
520 memcpy(buf, (char *) shf->rp, ncopy); in shf_getse()
521 shf->rp += ncopy; in shf_getse()
522 shf->rnleft -= ncopy; in shf_getse()
535 int c = shf_getc(shf); in shf_getse()
539 shf_ungetc(c, shf); in shf_getse()
548 shf_getchar(struct shf *shf) in shf_getchar() argument
550 if (!(shf->flags & SHF_RD)) in shf_getchar()
552 (unsigned int)shf->flags); in shf_getchar()
554 if (shf->rnleft == 0 && (shf_fillbuf(shf) == -1 || shf->rnleft == 0)) in shf_getchar()
556 --shf->rnleft; in shf_getchar()
557 return (ord(*shf->rp++)); in shf_getchar()
565 shf_ungetc(int c, struct shf *shf) in shf_ungetc() argument
567 if (!(shf->flags & SHF_RD)) in shf_ungetc()
569 (unsigned int)shf->flags); in shf_ungetc()
571 if ((shf->flags & SHF_ERROR) || c == -1 || in shf_ungetc()
572 (shf->rp == shf->buf && shf->rnleft)) in shf_ungetc()
575 if ((shf->flags & SHF_WRITING) && shf_emptybuf(shf, EB_READSW) == -1) in shf_ungetc()
578 if (shf->rp == shf->buf) in shf_ungetc()
579 shf->rp = shf->buf + shf->rbsize; in shf_ungetc()
580 if (shf->flags & SHF_STRING) { in shf_ungetc()
585 if ((int)(shf->rp[-1]) != c) in shf_ungetc()
587 shf->flags &= ~SHF_EOF; in shf_ungetc()
588 shf->rp--; in shf_ungetc()
589 shf->rnleft++; in shf_ungetc()
592 shf->flags &= ~SHF_EOF; in shf_ungetc()
593 *--(shf->rp) = c; in shf_ungetc()
594 shf->rnleft++; in shf_ungetc()
603 shf_putchar(int c, struct shf *shf) in shf_putchar() argument
605 if (!(shf->flags & SHF_WR)) in shf_putchar()
607 (unsigned int)shf->flags); in shf_putchar()
612 if (shf->flags & SHF_UNBUF) { in shf_putchar()
616 if (shf->fd < 0) in shf_putchar()
618 if (shf->flags & SHF_ERROR) { in shf_putchar()
619 errno = shf->errnosv; in shf_putchar()
622 while ((n = write(shf->fd, &cc, 1)) != 1) in shf_putchar()
625 !(shf->flags & SHF_INTERRUPT)) in shf_putchar()
627 shf->flags |= SHF_ERROR; in shf_putchar()
628 shf->errnosv = errno; in shf_putchar()
633 if (shf->wnleft == 0 && shf_emptybuf(shf, EB_GROW) == -1) in shf_putchar()
635 shf->wnleft--; in shf_putchar()
636 *shf->wp++ = c; in shf_putchar()
647 shf_puts(const char *s, struct shf *shf) in shf_puts() argument
652 return (shf_write(s, strlen(s), shf)); in shf_puts()
657 shf_write(const char *buf, ssize_t nbytes, struct shf *shf) in shf_write() argument
661 if (!(shf->flags & SHF_WR)) in shf_write()
663 (unsigned int)shf->flags); in shf_write()
669 if ((ncopy = shf->wnleft) && in shf_write()
670 (shf->wp != shf->buf || nbytes < shf->wnleft)) { in shf_write()
673 memcpy(shf->wp, buf, ncopy); in shf_write()
676 shf->wp += ncopy; in shf_write()
677 shf->wnleft -= ncopy; in shf_write()
680 if (shf->flags & SHF_STRING) { in shf_write()
682 while (nbytes > shf->wnleft) in shf_write()
683 if (shf_emptybuf(shf, EB_GROW) == -1) in shf_write()
688 if (shf_emptybuf(shf, EB_GROW) == -1) in shf_write()
691 if (nbytes > shf->wbsize) { in shf_write()
693 if (shf->wbsize) in shf_write()
694 ncopy -= nbytes % shf->wbsize; in shf_write()
697 n = write(shf->fd, buf, ncopy); in shf_write()
700 !(shf->flags & SHF_INTERRUPT)) in shf_write()
702 shf->flags |= SHF_ERROR; in shf_write()
703 shf->errnosv = errno; in shf_write()
704 shf->wnleft = 0; in shf_write()
719 memcpy(shf->wp, buf, nbytes); in shf_write()
720 shf->wp += nbytes; in shf_write()
721 shf->wnleft -= nbytes; in shf_write()
729 shf_fprintf(struct shf *shf, const char *fmt, ...) in shf_fprintf() argument
735 n = shf_vfprintf(shf, fmt, args); in shf_fprintf()
744 struct shf shf; in shf_snprintf() local
752 shf_sopen(buf, bsize, SHF_WR, &shf); in shf_snprintf()
754 n = shf_vfprintf(&shf, fmt, args); in shf_snprintf()
757 shf_sclose(&shf); in shf_snprintf()
764 struct shf shf; in shf_smprintf() local
767 shf_sopen(NULL, 0, SHF_WR|SHF_DYNAMIC, &shf); in shf_smprintf()
769 shf_vfprintf(&shf, fmt, args); in shf_smprintf()
772 return (shf_sclose(&shf)); in shf_smprintf()
789 shf_vfprintf(struct shf *shf, const char *fmt, va_list args) in shf_vfprintf() argument
808 shf_putc(c, shf); in shf_vfprintf()
1003 print_value_quoted(shf, s); in shf_vfprintf()
1035 shf_putc(*s, shf); in shf_vfprintf()
1040 shf_putc(*s, shf); in shf_vfprintf()
1045 shf_putc(*s, shf); in shf_vfprintf()
1056 shf_putc(c, shf); in shf_vfprintf()
1066 shf_putc(*s++, shf); in shf_vfprintf()
1070 shf_putc(c, shf); in shf_vfprintf()
1073 return (shf_error(shf) ? -1 : nwritten); in shf_vfprintf()
1078 shf_getc(struct shf *shf) in shf_getc() argument
1080 return (shf_getc_i(shf)); in shf_getc()
1084 shf_putc(int c, struct shf *shf) in shf_putc() argument
1086 return (shf_putc_i(c, shf)); in shf_putc()