bool apteryx_set_sp (sync_partner *sp, const char *path, const char *value) { char *full_path = sp_path (sp, path); if (!full_path) { return false; } apteryx_set (full_path, value); free (full_path); return true; }
/* Application entry point */ int main (int argc, char **argv) { const char *filter = NULL; APTERYX_MODE mode = -1; char *path = NULL; char *param = NULL; GList * _iter; int c; uint64_t value; /* Parse options */ while ((c = getopt (argc, argv, "hdsgftwpxlu::")) != -1) { switch (c) { case 'd': apteryx_debug = true; break; case 's': mode = MODE_SET; break; case 'g': mode = MODE_GET; break; case 'f': mode = MODE_FIND; break; case 't': mode = MODE_TRAVERSE; break; case 'w': mode = MODE_WATCH; break; case 'p': mode = MODE_PROVIDE; break; case 'x': mode = MODE_PROXY; break; case 'l': mode = MODE_TIMESTAMP; break; case 'u': mode = MODE_TEST; if (optarg && optarg[0] == '=') memmove(optarg, optarg+1, strlen(optarg)); filter = optarg; break; case '?': case 'h': default: usage (); return 0; } } for (c = optind; c < argc; c++) { if (path == NULL) path = argv[c]; else if (param == NULL) param = argv[c]; else { usage (); return 0; } } /* Handle SIGTERM/SIGINT/SIGPIPE gracefully */ if (mode != MODE_TEST) { signal (SIGTERM, (__sighandler_t) termination_handler); signal (SIGINT, (__sighandler_t) termination_handler); } switch (mode) { case MODE_GET: if (!path || param) { usage (); return 0; } apteryx_init (apteryx_debug); if ((param = apteryx_get (path))) { printf ("%s\n", param); free (param); } else printf ("Not found\n"); apteryx_shutdown (); break; case MODE_SET: if (!path) { usage (); return 0; } apteryx_init (apteryx_debug); if (!apteryx_set (path, param)) printf ("Failed\n"); apteryx_shutdown (); break; case MODE_FIND: if (!path || param) { usage (); return 0; } apteryx_init (apteryx_debug); GList *paths = apteryx_search (path); for (_iter = paths; _iter; _iter = _iter->next) printf (" %s\n", (char *) _iter->data); g_list_free_full (paths, free); apteryx_shutdown (); break; case MODE_TRAVERSE: if (param) { usage (); return 0; } if (!path) { path = ""; } apteryx_init (apteryx_debug); apteryx_dump (path, stdout); apteryx_shutdown (); break; case MODE_WATCH: if (param) { usage (); return 0; } if (!path) { path = "/"; } apteryx_init (apteryx_debug); apteryx_watch (path, watch_callback); while (running) pause (); apteryx_unwatch (path, watch_callback); apteryx_shutdown (); break; case MODE_PROVIDE: if (!path || !param) { usage (); return 0; } apteryx_init (apteryx_debug); provide_value = param; apteryx_provide (path, provide_callback); while (running) pause (); apteryx_unprovide (path, provide_callback); apteryx_shutdown (); break; case MODE_PROXY: if (!path || !param) { usage (); return 0; } apteryx_init (apteryx_debug); apteryx_proxy (path, param); apteryx_shutdown (); break; case MODE_TIMESTAMP: if (param) { usage (); return 0; } if (!path) { path = ""; } apteryx_init (apteryx_debug); value = apteryx_timestamp (path); printf ("%"PRIu64"\n", value); apteryx_shutdown (); break; case MODE_TEST: if (path || param) { usage (); return 0; } apteryx_init (apteryx_debug); run_unit_tests (filter); usleep (100000); apteryx_shutdown (); break; default: usage (); return 0; } return 0; }