rrd_info_t *rrd_info( int argc, char **argv) { struct optparse_long longopts[] = { {"daemon", 'd', OPTPARSE_REQUIRED}, {"noflush", 'F', OPTPARSE_NONE}, {0}, }; struct optparse options; int opt; rrd_info_t *info; char *opt_daemon = NULL; int status; int flushfirst = 1; optparse_init(&options, argc, argv); while ((opt = optparse_long(&options, longopts, NULL)) != -1) { switch (opt) { case 'd': if (opt_daemon != NULL) free (opt_daemon); opt_daemon = strdup(options.optarg); if (opt_daemon == NULL) { rrd_set_error ("strdup failed."); return NULL; } break; case 'F': flushfirst = 0; break; case '?': rrd_set_error("%s", options.errmsg); return NULL; } } /* while (opt != -1) */ if (options.argc - options.optind != 1) { rrd_set_error ("Usage: rrdtool %s [--daemon |-d <addr> [--noflush|-F]] <file>", options.argv[0]); return NULL; } if (flushfirst) { status = rrdc_flush_if_daemon(opt_daemon, options.argv[options.optind]); if (status) return (NULL); } rrdc_connect (opt_daemon); if (rrdc_is_connected (opt_daemon)) info = rrdc_info(options.argv[options.optind]); else info = rrd_info_r(options.argv[options.optind]); if (opt_daemon) free(opt_daemon); return (info); } /* rrd_info_t *rrd_info */
rrd_info_t *rrd_info( int argc, char **argv) { rrd_info_t *info; char *opt_daemon = NULL; int status; int flushfirst = 1; optind = 0; opterr = 0; /* initialize getopt */ while (42) { int opt; int option_index = 0; static struct option long_options[] = { {"daemon", required_argument, 0, 'd'}, {"noflush", no_argument, 0, 'F'}, {0, 0, 0, 0} }; opt = getopt_long(argc, argv, "d:F", long_options, &option_index); if (opt == EOF) break; switch (opt) { case 'd': if (opt_daemon != NULL) free (opt_daemon); opt_daemon = strdup (optarg); if (opt_daemon == NULL) { rrd_set_error ("strdup failed."); return (NULL); } break; case 'F': flushfirst = 0; break; default: rrd_set_error ("Usage: rrdtool %s [--daemon <addr> [--noflush]] <file>", argv[0]); return (NULL); break; } } /* while (42) */ if ((argc - optind) != 1) { rrd_set_error ("Usage: rrdtool %s [--daemon <addr> [--noflush]] <file>", argv[0]); return (NULL); } if( flushfirst ) { status = rrdc_flush_if_daemon(opt_daemon, argv[optind]); if (status) return (NULL); } rrdc_connect (opt_daemon); if (rrdc_is_connected (opt_daemon)) info = rrdc_info (argv[optind]); else info = rrd_info_r(argv[optind]); if (opt_daemon) free(opt_daemon); return (info); } /* rrd_info_t *rrd_info */