cregit-Linux how code gets into the kernel

Release 4.7 tools/usb/usbip/src/usbip.c

/*
 * command structure borrowed from udev
 * (git://git.kernel.org/pub/scm/linux/hotplug/udev.git)
 *
 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
 *               2005-2007 Takahiro Hirofuchi
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

#include <stdio.h>
#include <stdlib.h>

#include <getopt.h>
#include <syslog.h>

#include "usbip_common.h"
#include "usbip_network.h"
#include "usbip.h"

static int usbip_help(int argc, char *argv[]);
static int usbip_version(int argc, char *argv[]);


static const char usbip_version_string[] = PACKAGE_STRING;


static const char usbip_usage_string[] =
	"usbip [--debug] [--log] [--tcp-port PORT] [version]\n"
	"             [help] <command> <args>\n";


static void usbip_usage(void) { printf("usage: %s", usbip_usage_string); }

Contributors

PersonTokensPropCommitsCommitProp
takahiro hirofuchitakahiro hirofuchi960.00%150.00%
matt mooneymatt mooney640.00%150.00%
Total15100.00%2100.00%

struct command { const char *name; int (*fn)(int argc, char *argv[]); const char *help; void (*usage)(void); }; static const struct command cmds[] = { { .name = "help", .fn = usbip_help, .help = NULL, .usage = NULL }, { .name = "version", .fn = usbip_version, .help = NULL, .usage = NULL }, { .name = "attach", .fn = usbip_attach, .help = "Attach a remote USB device", .usage = usbip_attach_usage }, { .name = "detach", .fn = usbip_detach, .help = "Detach a remote USB device", .usage = usbip_detach_usage }, { .name = "list", .fn = usbip_list, .help = "List exportable or local USB devices", .usage = usbip_list_usage }, { .name = "bind", .fn = usbip_bind, .help = "Bind device to " USBIP_HOST_DRV_NAME ".ko", .usage = usbip_bind_usage }, { .name = "unbind", .fn = usbip_unbind, .help = "Unbind device from " USBIP_HOST_DRV_NAME ".ko", .usage = usbip_unbind_usage }, { .name = "port", .fn = usbip_port_show, .help = "Show imported USB devices", .usage = NULL }, { NULL, NULL, NULL, NULL } };
static int usbip_help(int argc, char *argv[]) { const struct command *cmd; int i; int ret = 0; if (argc > 1 && argv++) { for (i = 0; cmds[i].name != NULL; i++) if (!strcmp(cmds[i].name, argv[0]) && cmds[i].usage) { cmds[i].usage(); goto done; } ret = -1; } usbip_usage(); printf("\n"); for (cmd = cmds; cmd->name != NULL; cmd++) if (cmd->help != NULL) printf(" %-10s %s\n", cmd->name, cmd->help); printf("\n"); done: return ret; }

Contributors

PersonTokensPropCommitsCommitProp
matt mooneymatt mooney11675.32%150.00%
takahiro hirofuchitakahiro hirofuchi3824.68%150.00%
Total154100.00%2100.00%


static int usbip_version(int argc, char *argv[]) { (void) argc; (void) argv; printf(PROGNAME " (%s)\n", usbip_version_string); return 0; }

Contributors

PersonTokensPropCommitsCommitProp
matt mooneymatt mooney2571.43%266.67%
takahiro hirofuchitakahiro hirofuchi1028.57%133.33%
Total35100.00%3100.00%


static int run_command(const struct command *cmd, int argc, char *argv[]) { dbg("running command: `%s'", cmd->name); return cmd->fn(argc, argv); }

Contributors

PersonTokensPropCommitsCommitProp
matt mooneymatt mooney2666.67%266.67%
takahiro hirofuchitakahiro hirofuchi1333.33%133.33%
Total39100.00%3100.00%


int main(int argc, char *argv[]) { static const struct option opts[] = { { "debug", no_argument, NULL, 'd' }, { "log", no_argument, NULL, 'l' }, { "tcp-port", required_argument, NULL, 't' }, { NULL, 0, NULL, 0 } }; char *cmd; int opt; int i, rc = -1; usbip_use_stderr = 1; opterr = 0; for (;;) { opt = getopt_long(argc, argv, "+dlt:", opts, NULL); if (opt == -1) break; switch (opt) { case 'd': usbip_use_debug = 1; break; case 'l': usbip_use_syslog = 1; openlog("", LOG_PID, LOG_USER); break; case 't': usbip_setup_port_number(optarg); break; case '?': printf("usbip: invalid option\n"); default: usbip_usage(); goto out; } } cmd = argv[optind]; if (cmd) { for (i = 0; cmds[i].name != NULL; i++) if (!strcmp(cmds[i].name, cmd)) { argc -= optind; argv += optind; optind = 0; rc = run_command(&cmds[i], argc, argv); goto out; } } /* invalid command */ usbip_help(0, NULL); out: return (rc > -1 ? EXIT_SUCCESS : EXIT_FAILURE); }

Contributors

PersonTokensPropCommitsCommitProp
matt mooneymatt mooney14051.85%350.00%
takahiro hirofuchitakahiro hirofuchi11040.74%116.67%
anthony foianianthony foiani207.41%233.33%
Total270100.00%6100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
matt mooneymatt mooney53565.56%450.00%
takahiro hirofuchitakahiro hirofuchi23528.80%112.50%
anthony foianianthony foiani242.94%225.00%
valentina maneavalentina manea222.70%112.50%
Total816100.00%8100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
{% endraw %}