Ticket #975: opensync_list_pattern.2.diff
| File opensync_list_pattern.2.diff, 19.8 KB (added by bricks, 3 years ago) |
|---|
-
wrapper/opensync-plugin.i
120 120 } 121 121 122 122 int num_plugins() { 123 return osync_plugin_env_num_plugins(self); 123 OSyncList *plugins = osync_plugin_env_get_plugins(self); 124 return osync_list_length(plugins); 124 125 } 125 126 126 127 Plugin *nth_plugin(int nth) { 127 Plugin *plugin = osync_plugin_env_nth_plugin(self, nth); 128 OSyncList *plugins = osync_plugin_env_get_plugins(self); 129 130 Plugin *plugin = (OSyncPlugin*)osync_list_nth_data(plugins, nth); 128 131 if (plugin) 129 132 osync_plugin_ref(plugin); 130 133 return plugin; … … 190 193 osync_plugin_info_add_objtype(self, sink); 191 194 } 192 195 193 int num_objtypes() { 194 return osync_plugin_info_num_objtypes(self); 196 unsigned int num_objtypes() { 197 OSyncList *objtypesinks = osync_plugin_info_get_objtypes(self); 198 unsigned int num = osync_list_length(objtypesinks); 199 osync_list_free(objtypesinks); 200 return num; 195 201 } 196 202 197 203 ObjTypeSink *nth_objtype(int nth) { 198 ObjTypeSink *ret = osync_plugin_info_nth_objtype(self, nth); 204 /* TODO: return a list structure of phython */ 205 OSyncList *objtypesinks = osync_plugin_info_get_objtypes(self); 206 ObjTypeSink *ret = (ObjTypeSink*)osync_list_nth_data(objtypesinks, nth); 199 207 if (ret) 200 208 osync_objtype_sink_ref(ret); 209 osync_list_free(objtypesinks); 201 210 return ret; 202 211 } 203 212 -
opensync/plugin/opensync_plugin_env_internals.h
50 50 */ 51 51 OSYNC_TEST_EXPORT osync_bool osync_plugin_env_plugin_is_usable(OSyncPluginEnv *env, const char *pluginname, OSyncError **error); 52 52 53 /** @brief Returns the number of loaded plugins 54 * 55 * TODO: This function isn't necessary anymore and can possibly be removed 56 * 57 * Returns the number of loaded plugins. 0 if used before initialization 58 * 59 * @param env Pointer to a OSyncPluginEnv environment 60 * @returns Number of plugins 61 * 62 */ 63 OSYNC_TEST_EXPORT unsigned int osync_plugin_env_num_plugins(OSyncPluginEnv *env); 64 53 65 /*@}*/ 54 66 55 67 #endif /* _OPENSYNC_PLUGIN_ENV_INTERNALS_H_ */ -
opensync/plugin/opensync_plugin_env.c
214 214 return osync_list_length(env->plugins); 215 215 } 216 216 217 OSync Plugin *osync_plugin_env_nth_plugin(OSyncPluginEnv *env, unsigned int nth)217 OSyncList *osync_plugin_env_get_plugins(OSyncPluginEnv *env) 218 218 { 219 return (OSyncPlugin *)osync_list_nth_data(env->plugins, nth);219 return osync_list_copy(env->plugins); 220 220 } 221 221 222 222 osync_bool osync_plugin_env_plugin_is_usable(OSyncPluginEnv *env, const char *pluginname, OSyncError **error) -
opensync/plugin/opensync_plugin_info.c
27 27 28 28 #include "opensync-merger.h" 29 29 #include "opensync-version.h" 30 #include "opensync_list.h" 30 31 31 32 OSyncPluginInfo *osync_plugin_info_new(OSyncError **error) 32 33 { … … 171 172 osync_objtype_sink_ref(sink); 172 173 } 173 174 174 unsigned int osync_plugin_info_num_objtypes(OSyncPluginInfo *info) 175 { 175 OSyncList *osync_plugin_info_get_objtypes(OSyncPluginInfo *info) { 176 176 osync_assert(info); 177 return osync_list_ length(info->objtypes);177 return osync_list_copy(info->objtypes); 178 178 } 179 179 180 OSyncObjTypeSink *osync_plugin_info_nth_objtype(OSyncPluginInfo *info, unsigned int nth)181 {182 osync_assert(info);183 return osync_list_nth_data(info->objtypes, nth);184 }185 186 180 OSyncObjTypeSink *osync_plugin_info_get_main_sink(OSyncPluginInfo *info) 187 181 { 188 182 osync_assert(info); -
opensync/plugin/opensync_plugin_env.h
101 101 */ 102 102 OSYNC_EXPORT OSyncPlugin *osync_plugin_env_find_plugin(OSyncPluginEnv *env, const char *name); 103 103 104 /* * @brief Returns the number of loaded plugins104 /* @brief Get all plugins which are registered in the Plugin Env 105 105 * 106 * Returns the number of loaded plugins. 0 if used before initialization 107 * 108 * @param env Pointer to a OSyncPluginEnv environment 109 * @returns Number of plugins 110 * 106 * @param env Pointer to a OSyncPluginEnv 107 * @return A shallow copy of the internal plugin list 111 108 */ 112 OSYNC_EXPORT unsigned int osync_plugin_env_num_plugins(OSyncPluginEnv *env);109 OSYNC_EXPORT OSyncList *osync_plugin_env_get_plugins(OSyncPluginEnv *env); 113 110 114 /** @brief Returns pointer to nth plugin115 *116 * Returns pointer to nth plugin117 *118 * @param env Pointer to a OSyncPluginEnv environment119 * @param nth Which plugin to return120 * @returns Pointer to plugin121 *122 */123 OSYNC_EXPORT OSyncPlugin *osync_plugin_env_nth_plugin(OSyncPluginEnv *env, unsigned int nth);124 125 111 /*@}*/ 126 112 127 113 #endif /* _OPENSYNC_PLUGIN_ENV_H_ */ -
opensync/plugin/opensync_plugin_info.h
110 110 */ 111 111 OSYNC_EXPORT void osync_plugin_info_add_objtype(OSyncPluginInfo *info, OSyncObjTypeSink *sink); 112 112 113 /** @brief Returns the number of added object types (sinks) 113 /** 114 * @brief Returns all Objtype Sinks as a list 114 115 * 115 * @param info Pointer to the plugin info object 116 * @returns the number of object types in the plugin info 117 * 116 * @param Pointer to a OSyncPluginInfo 117 * @return A shallow copy of the internal objtype list 118 118 */ 119 OSYNC_EXPORT unsigned int osync_plugin_info_num_objtypes(OSyncPluginInfo *info);119 OSYNC_EXPORT OSyncList *osync_plugin_info_get_objtypes(OSyncPluginInfo *info); 120 120 121 /** @brief Returns the nth added object type (sink)122 *123 * @param info Pointer to the plugin info object124 * @param nth the index of the object type (sink) to return125 * @returns the object type (sink) at the specified index126 *127 */128 OSYNC_EXPORT OSyncObjTypeSink *osync_plugin_info_nth_objtype(OSyncPluginInfo *info, unsigned int nth);129 130 131 121 /** @brief Returns the Main Sink 132 122 * 133 123 * @param info Pointer to the plugin info object -
opensync/client/opensync_client.c
30 30 #include "opensync-helper.h" 31 31 #include "helper/opensync_hashtable_internals.h" 32 32 33 #include "common/opensync_list.h" 34 33 35 #include "opensync-ipc.h" 34 36 #include "ipc/opensync_serializer_internals.h" 35 37 #include "ipc/opensync_message_internals.h" … … 575 577 const char *objtype = NULL; 576 578 const char *preferred_format = NULL; 577 579 OSyncList *o = NULL; 580 OSyncList *objtypesinks = NULL; 581 OSyncList *list; 578 582 OSyncObjFormatSink *format_sink = NULL; 579 unsigned int n, num_sinks;580 583 osync_bool couldinit; 581 584 582 585 osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, client, message, error); … … 698 701 goto error; 699 702 } 700 703 701 num_sinks = osync_plugin_info_num_objtypes(client->plugin_info);702 for (n = 0; n < num_sinks; n++) {703 704 sink = osync_plugin_info_nth_objtype(client->plugin_info, n);704 objtypesinks = osync_plugin_info_get_objtypes(client->plugin_info); 705 list = objtypesinks; 706 while (list) { 707 sink = (OSyncObjTypeSink*)list->data; 705 708 if (!osync_objtype_sink_load_anchor(sink, client->plugin_info, error)) { 706 709 goto error_finalize; 707 710 } … … 709 712 if (!osync_objtype_sink_load_hashtable(sink, client->plugin_info, error)) { 710 713 goto error_finalize; 711 714 } 712 715 list = list->next; 713 716 } 717 osync_list_free(objtypesinks); 714 718 715 719 main_sink = osync_plugin_info_get_main_sink(client->plugin_info); 716 720 if (main_sink) { … … 745 749 error_free_message: 746 750 osync_message_unref(reply); 747 751 error_finalize: 752 osync_list_free(objtypesinks); 748 753 osync_plugin_finalize(client->plugin, client->plugin_data); 749 754 error: 750 755 osync_free(enginepipe); … … 816 821 static osync_bool _osync_client_handle_discover(OSyncClient *client, OSyncMessage *message, OSyncError **error) 817 822 { 818 823 OSyncMessage *reply = NULL; 819 unsigned int i = 0;820 824 OSyncPluginConfig *config = NULL; 821 825 OSyncList *res = NULL; 822 unsigned int numobjs = 0;823 826 unsigned int avail = 0; 824 827 OSyncObjTypeSink *sink = NULL; 825 828 OSyncVersion *version = NULL; … … 828 831 int size = 0; 829 832 unsigned int num_res = 0; 830 833 OSyncPluginResource *resource = NULL; 834 OSyncList *objtypesinks = NULL; 835 OSyncList *list; 831 836 832 837 config = osync_plugin_info_get_config(client->plugin_info); 833 838 res = osync_plugin_config_get_resources(config); … … 846 851 else 847 852 osync_message_write_int(reply, 0); 848 853 849 numobjs = osync_plugin_info_num_objtypes(client->plugin_info); 850 for (i = 0; i < numobjs; i++) { 851 sink = osync_plugin_info_nth_objtype(client->plugin_info, i); 854 objtypesinks = osync_plugin_info_get_objtypes(client->plugin_info); 855 list = objtypesinks; 856 while(list) { 857 sink = (OSyncObjTypeSink*)list->data; 852 858 if (osync_objtype_sink_is_available(sink)) { 853 859 avail++; 854 860 } 861 list = list->next; 855 862 } 856 863 857 864 osync_message_write_uint(reply, avail); 858 865 859 for (i = 0; i < numobjs; i++) { 860 sink = osync_plugin_info_nth_objtype(client->plugin_info, i); 866 list = objtypesinks; 867 while(list) { 868 sink = (OSyncObjTypeSink*)list->data; 861 869 if (osync_objtype_sink_is_available(sink)) { 862 870 if (!osync_marshal_objtype_sink(reply, sink, error)) 863 871 goto error_free_message; 864 872 } 873 list = list->next; 865 874 } 866 875 osync_list_free(objtypesinks); 876 867 877 version = osync_plugin_info_get_version(client->plugin_info); 868 878 if (version) { 869 879 osync_message_write_int(reply, 1); … … 909 919 return TRUE; 910 920 911 921 error_free_message: 922 osync_list_free(objtypesinks); 912 923 osync_message_unref(reply); 913 924 error: 914 925 osync_trace(TRACE_EXIT_ERROR, "%s: %s", __func__, osync_error_print(error)); -
tools/osyncplugin.c
448 448 449 449 static void *plugin_initialize(OSyncError **error) 450 450 { 451 unsigned int n, num_sinks = osync_plugin_info_num_objtypes(plugin_info); 451 OSyncList *list; 452 OSyncList *objtypesinks = NULL; 452 453 void *plugin_data; 453 454 osync_bool couldinit; 454 455 couldinit = osync_plugin_initialize(plugin, &(plugin_data), plugin_info, error); 455 456 457 objtypesinks = osync_plugin_info_get_objtypes(plugin_info); 458 list = objtypesinks; 459 while(list) { 460 OSyncObjTypeSink *sink = (OSyncObjTypeSink*)list->data; 461 if (!osync_objtype_sink_load_anchor(sink, plugin_info, error)) 462 goto error; 456 463 457 for (n = 0; n < num_sinks; n++) {458 OSyncObjTypeSink *sink = osync_plugin_info_nth_objtype(plugin_info, n);459 460 if (!osync_objtype_sink_load_anchor(sink, plugin_info, error))461 return NULL;462 463 464 if (!osync_objtype_sink_load_hashtable(sink, plugin_info, error)) 464 return NULL; 465 goto error; 466 467 list = list->next; 465 468 } 469 osync_list_free(objtypesinks); 466 470 467 471 return plugin_data; 472 error: 473 osync_list_free(objtypesinks); 474 return NULL; 468 475 } 469 476 470 477 static void finalize_plugin(void **plugin_data) … … 598 605 599 606 static osync_bool get_changes(Command *cmd, SyncType type, OSyncError **error) 600 607 { 601 int num, i;602 608 OSyncObjTypeSink *sink = NULL; 609 OSyncList *list; 610 OSyncList *objtypesinks = NULL; 603 611 const char *objtype = cmd->arg; 604 612 605 613 if (objtype) { … … 613 621 614 622 } else { 615 623 /* all available objtypes */ 616 num = osync_plugin_info_num_objtypes(plugin_info); 617 for (i=0; i < num; i++) { 618 sink = osync_plugin_info_nth_objtype(plugin_info, i); 624 objtypesinks = osync_plugin_info_get_objtypes(plugin_info); 625 list = objtypesinks; 626 while(list) { 627 sink = (OSyncObjTypeSink*)list->data; 619 628 620 629 cmd->sink = sink; 621 630 if (!get_changes_sink(cmd, sink, type, error)) 622 631 goto error; 632 list = list->next; 623 633 } 624 625 634 /* last but not least - the main sink */ 626 635 if (get_main_sink()) 627 628 636 if (!get_changes_sink(cmd, get_main_sink(), type, error)) 629 637 goto error; 638 639 osync_list_free(objtypesinks); 630 640 } 631 641 632 642 return TRUE; 633 643 634 644 error: 645 osync_list_free(objtypesinks); 635 646 return FALSE; 636 647 } 637 648 … … 699 710 700 711 static osync_bool connect_plugin(Command *cmd, OSyncError **error) 701 712 { 702 unsigned int i, num;703 713 OSyncObjTypeSink *sink = NULL; 714 OSyncList *objtypesinks = NULL; 715 OSyncList *list; 704 716 const char *objtype = cmd->arg; 705 717 706 718 if (objtype) { … … 711 723 if (!connect_sink(cmd, sink, error)) 712 724 goto error; 713 725 } else { 714 num = osync_plugin_info_num_objtypes(plugin_info); 715 for (i=0; i < num; i++) { 716 sink = osync_plugin_info_nth_objtype(plugin_info, i); 726 objtypesinks = osync_plugin_info_get_objtypes(plugin_info); 727 list = objtypesinks; 728 while(list) { 729 sink = (OSyncObjTypeSink*)list->data; 717 730 718 731 if (!connect_sink(cmd, sink, error)) 719 732 goto error; 733 list = list->next; 720 734 } 721 735 722 736 /* last but not least - the main sink */ 723 737 if (get_main_sink()) 724 738 if (!connect_sink(cmd, get_main_sink(), error)) 725 739 goto error; 740 741 osync_list_free(objtypesinks); 726 742 } 727 743 728 744 return TRUE; 729 745 error: 746 osync_list_free(objtypesinks); 730 747 return FALSE; 731 748 } 732 749 … … 790 807 791 808 static osync_bool disconnect(Command *cmd, OSyncError **error) 792 809 { 793 794 int i, num;810 OSyncList *list; 811 OSyncList *objtypesinks = NULL; 795 812 OSyncObjTypeSink *sink = NULL; 796 813 const char *objtype = cmd->arg; 797 814 … … 803 820 if (!disconnect_sink(cmd, sink, error)) 804 821 goto error; 805 822 } else { 806 num = osync_plugin_info_num_objtypes(plugin_info); 807 for (i=0; i < num; i++) { 808 sink = osync_plugin_info_nth_objtype(plugin_info, i); 823 objtypesinks = osync_plugin_info_get_objtypes(plugin_info); 824 list = objtypesinks; 825 while(list) { 826 sink = (OSyncObjTypeSink*)list->data; 809 827 810 828 if (!disconnect_sink(cmd, sink, error)) 811 829 goto error; 830 list = list->next; 812 831 } 813 832 814 833 /* last but not least - the main sink */ 815 834 if (get_main_sink()) 816 835 if (!disconnect_sink(cmd, get_main_sink(), error)) 817 836 goto error; 837 838 osync_list_free(objtypesinks); 818 839 } 819 840 820 841 return TRUE; 821 842 error: 843 osync_list_free(objtypesinks); 822 844 return FALSE; 823 845 } 824 846 … … 882 904 883 905 static osync_bool commit(Command *cmd, OSyncChange *change, OSyncError **error) 884 906 { 885 int i, num; 907 OSyncList *list; 908 OSyncList *objtypesinks = NULL; 886 909 OSyncObjTypeSink *sink = NULL; 887 910 const char *objtype = cmd->arg; 888 911 … … 896 919 if (!commit_sink(cmd, sink, change, error)) 897 920 goto error; 898 921 } else { 899 num = osync_plugin_info_num_objtypes(plugin_info); 900 for (i=0; i < num; i++) { 901 sink = osync_plugin_info_nth_objtype(plugin_info, i); 922 objtypesinks = osync_plugin_info_get_objtypes(plugin_info); 923 list = objtypesinks; 924 while(list){ 925 sink = (OSyncObjTypeSink*)list->data; 902 926 903 927 if (!commit_sink(cmd, sink, change, error)) 904 928 goto error; 929 list = list->next; 905 930 } 906 931 907 932 /* last but not least - the main sink */ 908 933 if (get_main_sink()) 909 934 if (!commit_sink(cmd, get_main_sink(), change, error)) 910 935 goto error; 936 937 osync_list_free(objtypesinks); 911 938 } 912 939 913 940 return TRUE; 914 941 error: 942 osync_list_free(objtypesinks); 915 943 return FALSE; 916 944 } 917 945 … … 998 1026 static osync_bool syncdone(Command *cmd, OSyncError **error) 999 1027 { 1000 1028 1001 int i, num; 1029 OSyncList *objtypesinks = NULL; 1030 OSyncList *list; 1002 1031 OSyncObjTypeSink *sink = NULL; 1003 1032 const char *objtype = cmd->arg; 1004 1033 … … 1010 1039 if (!syncdone_sink(cmd, sink, error)) 1011 1040 goto error; 1012 1041 } else { 1013 num = osync_plugin_info_num_objtypes(plugin_info); 1014 for (i=0; i < num; i++) { 1015 sink = osync_plugin_info_nth_objtype(plugin_info, i); 1042 objtypesinks = osync_plugin_info_get_objtypes(plugin_info); 1043 list = objtypesinks; 1044 while(list) { 1045 sink = (OSyncObjTypeSink*)list->data; 1016 1046 1017 1047 if (!syncdone_sink(cmd, sink, error)) 1018 1048 goto error; 1049 1050 list = list->next; 1019 1051 } 1020 1052 1021 1053 /* last but not least - the main sink */ 1022 1054 if (get_main_sink()) 1023 1055 if (!syncdone_sink(cmd, get_main_sink(), error)) 1024 1056 goto error; 1057 1058 osync_list_free(objtypesinks); 1025 1059 } 1026 1060 1027 1061 return TRUE; 1028 1062 error: 1063 osync_list_free(objtypesinks); 1029 1064 return FALSE; 1030 1065 } 1031 1066 … … 1081 1116 1082 1117 static osync_bool committedall(Command *cmd, OSyncError **error) 1083 1118 { 1084 int i, num; 1119 OSyncList *list; 1120 OSyncList *objtypesinks = NULL; 1085 1121 OSyncObjTypeSink *sink = NULL; 1086 1122 const char *objtype = cmd->arg; 1087 1123 … … 1093 1129 if (!committedall_sink(cmd, sink, error)) 1094 1130 goto error; 1095 1131 } else { 1096 num = osync_plugin_info_num_objtypes(plugin_info); 1097 for (i=0; i < num; i++) { 1098 sink = osync_plugin_info_nth_objtype(plugin_info, i); 1132 objtypesinks = osync_plugin_info_get_objtypes(plugin_info); 1133 list = objtypesinks; 1134 while(list) { 1135 sink = (OSyncObjTypeSink*)list->data; 1099 1136 1100 1137 if (!committedall_sink(cmd, sink, error)) 1101 1138 goto error; 1139 1140 list = list->next; 1102 1141 } 1103 1142 1104 1143 /* last but not least - the main sink */ 1105 1144 if (get_main_sink()) 1106 1145 if (!committedall_sink(cmd, get_main_sink(), error)) 1107 1146 goto error; 1147 1148 osync_list_free(objtypesinks); 1108 1149 } 1109 1150 1110 1151 return TRUE; 1111 1152 error: 1153 osync_list_free(objtypesinks); 1112 1154 return FALSE; 1113 1155 } 1114 1156 … … 1216 1258 } 1217 1259 1218 1260 static osync_bool plugin_list(OSyncError **error) { 1219 int num;1220 int i;1261 OSyncList *plugins; 1262 OSyncList *list; 1221 1263 1222 1264 assert(!plugin_env); 1223 1265 … … 1233 1275 if (!osync_plugin_env_load(plugin_env, pluginpath, error)) 1234 1276 goto error_free_formatenv; 1235 1277 1236 num= osync_plugin_env_num_plugins(plugin_env); 1237 for(i= 0; i < num; i++) { 1238 OSyncPlugin* plugin= osync_plugin_env_nth_plugin(plugin_env, i); 1278 plugins = osync_plugin_env_get_plugins(plugin_env); 1279 list = plugins; 1280 while(list) { 1281 OSyncPlugin* plugin = (OSyncPlugin*)list->data; 1239 1282 fprintf (stdout, "Name: %s\n", osync_plugin_get_name(plugin)); 1240 fprintf (stdout, "Description: %s\n", osync_plugin_get_description(plugin)); 1241 } 1283 fprintf (stdout, "Description: %s\n", osync_plugin_get_description(plugin)); 1284 list = list->next; 1285 } 1286 osync_list_free(plugins); 1242 1287 return TRUE; 1243 1288 1244 1289 error_free_formatenv: -
tests/mock-plugin/mock_sync.c
607 607 /* Now we register the objtypes that we can sync. This plugin is special. It can 608 608 * synchronize any objtype we configure it to sync and where a conversion 609 609 * path to the file format can be found */ 610 int i, numobjs = osync_plugin_info_num_objtypes(info); 611 for (i = 0; i < numobjs; i++) { 610 OSyncList *objtypesinks = osync_plugin_info_get_objtypes(info); 611 OSyncList *list = objtypesinks; 612 while(list) { 612 613 MockDir *dir = osync_try_malloc0(sizeof(MockDir), error); 613 614 osync_assert(dir); 614 615 615 616 dir->committed_all = TRUE; 616 617 617 OSyncObjTypeSink *sink = osync_plugin_info_nth_objtype(info, i);618 OSyncObjTypeSink *sink = (OSyncObjTypeSink*)list->data; 618 619 osync_assert(sink); 620 list = list->next; 619 621 620 622 const char *objtype = osync_objtype_sink_get_name(sink); 621 623 dir->res = osync_plugin_config_find_active_resource(config, objtype); … … 723 725 #endif 724 726 env->directories = g_list_append(env->directories, dir); 725 727 } 726 728 osync_list_free(objtypesinks); 727 729 osync_trace(TRACE_EXIT, "%s: %p", __func__, env); 728 730 return (void *)env; 729 731 } -
tests/engine-tests/check_engine_error.c
130 130 131 131 mock_env *env = osync_try_malloc0(sizeof(mock_env), error); 132 132 osync_assert(env); 133 134 OSyncObjTypeSink *sink = osync_plugin_info_nth_objtype(info, 0);133 OSyncList *objtypesinks = osync_plugin_info_get_objtypes(info); 134 OSyncObjTypeSink *sink = (OSyncObjTypeSink*)objtypesinks->data; 135 135 osync_assert(sink); 136 136 137 137 OSyncObjFormatSink *formatsink = osync_objformat_sink_new("mockformat1", error); … … 147 147 osync_plugin_info_add_objtype(info, sink); 148 148 osync_objtype_sink_unref(sink); 149 149 150 osync_list_free(objtypesinks); 150 151 osync_trace(TRACE_EXIT, "%s: %p", __func__, env); 151 152 return (void *)env; 152 153 }
