const char * plugin_api_infolist_fields (struct t_infolist *infolist) { if (!infolist || !infolist_valid (infolist)) return NULL; return infolist_fields (infolist); }
int upgrade_file_write_object (struct t_upgrade_file *upgrade_file, int object_id, struct t_infolist *infolist) { int i, argc, length; char **argv; const char *fields; void *buf; /* write all infolist variables */ infolist_reset_item_cursor (infolist); while (infolist_next (infolist)) { /* write object start with id */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_START)) { UPGRADE_ERROR(_("write - object type"), "object start"); return 0; } if (!upgrade_file_write_integer (upgrade_file, object_id)) { UPGRADE_ERROR(_("write - object id"), ""); return 0; } fields = infolist_fields (infolist); if (fields) { argv = string_split (fields, ",", 0, 0, &argc); if (argv && (argc > 0)) { for (i = 0; i < argc; i++) { switch (argv[i][0]) { case 'i': /* integer */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_INTEGER)) { UPGRADE_ERROR(_("write - infolist type"), "integer"); return 0; } if (!upgrade_file_write_integer (upgrade_file, infolist_integer (infolist, argv[i] + 2))) { UPGRADE_ERROR(_("write - variable"), "integer"); return 0; } break; case 's': /* string */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_STRING)) { UPGRADE_ERROR(_("write - infolist type"), "string"); return 0; } if (!upgrade_file_write_string (upgrade_file, infolist_string (infolist, argv[i] + 2))) { UPGRADE_ERROR(_("write - variable"), "string"); return 0; } break; case 'p': /* pointer */ /* pointer in not used in upgrade files, only buffer is */ break; case 'b': /* buffer */ buf = infolist_buffer (infolist, argv[i] + 2, &length); if (buf && (length > 0)) { if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_BUFFER)) { UPGRADE_ERROR(_("write - infolist type"), "buffer"); return 0; } if (!upgrade_file_write_buffer (upgrade_file, buf, length)) { UPGRADE_ERROR(_("write - variable"), "buffer"); return 0; } } break; case 't': /* time */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_VAR)) { UPGRADE_ERROR(_("write - object type"), "object var"); return 0; } if (!upgrade_file_write_string (upgrade_file, argv[i] + 2)) { UPGRADE_ERROR(_("write - variable name"), ""); return 0; } if (!upgrade_file_write_integer (upgrade_file, INFOLIST_TIME)) { UPGRADE_ERROR(_("write - infolist type"), "time"); return 0; } if (!upgrade_file_write_time (upgrade_file, infolist_time (infolist, argv[i] + 2))) { UPGRADE_ERROR(_("write - variable"), "time"); return 0; } break; } } } if (argv) string_free_split (argv); } /* write object end */ if (!upgrade_file_write_integer (upgrade_file, UPGRADE_TYPE_OBJECT_END)) return 0; } return 1; }