• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /freebsd-13-stable/contrib/libarchive/libarchive/

Lines Matching refs:data

87  * Add a filter to this write handle that passes all data through an
94 struct private_data *data;
100 f->data = calloc(1, sizeof(*data));
101 if (f->data == NULL)
103 data = (struct private_data *)f->data;
105 data->cmd = strdup(cmd);
106 if (data->cmd == NULL)
109 data->pdata = __archive_write_program_allocate(cmd);
110 if (data->pdata == NULL)
114 if (archive_string_ensure(&data->description,
117 archive_strcpy(&data->description, prefix);
118 archive_strcat(&data->description, cmd);
120 f->name = data->description.s;
137 struct private_data *data = (struct private_data *)f->data;
139 return __archive_write_program_open(f, data->pdata, data->cmd);
146 struct private_data *data = (struct private_data *)f->data;
148 return __archive_write_program_write(f, data->pdata, buff, length);
154 struct private_data *data = (struct private_data *)f->data;
156 return __archive_write_program_close(f, data->pdata);
162 struct private_data *data = (struct private_data *)f->data;
164 if (data) {
165 free(data->cmd);
166 archive_string_free(&data->description);
167 __archive_write_program_free(data->pdata);
168 free(data);
169 f->data = NULL;
180 struct archive_write_program_data *data;
182 data = calloc(1, sizeof(struct archive_write_program_data));
183 if (data == NULL)
184 return (data);
185 data->child_stdin = -1;
186 data->child_stdout = -1;
187 data->program_name = strdup(program);
188 return (data);
195 __archive_write_program_free(struct archive_write_program_data *data)
198 if (data) {
199 free(data->program_name);
200 free(data->child_buf);
201 free(data);
208 struct archive_write_program_data *data, const char *cmd)
212 if (data->child_buf == NULL) {
213 data->child_buf_len = 65536;
214 data->child_buf_avail = 0;
215 data->child_buf = malloc(data->child_buf_len);
217 if (data->child_buf == NULL) {
224 ret = __archive_create_child(cmd, &data->child_stdin,
225 &data->child_stdout, &data->child);
236 struct archive_write_program_data *data, const char *buf, size_t buf_len)
240 if (data->child_stdin == -1)
248 ret = write(data->child_stdin, buf, buf_len);
254 close(data->child_stdin);
255 data->child_stdin = -1;
256 fcntl(data->child_stdout, F_SETFL, 0);
262 if (data->child_stdout == -1) {
263 fcntl(data->child_stdin, F_SETFL, 0);
264 __archive_check_child(data->child_stdin,
265 data->child_stdout);
270 ret = read(data->child_stdout,
271 data->child_buf + data->child_buf_avail,
272 data->child_buf_len - data->child_buf_avail);
276 close(data->child_stdout);
277 data->child_stdout = -1;
278 fcntl(data->child_stdin, F_SETFL, 0);
282 __archive_check_child(data->child_stdin,
283 data->child_stdout);
289 data->child_buf_avail += ret;
292 data->child_buf, data->child_buf_avail);
295 data->child_buf_avail = 0;
300 * Write data to the filter stream.
304 struct archive_write_program_data *data, const void *buff, size_t length)
309 if (data->child == 0)
314 ret = child_write(f, data, buf, length);
317 "Can't write to program: %s", data->program_name);
331 struct archive_write_program_data *data)
336 if (data->child == 0)
340 close(data->child_stdin);
341 data->child_stdin = -1;
342 fcntl(data->child_stdout, F_SETFL, 0);
346 bytes_read = read(data->child_stdout,
347 data->child_buf + data->child_buf_avail,
348 data->child_buf_len - data->child_buf_avail);
356 "Error reading from program: %s", data->program_name);
360 data->child_buf_avail += bytes_read;
363 data->child_buf, data->child_buf_avail);
368 data->child_buf_avail = 0;
373 if (data->child_stdin != -1)
374 close(data->child_stdin);
375 if (data->child_stdout != -1)
376 close(data->child_stdout);
377 while (waitpid(data->child, &status, 0) == -1 && errno == EINTR)
380 CloseHandle(data->child);
382 data->child = 0;
386 "Error closing program: %s", data->program_name);