• Home
  • History
  • Annotate
  • Raw
  • Download

Lines Matching refs:shf

40 static int shf_fillbuf(struct shf *);
41 static int shf_emptybuf(struct shf *, int);
48 struct shf *
51 struct shf *shf; in shf_open() local
58 shf = alloc(sizeof(struct shf) + bsize, ATEMP); in shf_open()
59 shf->areap = ATEMP; in shf_open()
60 shf->buf = (unsigned char *)&shf[1]; in shf_open()
61 shf->bsize = bsize; in shf_open()
62 shf->flags = SHF_ALLOCS; in shf_open()
68 afree(shf, shf->areap); in shf_open()
79 afree(shf, shf->areap); in shf_open()
89 return (shf_reopen(fd, sflags, shf)); in shf_open()
126 struct shf *
127 shf_fdopen(int fd, int sflags, struct shf *shf) in shf_fdopen() argument
134 if (shf) { in shf_fdopen()
136 shf->buf = alloc(bsize, ATEMP); in shf_fdopen()
139 shf->buf = NULL; in shf_fdopen()
141 shf = alloc(sizeof(struct shf) + bsize, ATEMP); in shf_fdopen()
142 shf->buf = (unsigned char *)&shf[1]; in shf_fdopen()
145 shf->areap = ATEMP; in shf_fdopen()
146 shf->fd = fd; in shf_fdopen()
147 shf->rp = shf->wp = shf->buf; in shf_fdopen()
148 shf->rnleft = 0; in shf_fdopen()
149 shf->rbsize = bsize; in shf_fdopen()
150 shf->wnleft = 0; /* force call to shf_emptybuf() */ in shf_fdopen()
151 shf->wbsize = sflags & SHF_UNBUF ? 0 : bsize; in shf_fdopen()
152 shf->flags = sflags; in shf_fdopen()
153 shf->errnosv = 0; in shf_fdopen()
154 shf->bsize = bsize; in shf_fdopen()
157 return (shf); in shf_fdopen()
161 struct shf *
162 shf_reopen(int fd, int sflags, struct shf *shf) in shf_reopen() argument
169 if (!shf || !shf->buf || shf->bsize < bsize) in shf_reopen()
173 shf->fd = fd; in shf_reopen()
174 shf->rp = shf->wp = shf->buf; in shf_reopen()
175 shf->rnleft = 0; in shf_reopen()
176 shf->rbsize = bsize; in shf_reopen()
177 shf->wnleft = 0; /* force call to shf_emptybuf() */ in shf_reopen()
178 shf->wbsize = sflags & SHF_UNBUF ? 0 : bsize; in shf_reopen()
179 shf->flags = (shf->flags & (SHF_ALLOCS | SHF_ALLOCB)) | sflags; in shf_reopen()
180 shf->errnosv = 0; in shf_reopen()
183 return (shf); in shf_reopen()
195 struct shf *
196 shf_sopen(char *buf, ssize_t bsize, int sflags, struct shf *shf) in shf_sopen() argument
202 if (!shf) { in shf_sopen()
203 shf = alloc(sizeof(struct shf), ATEMP); in shf_sopen()
206 shf->areap = ATEMP; in shf_sopen()
211 buf = alloc(bsize, shf->areap); in shf_sopen()
213 shf->fd = -1; in shf_sopen()
214 shf->buf = shf->rp = shf->wp = (unsigned char *)buf; in shf_sopen()
215 shf->rnleft = bsize; in shf_sopen()
216 shf->rbsize = bsize; in shf_sopen()
217 shf->wnleft = bsize - 1; /* space for a '\0' */ in shf_sopen()
218 shf->wbsize = bsize; in shf_sopen()
219 shf->flags = sflags | SHF_STRING; in shf_sopen()
220 shf->errnosv = 0; in shf_sopen()
221 shf->bsize = bsize; in shf_sopen()
223 return (shf); in shf_sopen()
228 shf_close(struct shf *shf) in shf_close() argument
232 if (shf->fd >= 0) { in shf_close()
233 ret = shf_flush(shf); in shf_close()
234 if (close(shf->fd) < 0) in shf_close()
237 if (shf->flags & SHF_ALLOCS) in shf_close()
238 afree(shf, shf->areap); in shf_close()
239 else if (shf->flags & SHF_ALLOCB) in shf_close()
240 afree(shf->buf, shf->areap); in shf_close()
247 shf_fdclose(struct shf *shf) in shf_fdclose() argument
251 if (shf->fd >= 0) { in shf_fdclose()
252 ret = shf_flush(shf); in shf_fdclose()
253 if (close(shf->fd) < 0) in shf_fdclose()
255 shf->rnleft = 0; in shf_fdclose()
256 shf->rp = shf->buf; in shf_fdclose()
257 shf->wnleft = 0; in shf_fdclose()
258 shf->fd = -1; in shf_fdclose()
270 shf_sclose(struct shf *shf) in shf_sclose() argument
272 unsigned char *s = shf->buf; in shf_sclose()
275 if (shf->flags & SHF_WR) { in shf_sclose()
276 shf->wnleft++; in shf_sclose()
277 shf_putc('\0', shf); in shf_sclose()
279 if (shf->flags & SHF_ALLOCS) in shf_sclose()
280 afree(shf, shf->areap); in shf_sclose()
289 shf_flush(struct shf *shf) in shf_flush() argument
291 if (shf->flags & SHF_STRING) in shf_flush()
292 return ((shf->flags & SHF_WR) ? -1 : 0); in shf_flush()
294 if (shf->fd < 0) in shf_flush()
297 if (shf->flags & SHF_ERROR) { in shf_flush()
298 errno = shf->errnosv; in shf_flush()
302 if (shf->flags & SHF_READING) { in shf_flush()
303 shf->flags &= ~(SHF_EOF | SHF_READING); in shf_flush()
304 if (shf->rnleft > 0) { in shf_flush()
305 lseek(shf->fd, (off_t)-shf->rnleft, SEEK_CUR); in shf_flush()
306 shf->rnleft = 0; in shf_flush()
307 shf->rp = shf->buf; in shf_flush()
310 } else if (shf->flags & SHF_WRITING) in shf_flush()
311 return (shf_emptybuf(shf, 0)); in shf_flush()
321 shf_emptybuf(struct shf *shf, int flags) in shf_emptybuf() argument
325 if (!(shf->flags & SHF_STRING) && shf->fd < 0) in shf_emptybuf()
328 if (shf->flags & SHF_ERROR) { in shf_emptybuf()
329 errno = shf->errnosv; in shf_emptybuf()
333 if (shf->flags & SHF_READING) { in shf_emptybuf()
337 ret = shf_flush(shf); in shf_emptybuf()
338 shf->flags &= ~SHF_READING; in shf_emptybuf()
340 if (shf->flags & SHF_STRING) { in shf_emptybuf()
348 if (!(flags & EB_GROW) || !(shf->flags & SHF_DYNAMIC) || in shf_emptybuf()
349 !(shf->flags & SHF_ALLOCB)) in shf_emptybuf()
352 nbuf = aresize2(shf->buf, 2, shf->wbsize, shf->areap); in shf_emptybuf()
353 shf->rp = nbuf + (shf->rp - shf->buf); in shf_emptybuf()
354 shf->wp = nbuf + (shf->wp - shf->buf); in shf_emptybuf()
355 shf->rbsize += shf->wbsize; in shf_emptybuf()
356 shf->wnleft += shf->wbsize; in shf_emptybuf()
357 shf->wbsize <<= 1; in shf_emptybuf()
358 shf->buf = nbuf; in shf_emptybuf()
360 if (shf->flags & SHF_WRITING) { in shf_emptybuf()
361 ssize_t n, ntowrite = shf->wp - shf->buf; in shf_emptybuf()
362 unsigned char *buf = shf->buf; in shf_emptybuf()
365 n = write(shf->fd, buf, ntowrite); in shf_emptybuf()
368 !(shf->flags & SHF_INTERRUPT)) in shf_emptybuf()
370 shf->flags |= SHF_ERROR; in shf_emptybuf()
371 shf->errnosv = errno; in shf_emptybuf()
372 shf->wnleft = 0; in shf_emptybuf()
373 if (buf != shf->buf) { in shf_emptybuf()
378 memmove(shf->buf, buf, in shf_emptybuf()
380 shf->wp = shf->buf + ntowrite; in shf_emptybuf()
388 shf->wp = shf->buf; in shf_emptybuf()
389 shf->wnleft = 0; in shf_emptybuf()
390 shf->flags &= ~SHF_WRITING; in shf_emptybuf()
394 shf->wp = shf->buf; in shf_emptybuf()
395 shf->wnleft = shf->wbsize; in shf_emptybuf()
397 shf->flags |= SHF_WRITING; in shf_emptybuf()
404 shf_fillbuf(struct shf *shf) in shf_fillbuf() argument
408 if (shf->flags & SHF_STRING) in shf_fillbuf()
411 if (shf->fd < 0) in shf_fillbuf()
414 if (shf->flags & (SHF_EOF | SHF_ERROR)) { in shf_fillbuf()
415 if (shf->flags & SHF_ERROR) in shf_fillbuf()
416 errno = shf->errnosv; in shf_fillbuf()
420 if ((shf->flags & SHF_WRITING) && shf_emptybuf(shf, EB_READSW) == -1) in shf_fillbuf()
423 shf->flags |= SHF_READING; in shf_fillbuf()
425 shf->rp = shf->buf; in shf_fillbuf()
427 n = blocking_read(shf->fd, (char *)shf->buf, shf->rbsize); in shf_fillbuf()
428 if (n < 0 && errno == EINTR && !(shf->flags & SHF_INTERRUPT)) in shf_fillbuf()
433 shf->flags |= SHF_ERROR; in shf_fillbuf()
434 shf->errnosv = errno; in shf_fillbuf()
435 shf->rnleft = 0; in shf_fillbuf()
436 shf->rp = shf->buf; in shf_fillbuf()
439 if ((shf->rnleft = n) == 0) in shf_fillbuf()
440 shf->flags |= SHF_EOF; in shf_fillbuf()
450 shf_read(char *buf, ssize_t bsize, struct shf *shf) in shf_read() argument
454 if (!(shf->flags & SHF_RD)) in shf_read()
455 internal_errorf("%s: flags 0x%X", "shf_read", shf->flags); in shf_read()
461 if (shf->rnleft == 0 && in shf_read()
462 (shf_fillbuf(shf) == -1 || shf->rnleft == 0)) in shf_read()
464 ncopy = shf->rnleft; in shf_read()
467 memcpy(buf, shf->rp, ncopy); in shf_read()
470 shf->rp += ncopy; in shf_read()
471 shf->rnleft -= ncopy; in shf_read()
474 return (orig_bsize == bsize ? (shf_error(shf) ? -1 : 0) : in shf_read()
485 shf_getse(char *buf, ssize_t bsize, struct shf *shf) in shf_getse() argument
491 if (!(shf->flags & SHF_RD)) in shf_getse()
492 internal_errorf("%s: flags 0x%X", "shf_getse", shf->flags); in shf_getse()
500 if (shf->rnleft == 0) { in shf_getse()
501 if (shf_fillbuf(shf) == -1) in shf_getse()
503 if (shf->rnleft == 0) { in shf_getse()
508 end = (unsigned char *)memchr((char *)shf->rp, '\n', in shf_getse()
509 shf->rnleft); in shf_getse()
510 ncopy = end ? end - shf->rp + 1 : shf->rnleft; in shf_getse()
513 memcpy(buf, (char *) shf->rp, ncopy); in shf_getse()
514 shf->rp += ncopy; in shf_getse()
515 shf->rnleft -= ncopy; in shf_getse()
525 shf_getchar(struct shf *shf) in shf_getchar() argument
527 if (!(shf->flags & SHF_RD)) in shf_getchar()
528 internal_errorf("%s: flags 0x%X", "shf_getchar", shf->flags); in shf_getchar()
530 if (shf->rnleft == 0 && (shf_fillbuf(shf) == -1 || shf->rnleft == 0)) in shf_getchar()
532 --shf->rnleft; in shf_getchar()
533 return (*shf->rp++); in shf_getchar()
541 shf_ungetc(int c, struct shf *shf) in shf_ungetc() argument
543 if (!(shf->flags & SHF_RD)) in shf_ungetc()
544 internal_errorf("%s: flags 0x%X", "shf_ungetc", shf->flags); in shf_ungetc()
546 if ((shf->flags & SHF_ERROR) || c == -1 || in shf_ungetc()
547 (shf->rp == shf->buf && shf->rnleft)) in shf_ungetc()
550 if ((shf->flags & SHF_WRITING) && shf_emptybuf(shf, EB_READSW) == -1) in shf_ungetc()
553 if (shf->rp == shf->buf) in shf_ungetc()
554 shf->rp = shf->buf + shf->rbsize; in shf_ungetc()
555 if (shf->flags & SHF_STRING) { in shf_ungetc()
560 if ((int)(shf->rp[-1]) != c) in shf_ungetc()
562 shf->flags &= ~SHF_EOF; in shf_ungetc()
563 shf->rp--; in shf_ungetc()
564 shf->rnleft++; in shf_ungetc()
567 shf->flags &= ~SHF_EOF; in shf_ungetc()
568 *--(shf->rp) = c; in shf_ungetc()
569 shf->rnleft++; in shf_ungetc()
578 shf_putchar(int c, struct shf *shf) in shf_putchar() argument
580 if (!(shf->flags & SHF_WR)) in shf_putchar()
581 internal_errorf("%s: flags 0x%X", "shf_putchar", shf->flags); in shf_putchar()
586 if (shf->flags & SHF_UNBUF) { in shf_putchar()
590 if (shf->fd < 0) in shf_putchar()
592 if (shf->flags & SHF_ERROR) { in shf_putchar()
593 errno = shf->errnosv; in shf_putchar()
596 while ((n = write(shf->fd, &cc, 1)) != 1) in shf_putchar()
599 !(shf->flags & SHF_INTERRUPT)) in shf_putchar()
601 shf->flags |= SHF_ERROR; in shf_putchar()
602 shf->errnosv = errno; in shf_putchar()
607 if (shf->wnleft == 0 && shf_emptybuf(shf, EB_GROW) == -1) in shf_putchar()
609 shf->wnleft--; in shf_putchar()
610 *shf->wp++ = c; in shf_putchar()
621 shf_puts(const char *s, struct shf *shf) in shf_puts() argument
626 return (shf_write(s, strlen(s), shf)); in shf_puts()
631 shf_write(const char *buf, ssize_t nbytes, struct shf *shf) in shf_write() argument
635 if (!(shf->flags & SHF_WR)) in shf_write()
636 internal_errorf("%s: flags 0x%X", "shf_write", shf->flags); in shf_write()
642 if ((ncopy = shf->wnleft) && in shf_write()
643 (shf->wp != shf->buf || nbytes < shf->wnleft)) { in shf_write()
646 memcpy(shf->wp, buf, ncopy); in shf_write()
649 shf->wp += ncopy; in shf_write()
650 shf->wnleft -= ncopy; in shf_write()
653 if (shf->flags & SHF_STRING) { in shf_write()
655 while (nbytes > shf->wnleft) in shf_write()
656 if (shf_emptybuf(shf, EB_GROW) == -1) in shf_write()
661 if (shf_emptybuf(shf, EB_GROW) == -1) in shf_write()
664 if (nbytes > shf->wbsize) { in shf_write()
666 if (shf->wbsize) in shf_write()
667 ncopy -= nbytes % shf->wbsize; in shf_write()
670 n = write(shf->fd, buf, ncopy); in shf_write()
673 !(shf->flags & SHF_INTERRUPT)) in shf_write()
675 shf->flags |= SHF_ERROR; in shf_write()
676 shf->errnosv = errno; in shf_write()
677 shf->wnleft = 0; in shf_write()
692 memcpy(shf->wp, buf, nbytes); in shf_write()
693 shf->wp += nbytes; in shf_write()
694 shf->wnleft -= nbytes; in shf_write()
702 shf_fprintf(struct shf *shf, const char *fmt, ...) in shf_fprintf() argument
708 n = shf_vfprintf(shf, fmt, args); in shf_fprintf()
717 struct shf shf; in shf_snprintf() local
725 shf_sopen(buf, bsize, SHF_WR, &shf); in shf_snprintf()
727 n = shf_vfprintf(&shf, fmt, args); in shf_snprintf()
730 shf_sclose(&shf); in shf_snprintf()
737 struct shf shf; in shf_smprintf() local
740 shf_sopen(NULL, 0, SHF_WR|SHF_DYNAMIC, &shf); in shf_smprintf()
742 shf_vfprintf(&shf, fmt, args); in shf_smprintf()
745 return (shf_sclose(&shf)); in shf_smprintf()
762 shf_vfprintf(struct shf *shf, const char *fmt, va_list args) in shf_vfprintf() argument
781 shf_putc(c, shf); in shf_vfprintf()
973 print_value_quoted(shf, s); in shf_vfprintf()
1007 shf_putc(*s, shf); in shf_vfprintf()
1012 shf_putc(*s, shf); in shf_vfprintf()
1017 shf_putc(*s, shf); in shf_vfprintf()
1029 shf_putc(c, shf); in shf_vfprintf()
1044 shf_putc(*s, shf); in shf_vfprintf()
1050 shf_putc(c, shf); in shf_vfprintf()
1054 return (shf_error(shf) ? -1 : nwritten); in shf_vfprintf()
1059 shf_getc(struct shf *shf) in shf_getc() argument
1061 return (shf_getc_i(shf)); in shf_getc()
1065 shf_putc(int c, struct shf *shf) in shf_putc() argument
1067 return (shf_putc_i(c, shf)); in shf_putc()