Lines Matching refs:file_info

73 static file_info_t file_info;
84 file_info_t* file_info = cookie;
85 file_info->is_write = false;
86 strncpy(file_info->filename, filename, PATH_MAX);
87 file_info->filename[PATH_MAX] = '\0';
88 file_info->netboot_file = NULL;
96 static zx_status_t alloc_paver_buffer(file_info_t* file_info, size_t size) {
98 status = zx_vmo_create(size, 0, &file_info->paver.buffer_handle);
103 zx_object_set_property(file_info->paver.buffer_handle, ZX_PROP_NAME, "paver", 5);
106 0, file_info->paver.buffer_handle, 0, size, &buffer);
109 zx_handle_close(file_info->paver.buffer_handle);
112 file_info->paver.buffer = (uint8_t*)buffer;
116 static zx_status_t dealloc_paver_buffer(file_info_t* file_info) {
117 zx_status_t status = zx_vmar_unmap(zx_vmar_root_self(), (uintptr_t)file_info->paver.buffer,
118 file_info->paver.size);
124 status = zx_handle_close(file_info->paver.buffer_handle);
130 file_info->paver.buffer = NULL;
152 file_info_t* file_info = arg;
156 while (read_ndx < file_info->paver.size) {
157 sync_completion_reset(&file_info->paver.data_ready);
158 size_t write_ndx = atomic_load(&file_info->paver.offset);
162 if (sync_completion_wait(&file_info->paver.data_ready, ZX_SEC(5 * TFTP_TIMEOUT_SECS))
171 int r = write(file_info->paver.fd, &file_info->paver.buffer[read_ndx],
181 float complete = ((float)read_ndx / (float)file_info->paver.size) * 100.0;
188 close(file_info->paver.fd);
190 unsigned int refcount = atomic_fetch_sub(&file_info->paver.buf_refcount, 1);
192 dealloc_paver_buffer(file_info);
197 zx_object_wait_one(file_info->paver.process, ZX_TASK_TERMINATED,
200 zx_handle_close(file_info->paver.process);
203 file_info->filename[0] = '\0';
208 static tftp_status paver_open_write(const char* filename, size_t size, file_info_t* file_info) {
260 &file_info->paver.process, NULL);
275 if ((status = alloc_paver_buffer(file_info, size)) != ZX_OK) {
279 file_info->type = paver;
280 file_info->paver.fd = fds[1];
281 file_info->paver.size = size;
284 atomic_store(&file_info->paver.buf_refcount, 2);
285 atomic_store(&file_info->paver.offset, 0);
288 if ((thrd_create(&file_info->paver.buf_copy_thrd, paver_copy_buffer, (void*)file_info))
294 thrd_detach(file_info->paver.buf_copy_thrd);
299 dealloc_paver_buffer(file_info);
313 file_info_t* file_info = cookie;
314 file_info->is_write = true;
315 strncpy(file_info->filename, filename, PATH_MAX);
316 file_info->filename[PATH_MAX] = '\0';
320 file_info->type = netboot;
321 file_info->netboot_file = netboot_get_buffer(filename, size);
322 if (file_info->netboot_file != NULL) {
327 tftp_status status = paver_open_write(filename, size, file_info);
329 file_info->filename[0] = '\0';
357 file_info_t* file_info = cookie;
358 if (file_info->type == netboot && file_info->netboot_file != NULL) {
359 nbfile* nb_file = file_info->netboot_file;
366 } else if (file_info->type == paver) {
372 if (((size_t)offset > file_info->paver.size)
373 || (offset + *length) > file_info->paver.size) {
376 memcpy(&file_info->paver.buffer[offset], data, *length);
378 atomic_store(&file_info->paver.offset, new_offset);
380 sync_completion_signal(&file_info->paver.data_ready);
395 file_info_t* file_info = cookie;
396 if (file_info->type == netboot && file_info->netboot_file == NULL) {
398 } else if (file_info->type == paver) {
399 unsigned int refcount = atomic_fetch_sub(&file_info->paver.buf_refcount, 1);
401 dealloc_paver_buffer(file_info);
459 &file_info);
462 file_close(&file_info);
467 file_close(&file_info);
506 tftp_status status = tftp_handle_msg(session, &transport_info, &file_info,
513 file_info.is_write ? "write" : "read",
514 file_info.filename);
521 file_close(&file_info);
534 &file_info);