int avro_file_reader(const char *path, avro_file_reader_t * reader) { int rval; FILE *fp; avro_file_reader_t r = malloc(sizeof(struct avro_file_reader_t_)); if (!r) { return ENOMEM; } fp = fopen(path, "r"); if (!fp) { return errno; } r->reader = avro_reader_file(fp); if (!r->reader) { return ENOMEM; } rval = file_read_header(r->reader, &r->writers_schema, r->sync, sizeof(r->sync)); if (rval == 0) { rval = file_read_block_count(r); if (rval == 0) { *reader = r; } } return rval; }
static int file_writer_open(const char *path, avro_file_writer_t w) { int rval; FILE *fp; avro_reader_t reader; fp = fopen(path, "r"); if (!fp) { return errno; } reader = avro_reader_file(fp); if (!reader) { return ENOMEM; } rval = file_read_header(reader, &w->writers_schema, w->sync, sizeof(w->sync)); avro_reader_free(reader); /* Position to end of file and get ready to write */ rval = file_writer_init_fp(path, "a", w); if (rval) { free(w); } return rval; }
static GwyContainer* ezdfile_load(const gchar *filename, G_GNUC_UNUSED GwyRunType mode, GError **error) { GwyContainer *meta, *container = NULL; guchar *buffer = NULL; gsize size = 0; GError *err = NULL; EZDSection *section = NULL; GwyDataField *dfield = NULL; GPtrArray *ezdfile; guint header_size, n; gint i; gchar *p; if (!gwy_file_get_contents(filename, &buffer, &size, &err)) { err_GET_FILE_CONTENTS(error, &err); return NULL; } if (strncmp(buffer, MAGIC, MAGIC_SIZE) || !(header_size = find_data_start(buffer, size))) { err_FILE_TYPE(error, "EZD/NID"); gwy_file_abandon_contents(buffer, size, NULL); return NULL; } ezdfile = g_ptr_array_new(); p = g_strndup(buffer, header_size - DATA_MAGIC_SIZE); if (!file_read_header(ezdfile, p, error)) { gwy_file_abandon_contents(buffer, size, NULL); g_free(p); return NULL; } g_free(p); n = find_data_offsets(buffer + header_size, size - header_size, ezdfile, error); if (!n) { gwy_file_abandon_contents(buffer, size, NULL); return NULL; } container = gwy_container_new(); i = 0; for (n = 0; n < ezdfile->len; n++) { gchar key[24]; section = (EZDSection*)g_ptr_array_index(ezdfile, n); if (!section->data) continue; dfield = gwy_data_field_new(section->xres, section->yres, 1.0, 1.0, FALSE); read_data_field(dfield, section); g_snprintf(key, sizeof(key), "/%d/data", i); gwy_container_set_object_by_name(container, key, dfield); g_object_unref(dfield); fix_scales(section, i, container); meta = ezdfile_get_metadata(ezdfile, n); if (meta) { g_snprintf(key, sizeof(key), "/%d/meta", i); gwy_container_set_object_by_name(container, key, meta); g_object_unref(meta); } i++; } gwy_file_abandon_contents(buffer, size, NULL); ezdfile_free(ezdfile); return container; }