Lines Matching refs:str

48 stream_stdio_open_for_write(stream_t *str)
50 stream_simple_file_t *SF = &(str->s_type.SF);
52 ASSERT(!(str->s_status & STREAM_OPEN));
53 ASSERT(!(str->s_status & STREAM_OUTPUT));
55 if (str->s_status & STREAM_NOTFILE)
58 if ((SF->s_fd = open(str->s_filename, O_CREAT | O_TRUNC |
63 die(EMSG_OPEN, str->s_filename);
66 stream_set(str, STREAM_OPEN | STREAM_OUTPUT);
80 stream_stdio_prime(stream_t *str)
82 stream_buffered_file_t *BF = &(str->s_type.BF);
87 ASSERT(!(str->s_status & STREAM_OUTPUT));
88 ASSERT(str->s_status & (STREAM_SINGLE | STREAM_WIDE));
89 ASSERT(str->s_status & STREAM_OPEN);
91 if (str->s_status & STREAM_INSTANT && (str->s_buffer == NULL)) {
92 str->s_buffer = xzmap(0, STDIO_VBUF_SIZE, PROT_READ |
94 if (str->s_buffer == MAP_FAILED)
96 str->s_buffer_size = STDIO_VBUF_SIZE;
99 ASSERT(str->s_buffer != NULL);
101 if (stream_is_primed(str)) {
109 ASSERT(str->s_current.l_data_length >= -1);
110 (void) memcpy(str->s_buffer, str->s_current.l_data.sp,
111 str->s_current.l_data_length + 1);
112 str->s_current.l_data.sp = str->s_buffer;
118 if ((str->s_current.l_data_length == -1 ||
120 *(str->s_current.l_data.sp +
121 str->s_current.l_data_length) != '\n') &&
122 SOP_FETCH(str) == NEXT_LINE_INCOMPLETE &&
126 str->s_current.l_collate.sp = NULL;
127 str->s_current.l_collate_length = 0;
132 stream_set(str, STREAM_PRIMED);
134 current_position = (char *)str->s_buffer;
135 end_of_buffer = (char *)str->s_buffer + str->s_buffer_size;
142 stream_set(str, STREAM_EOS_REACHED);
143 stream_unset(str, STREAM_PRIMED);
147 str->s_current.l_data.sp = current_position;
154 warn(WMSG_NEWLINE_ADDED, str->s_filename);
155 str->s_current.l_data_length = MIN(strlen(current_position),
158 str->s_current.l_data_length = next_nl - current_position;
161 str->s_current.l_collate.sp = NULL;
162 str->s_current.l_collate_length = 0;
173 stream_stdio_fetch(stream_t *str)
179 ASSERT(str->s_status & STREAM_OPEN);
180 ASSERT(str->s_status & (STREAM_SINGLE | STREAM_WIDE));
181 ASSERT((str->s_status & STREAM_EOS_REACHED) == 0);
183 graft_pt = str->s_current.l_data.sp + str->s_current.l_data_length + 1;
189 str->s_current.l_data.sp = graft_pt;
190 } else if (str->s_current.l_data_length > -1) {
199 dist_to_buf_end = str->s_buffer_size - (graft_pt -
200 (char *)str->s_buffer);
211 str->s_current.l_data_length = -1;
215 if (fgets(graft_pt, dist_to_buf_end, str->s_type.BF.s_fp) == NULL) {
216 if (feof(str->s_type.BF.s_fp))
217 stream_set(str, STREAM_EOS_REACHED);
219 die(EMSG_READ, str->s_filename);
222 trip_eof(str->s_type.BF.s_fp);
227 if ((next_nl = memchr(str->s_current.l_data.sp, '\n',
229 str->s_current.l_data_length = strlen(str->s_current.l_data.sp);
231 str->s_current.l_data_length = next_nl -
232 str->s_current.l_data.sp;
235 str->s_current.l_collate_length = 0;
237 if (*(str->s_current.l_data.sp + str->s_current.l_data_length) !=
239 if (!feof(str->s_type.BF.s_fp)) {
255 stream_set(str, STREAM_EOS_REACHED);
256 warn(WMSG_NEWLINE_ADDED, str->s_filename);
275 stream_stdio_fetch_overwrite(stream_t *str)
279 ASSERT(str->s_status & STREAM_OPEN);
280 ASSERT(str->s_status & (STREAM_SINGLE | STREAM_WIDE));
281 ASSERT((str->s_status & STREAM_EOS_REACHED) == 0);
283 str->s_current.l_data.sp = str->s_buffer;
284 dist_to_buf_end = str->s_buffer_size;
286 if (fgets(str->s_current.l_data.sp, dist_to_buf_end,
287 str->s_type.BF.s_fp) == NULL) {
288 if (feof(str->s_type.BF.s_fp))
289 stream_set(str, STREAM_EOS_REACHED);
291 die(EMSG_READ, str->s_filename);
294 trip_eof(str->s_type.BF.s_fp);
295 str->s_current.l_data_length = strlen(str->s_current.l_data.sp) - 1;
296 str->s_current.l_collate_length = 0;
298 if (str->s_current.l_data_length == -1 ||
299 *(str->s_current.l_data.sp + str->s_current.l_data_length) !=
301 if (!feof(str->s_type.BF.s_fp)) {
310 stream_set(str, STREAM_EOS_REACHED);
311 warn(WMSG_NEWLINE_ADDED, str->s_filename);
320 stream_stdio_is_closable(stream_t *str)
322 if (str->s_status & STREAM_OPEN && !(str->s_status & STREAM_NOTFILE))
328 stream_stdio_close(stream_t *str)
330 ASSERT(str->s_status & STREAM_OPEN);
332 if (!(str->s_status & STREAM_OUTPUT)) {
333 if (!(str->s_status & STREAM_NOTFILE))
334 (void) fclose(str->s_type.BF.s_fp);
336 if (str->s_type.BF.s_vbuf != NULL) {
337 free(str->s_type.BF.s_vbuf);
338 str->s_type.BF.s_vbuf = NULL;
341 if (cxwrite(str->s_type.SF.s_fd, NULL, 0) == 0)
342 (void) close(str->s_type.SF.s_fd);
344 die(EMSG_WRITE, str->s_filename);
347 stream_unset(str, STREAM_OPEN | STREAM_PRIMED | STREAM_OUTPUT);
352 stream_stdio_send_eol(stream_t *str)
354 ASSERT(str->s_status & STREAM_OPEN);
355 ASSERT(str->s_status & STREAM_OUTPUT);
357 if (cxwrite(str->s_type.SF.s_fd, "\n", 1) < 0)
358 die(EMSG_WRITE, str->s_filename);
362 stream_stdio_flush(stream_t *str)
364 ASSERT(str->s_status & STREAM_OPEN);
365 ASSERT(str->s_status & STREAM_OUTPUT);
367 if (cxwrite(str->s_type.SF.s_fd, NULL, 0) < 0)
368 die(EMSG_WRITE, str->s_filename);
372 stream_stdio_put_line(stream_t *str, line_rec_t *line)
374 ASSERT(str->s_status & STREAM_OPEN);
375 ASSERT(str->s_status & STREAM_OUTPUT);
378 if (cxwrite(str->s_type.SF.s_fd, line->l_data.sp,
380 die(EMSG_WRITE, str->s_filename);
382 stream_stdio_send_eol(str);
390 stream_stdio_put_line_unique(stream_t *str, line_rec_t *line)
395 ASSERT(str->s_status & STREAM_OPEN);
396 ASSERT(str->s_status & STREAM_OUTPUT);
405 stream_stdio_put_line(str, line);
420 stream_stdio_unlink(stream_t *str)
422 if (!(str->s_status & STREAM_NOTFILE))
423 return (unlink(str->s_filename));
429 stream_stdio_free(stream_t *str)
434 if (!(str->s_status & STREAM_OPEN) ||
435 (str->s_consumer != NULL &&
436 str->s_consumer->s_status & STREAM_NOT_FREEABLE))
439 if (str->s_buffer != NULL) {
440 if (munmap(str->s_buffer, str->s_buffer_size) < 0)
443 str->s_buffer = NULL;
444 str->s_buffer_size = 0;
448 stream_unset(str, STREAM_PRIMED | STREAM_INSTANT);
454 stream_stdio_eos(stream_t *str)
458 ASSERT(!(str->s_status & STREAM_OUTPUT));
459 ASSERT(str->s_status & (STREAM_SINGLE | STREAM_WIDE));
461 if (str == NULL || str->s_status & STREAM_EOS_REACHED)
464 trip_eof(str->s_type.BF.s_fp);
465 if (feof(str->s_type.BF.s_fp) &&
467 str->s_current.l_collate_length != -1) {
469 stream_set(str, STREAM_EOS_REACHED);
477 stream_stdio_release_line(stream_t *str)