huangcm
2024-12-18 9d29be7f7249789d6ffd0440067187a9f040c2cd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/bin/sh
# part of usb_modeswitch 2.4.0
device_in()
{
   if [ ! -e /var/lib/usb_modeswitch/$1 ]; then
       return 0
   fi
   while read line
   do
       if [ $(expr "$line" : "$2:$3") != 0 ]; then
           return 1
       fi
   done </var/lib/usb_modeswitch/$1
   if [ $(expr "$line" : "$2:$3") != 0 ]; then
       return 1
   fi
   return 0
}
 
if [ $(expr "$1" : "--.*") ]; then
   p_id=$4
   if [ -z $p_id ]; then
       prod=$5
       if [ -z $prod ]; then
           prod=$3
       fi
       prod=${prod%/*}
       v_id=0x${prod%/*}
       p_id=0x${prod#*/}
       if [ "$v_id" = "0x" ]; then
           v_id="0"
           p_id="0"
       fi
       v_id="$(printf %04x $(($v_id)))"
       p_id="$(printf %04x $(($p_id)))"
   else
       v_id=$3
   fi
fi
PATH=/sbin:/usr/sbin:$PATH
case "$1" in
   --driver-bind)
       # driver binding code removed
       exit 0
       ;;
   --symlink-name)
       device_in "link_list" $v_id $p_id
       if [ "$?" = "1" ]; then
           if [ -e "/usr/sbin/usb_modeswitch_dispatcher" ]; then
               exec usb_modeswitch_dispatcher $1 $2 2>>/dev/null
           fi
       fi
       exit 0
       ;;
esac
 
IFS='/' read -r p1 p2 <<EOF
$1
EOF
 
PATH=/bin:/sbin:/usr/bin:/usr/sbin
init_path=`readlink /sbin/init`
if [ `basename $init_path` = "systemd" ]; then
   systemctl --no-block start usb_modeswitch@$p1'_'$p2.service
elif [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then
   initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$1
else
   # only old distros, new udev will kill all subprocesses
   exec 1<&- 2<&- 5<&- 7<&-
   exec usb_modeswitch_dispatcher --switch-mode $1 &
fi
exit 0