Lines Matching refs:data

86  * Add a filter to this write handle that passes all data through an
93 struct private_data *data;
99 f->data = calloc(1, sizeof(*data));
100 if (f->data == NULL)
102 data = (struct private_data *)f->data;
104 data->cmd = strdup(cmd);
105 if (data->cmd == NULL)
108 data->pdata = __archive_write_program_allocate();
109 if (data->pdata == NULL)
113 if (archive_string_ensure(&data->description,
116 archive_strcpy(&data->description, prefix);
117 archive_strcat(&data->description, cmd);
119 f->name = data->description.s;
136 struct private_data *data = (struct private_data *)f->data;
138 return __archive_write_program_open(f, data->pdata, data->cmd);
145 struct private_data *data = (struct private_data *)f->data;
147 return __archive_write_program_write(f, data->pdata, buff, length);
153 struct private_data *data = (struct private_data *)f->data;
155 return __archive_write_program_close(f, data->pdata);
161 struct private_data *data = (struct private_data *)f->data;
163 if (data) {
164 free(data->cmd);
165 archive_string_free(&data->description);
166 __archive_write_program_free(data->pdata);
167 free(data);
168 f->data = NULL;
179 struct archive_write_program_data *data;
181 data = calloc(1, sizeof(struct archive_write_program_data));
182 if (data == NULL)
183 return (data);
184 data->child_stdin = -1;
185 data->child_stdout = -1;
186 return (data);
193 __archive_write_program_free(struct archive_write_program_data *data)
196 if (data) {
198 if (data->child)
199 CloseHandle(data->child);
201 free(data->child_buf);
202 free(data);
209 struct archive_write_program_data *data, const char *cmd)
218 if (data->child_buf == NULL) {
219 data->child_buf_len = 65536;
220 data->child_buf_avail = 0;
221 data->child_buf = malloc(data->child_buf_len);
223 if (data->child_buf == NULL) {
230 child = __archive_create_child(cmd, &data->child_stdin,
231 &data->child_stdout);
238 data->child = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, child);
239 if (data->child == NULL) {
240 close(data->child_stdin);
241 data->child_stdin = -1;
242 close(data->child_stdout);
243 data->child_stdout = -1;
249 data->child = child;
256 struct archive_write_program_data *data, const char *buf, size_t buf_len)
260 if (data->child_stdin == -1)
268 ret = write(data->child_stdin, buf, buf_len);
274 close(data->child_stdin);
275 data->child_stdin = -1;
276 fcntl(data->child_stdout, F_SETFL, 0);
282 if (data->child_stdout == -1) {
283 fcntl(data->child_stdin, F_SETFL, 0);
284 __archive_check_child(data->child_stdin,
285 data->child_stdout);
290 ret = read(data->child_stdout,
291 data->child_buf + data->child_buf_avail,
292 data->child_buf_len - data->child_buf_avail);
296 close(data->child_stdout);
297 data->child_stdout = -1;
298 fcntl(data->child_stdin, F_SETFL, 0);
302 __archive_check_child(data->child_stdin,
303 data->child_stdout);
309 data->child_buf_avail += ret;
312 data->child_buf, data->child_buf_avail);
315 data->child_buf_avail = 0;
320 * Write data to the filter stream.
324 struct archive_write_program_data *data, const void *buff, size_t length)
329 if (data->child == 0)
334 ret = child_write(f, data, buf, length);
351 struct archive_write_program_data *data)
356 if (data->child == 0)
360 close(data->child_stdin);
361 data->child_stdin = -1;
362 fcntl(data->child_stdout, F_SETFL, 0);
366 bytes_read = read(data->child_stdout,
367 data->child_buf + data->child_buf_avail,
368 data->child_buf_len - data->child_buf_avail);
380 data->child_buf_avail += bytes_read;
383 data->child_buf, data->child_buf_avail);
388 data->child_buf_avail = 0;
393 if (data->child_stdin != -1)
394 close(data->child_stdin);
395 if (data->child_stdout != -1)
396 close(data->child_stdout);
397 while (waitpid(data->child, &status, 0) == -1 && errno == EINTR)
400 CloseHandle(data->child);
402 data->child = 0;