Lines Matching refs:str

50 stream_wide_prime(stream_t *str)
52 stream_buffered_file_t *BF = &(str->s_type.BF);
57 ASSERT(!(str->s_status & STREAM_OUTPUT));
58 ASSERT(str->s_status & STREAM_OPEN);
60 if (str->s_status & STREAM_INSTANT && (str->s_buffer == NULL)) {
61 str->s_buffer = xzmap(0, WIDE_VBUF_SIZE, PROT_READ |
63 if (str->s_buffer == MAP_FAILED)
65 str->s_buffer_size = WIDE_VBUF_SIZE;
68 ASSERT(str->s_buffer != NULL);
70 if (stream_is_primed(str)) {
73 ASSERT(str->s_current.l_data_length >= -1);
74 (void) memcpy(str->s_buffer, str->s_current.l_data.wp,
75 (str->s_current.l_data_length + 1) * sizeof (wchar_t));
76 str->s_current.l_data.wp = str->s_buffer;
78 if ((str->s_current.l_data_length == -1 ||
80 *(str->s_current.l_data.wp +
81 str->s_current.l_data_length) != L'\0') &&
82 SOP_FETCH(str) == NEXT_LINE_INCOMPLETE &&
89 stream_set(str, STREAM_PRIMED);
91 current_position = (wchar_t *)str->s_buffer;
93 end_of_buffer = (wchar_t *)((char *)str->s_buffer +
94 str->s_buffer_size);
101 stream_set(str, STREAM_EOS_REACHED);
102 stream_unset(str, STREAM_PRIMED);
106 str->s_current.l_data.wp = current_position;
110 warn(WMSG_NEWLINE_ADDED, str->s_filename);
111 str->s_current.l_data_length = MIN(wslen(current_position),
114 str->s_current.l_data_length = next_nl - current_position;
116 *(str->s_current.l_data.wp + str->s_current.l_data_length) = L'\0';
118 str->s_current.l_collate.wp = NULL;
119 str->s_current.l_collate_length = 0;
126 stream_wide_fetch(stream_t *str)
133 ASSERT(str->s_status & STREAM_OPEN);
134 ASSERT((str->s_status & STREAM_EOS_REACHED) == 0);
136 graft_pt = str->s_current.l_data.wp + str->s_current.l_data_length + 1;
139 str->s_current.l_data.wp = graft_pt;
140 else if (str->s_current.l_data_length > -1)
143 dist_to_buf_end = str->s_buffer_size / sizeof (wchar_t) - (graft_pt -
144 (wchar_t *)str->s_buffer);
147 str->s_current.l_data_length = -1;
151 if (fgetws(graft_pt, dist_to_buf_end, str->s_type.BF.s_fp) == NULL) {
152 if (feof(str->s_type.BF.s_fp))
153 stream_set(str, STREAM_EOS_REACHED);
155 die(EMSG_READ, str->s_filename);
158 trip_eof(str->s_type.BF.s_fp);
159 if ((next_nl = xmemwchar(str->s_current.l_data.wp, L'\n',
161 str->s_current.l_data_length =
162 MIN(wslen(str->s_current.l_data.wp), dist_to_buf_end);
164 str->s_current.l_data_length = next_nl -
165 str->s_current.l_data.wp;
168 str->s_current.l_collate_length = 0;
170 if (*(str->s_current.l_data.wp + str->s_current.l_data_length) !=
172 if (!feof(str->s_type.BF.s_fp)) {
180 stream_set(str, STREAM_EOS_REACHED);
181 warn(WMSG_NEWLINE_ADDED, str->s_filename);
186 *(str->s_current.l_data.wp + str->s_current.l_data_length) =
195 stream_wide_fetch_overwrite(stream_t *str)
199 ASSERT(str->s_status & STREAM_OPEN);
200 ASSERT((str->s_status & STREAM_EOS_REACHED) == 0);
202 str->s_current.l_data.wp = str->s_buffer;
203 dist_to_buf_end = str->s_buffer_size / sizeof (wchar_t);
205 if (fgetws(str->s_current.l_data.wp, dist_to_buf_end,
206 str->s_type.BF.s_fp) == NULL) {
207 if (feof(str->s_type.BF.s_fp))
208 stream_set(str, STREAM_EOS_REACHED);
210 die(EMSG_READ, str->s_filename);
213 trip_eof(str->s_type.BF.s_fp);
214 str->s_current.l_data_length = wslen(str->s_current.l_data.wp) - 1;
215 str->s_current.l_collate_length = 0;
217 if (str->s_current.l_data_length == -1 ||
218 *(str->s_current.l_data.wp + str->s_current.l_data_length) !=
220 if (!feof(str->s_type.BF.s_fp)) {
223 stream_set(str, STREAM_EOS_REACHED);
224 warn(WMSG_NEWLINE_ADDED, str->s_filename);
225 str->s_current.l_data_length++;
229 *(str->s_current.l_data.wp + str->s_current.l_data_length) = L'\0';
236 stream_wide_send_eol(stream_t *str)
240 ASSERT(str->s_status & STREAM_OPEN);
241 ASSERT(str->s_status & STREAM_OUTPUT);
243 if (wxwrite(str->s_type.SF.s_fd, w_crlf) < 0)
244 die(EMSG_WRITE, str->s_filename);
248 stream_wide_put_line(stream_t *str, line_rec_t *line)
250 ASSERT(str->s_status & STREAM_OPEN);
251 ASSERT(str->s_status & STREAM_OUTPUT);
254 if (wxwrite(str->s_type.SF.s_fd, line->l_data.wp) >= 0) {
255 stream_wide_send_eol(str);
258 die(EMSG_WRITE, str->s_filename);
265 stream_wide_put_line_unique(stream_t *str, line_rec_t *line)
270 ASSERT(str->s_status & STREAM_OPEN);
271 ASSERT(str->s_status & STREAM_OUTPUT);
276 stream_wide_put_line(str, line);
295 stream_wide_eos(stream_t *str)
299 if (str == NULL || str->s_status & STREAM_EOS_REACHED)
302 trip_eof(str->s_type.BF.s_fp);
303 if (feof(str->s_type.BF.s_fp) &&
305 str->s_current.l_collate_length != -1) {
307 stream_set(str, STREAM_EOS_REACHED);
315 stream_wide_release_line(stream_t *str)