Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/tools/usb/usbip/src/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 3 kB image not shown  

Quelle  usbip.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * 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
 */


#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] \n";

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

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;
}

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

 printf(PROGNAME " (%s)\n", usbip_version_string);
 return 0;
}

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

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");
   /* Terminate after printing error */
   /* FALLTHRU */
  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);
}

Messung V0.5
C=98 H=84 G=91

¤ Dauer der Verarbeitung: 0.9 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.