⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hotplug.c

📁 Media transfer protocol implementation on POSIX. Have detailed readme on how to move to windows
💻 C
字号:
#include "common.h"#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>static void usage(void){  fprintf(stderr, "usage: hotplug [-h -u -a\"ACTION\"]\n");  fprintf(stderr, "       -u:  use udev syntax\n");  fprintf(stderr, "       -H:  use hal syntax\n");  fprintf(stderr, "       -a\"ACTION\": perform udev action ACTION on attachment\n");  exit(1);}enum style {	style_usbmap,	style_udev,	style_hal};int main (int argc, char **argv){  LIBMTP_device_entry_t *entries;  int numentries;  int i;  int ret;  enum style style = style_usbmap;  int opt;  extern int optind;  extern char *optarg;  char *udev_action = NULL;  char default_udev_action[] = "SYMLINK+=\"libmtp-%k\", MODE=\"666\"";  while ( (opt = getopt(argc, argv, "uHa:")) != -1 ) {    switch (opt) {    case 'a':      udev_action = strdup(optarg);    case 'u':      style = style_udev;      break;    case 'H':      style = style_hal;      break;    default:      usage();    }  }  LIBMTP_Init();  ret = LIBMTP_Get_Supported_Devices_List(&entries, &numentries);  if (ret == 0) {    switch (style) {    case style_udev:      printf("# UDEV-style hotplug map for libmtp\n");      printf("# Put this file in /etc/udev/rules.d\n\n");      printf("SUBSYSTEM!=\"usb_device\", ACTION!=\"add\", GOTO=\"libmtp_rules_end\"\n\n");      break;    case style_usbmap:      printf("# This usermap will call the script \"libmtp.sh\" whenever a known MTP device is attached.\n\n");      break;    case style_hal:      printf("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> <!-- -*- SGML -*- -->\n");      printf("<!-- This file was generated by %s - - fdi -->\n", argv[0]);      printf("<deviceinfo version=\"0.2\">\n");      printf(" <device>\n");      printf("  <match key=\"info.bus\" string=\"usb\">\n");      break;    }    for (i = 0; i < numentries; i++) {      LIBMTP_device_entry_t * entry = &entries[i];            switch (style) {      case style_udev: {	char *action;        printf("# %s\n", entry->name);	if (udev_action != NULL) {	  action = udev_action;	} else {	  action = default_udev_action;	}	printf("SYSFS{idVendor}==\"%04x\", SYSFS{idProduct}==\"%04x\", %s\n", entry->vendor_id, entry->product_id, action);	break;      }      case style_usbmap:        printf("# %s\n", entry->name);	printf("libmtp.sh    0x0003  0x%04x  0x%04x  0x0000  0x0000  0x00    0x00    0x00    0x00    0x00    0x00    0x00000000\n", entry->vendor_id, entry->product_id);	break;      case style_hal:	printf("   <match key=\"usb.vendor_id\" int=\"%d\">\n", entry->vendor_id);	printf("    <match key=\"usb.product_id\" int=\"%d\">\n", entry->product_id);	printf("     <merge key=\"info.category\" type=\"string\">portable_audio_player</merge>\n");	printf("     <append key=\"info.capabilities\" type=\"strlist\">portable_audio_player</append>\n");	printf("     <merge key=\"portable_audio_player.access_method\" type=\"string\">user</merge>\n");	printf("     <merge key=\"portable_audio_player.type\" type=\"string\">mtp</merge>\n");	/* FIXME: needs true list of formats ... But all of them can do MP3 */	printf("     <append key=\"portable_audio_player.output_formats\" type=\"strlist\">audio/mpeg</append>\n");	printf("    </match>\n");	printf("   </match>\n");	break;      }    }  } else {    printf("Error.\n");    exit(1);  }  switch (style) {  case style_usbmap:    break;  case style_udev:    printf("\nLABEL=\"libmtp_rules_end\"\n");    break;  case style_hal:    printf("  </match>\n");    printf(" </device>\n");    printf("</deviceinfo>\n");    break;  }  exit (0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -