void mongo_gridfs_list (config_t *config) { mongo_sync_cursor *cursor; mongo_sync_gridfs *gfs; gfs = mongo_gridfs_connect (config); cursor = mongo_sync_gridfs_list (gfs, NULL); while (mongo_sync_cursor_next (cursor)) { bson *meta = mongo_sync_cursor_get_data (cursor); bson_cursor *c; const guint8 oid[12]; gint32 i32, chunk_size; gint64 length, date; const gchar *md5, *filename = NULL; gchar *oid_s; c = bson_find (meta, "_id"); if (!bson_cursor_get_oid (c, (const guint8 **)&oid)) mongo_gridfs_error (errno); bson_cursor_find (c, "length"); if (!bson_cursor_get_int32 (c, &i32)) { if (!bson_cursor_get_int64 (c, &length)) mongo_gridfs_error (errno); } else length = i32; bson_cursor_find (c, "chunkSize"); if (!bson_cursor_get_int32 (c, &chunk_size)) mongo_gridfs_error (errno); bson_cursor_find (c, "uploadDate"); if (!bson_cursor_get_utc_datetime (c, &date)) mongo_gridfs_error (errno); bson_cursor_find (c, "md5"); if (!bson_cursor_get_string (c, &md5)) mongo_gridfs_error (errno); bson_cursor_find (c, "filename"); bson_cursor_get_string (c, &filename); bson_cursor_free (c); oid_s = mongo_util_oid_as_string (oid); printf ("{ _id: ObjectID(\"%s\"), length: %" G_GINT64_FORMAT ", chunkSize: %i, uploadDate: %" G_GINT64_FORMAT ", md5: \"%s\"", oid_s, length, chunk_size, date, md5); g_free (oid_s); if (filename) printf (", filename: \"%s\"", filename); printf (" }\n"); if (config->verbose) { c = bson_cursor_new (meta); printf ("\tExtra metadata: [ "); while (bson_cursor_next (c)) { if (strcmp (bson_cursor_key (c), "_id") && strcmp (bson_cursor_key (c), "length") && strcmp (bson_cursor_key (c), "chunkSize") && strcmp (bson_cursor_key (c), "uploadDate") && strcmp (bson_cursor_key (c), "md5") && strcmp (bson_cursor_key (c), "filename")) { printf ("%s (%s), ", bson_cursor_key (c), bson_cursor_type_as_string (c)); } } bson_cursor_free (c); printf ("]\n"); } } mongo_sync_gridfs_free (gfs, TRUE); }
int ej_bson_parse_document( bson_cursor *bc, const unsigned char *field_name, bson **p_value) { if (bson_cursor_type(bc) != BSON_TYPE_DOCUMENT) { err("parse_bson_document: document field type expected for '%s', got %s", field_name, bson_cursor_type_as_string(bc)); return -1; } bson *data = NULL; if (!bson_cursor_get_document(bc, &data) || !data) { err("parse_bson_document: failed to fetch document for '%s'", field_name); return -1; } if (p_value) { *p_value = data; } else { bson_free(data); } return 1; }