libusb 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/.travis.yml +1 -0
- data/History.md +8 -0
- data/README.md +5 -15
- data/Rakefile +8 -1
- data/ext/extconf.rb +49 -12
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/AUTHORS +12 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/COPYING +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/ChangeLog +18 -2
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/INSTALL +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Makefile.am +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Makefile.in +31 -18
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/NEWS +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/PORTING +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/README +5 -3
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/TODO +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Xcode/common.xcconfig +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Xcode/config.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Xcode/debug.xcconfig +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Xcode/libusb.xcconfig +0 -0
- data/ext/libusb-1.0.20/Xcode/libusb.xcodeproj/project.pbxproj +865 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Xcode/libusb_debug.xcconfig +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Xcode/libusb_release.xcconfig +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/Xcode/release.xcconfig +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/aclocal.m4 +35 -32
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/android/README +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/android/config.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/android/jni/Android.mk +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/android/jni/Application.mk +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/android/jni/examples.mk +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/android/jni/libusb.mk +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/android/jni/tests.mk +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/compile +1 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/config.guess +13 -160
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/config.h.in +6 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/config.sub +26 -12
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/configure +244 -20
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/configure.ac +27 -4
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/depcomp +1 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/doc/Makefile.am +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/doc/Makefile.in +19 -6
- data/ext/libusb-1.0.20/doc/doxygen.cfg.in +2334 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/Makefile.am +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/Makefile.in +19 -6
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/dpfp.c +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/dpfp_threaded.c +15 -10
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/ezusb.c +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/ezusb.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/fxload.c +28 -7
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/getopt/getopt.c +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/getopt/getopt.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/getopt/getopt1.c +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/hotplugtest.c +21 -3
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/listdevs.c +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/sam3u_benchmark.c +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/examples/xusb.c +2 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/install-sh +170 -196
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb-1.0.pc.in +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/Makefile.am +15 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/Makefile.in +192 -53
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/core.c +218 -100
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/descriptor.c +3 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/hotplug.c +26 -9
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/hotplug.h +8 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/io.c +432 -290
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/libusb-1.0.def +2 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/libusb-1.0.rc +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/libusb.h +11 -10
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/libusbi.h +106 -29
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/darwin_usb.c +27 -67
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/darwin_usb.h +3 -7
- data/ext/libusb-1.0.20/libusb/os/haiku/Makefile.am +5 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/Makefile.in +810 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/aclocal.m4 +1193 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/compile +347 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/config.guess +1421 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/config.sub +1807 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/configure +17579 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/configure.ac +8 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/depcomp +791 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/haiku_pollfs.cpp +378 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb.h +112 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb_backend.cpp +550 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb_raw.cpp +255 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/haiku_usb_raw.h +180 -0
- data/ext/libusb-1.0.20/libusb/os/haiku/install-sh +501 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20/libusb/os/haiku}/ltmain.sh +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20/libusb/os/haiku}/m4/libtool.m4 +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20/libusb/os/haiku}/m4/ltoptions.m4 +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20/libusb/os/haiku}/m4/ltsugar.m4 +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20/libusb/os/haiku}/m4/ltversion.m4 +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20/libusb/os/haiku}/m4/lt~obsolete.m4 +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20/libusb/os/haiku}/missing +1 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/linux_netlink.c +4 -4
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/linux_udev.c +1 -2
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/linux_usbfs.c +46 -49
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/linux_usbfs.h +1 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/netbsd_usb.c +9 -73
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/openbsd_usb.c +9 -73
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/poll_posix.c +2 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/poll_posix.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/poll_windows.c +3 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/poll_windows.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/threads_posix.c +3 -3
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/threads_posix.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/threads_windows.c +3 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/threads_windows.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/wince_usb.c +87 -250
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/wince_usb.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/windows_common.h +1 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/windows_usb.c +267 -181
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/os/windows_usb.h +22 -7
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/strerror.c +5 -2
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/sync.c +2 -1
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/libusb/version.h +1 -1
- data/ext/libusb-1.0.20/libusb/version_nano.h +1 -0
- data/ext/libusb-1.0.20/ltmain.sh +9655 -0
- data/ext/libusb-1.0.20/m4/libtool.m4 +7992 -0
- data/ext/libusb-1.0.20/m4/ltoptions.m4 +384 -0
- data/ext/libusb-1.0.20/m4/ltsugar.m4 +123 -0
- data/ext/libusb-1.0.20/m4/ltversion.m4 +23 -0
- data/ext/libusb-1.0.20/m4/lt~obsolete.m4 +98 -0
- data/ext/libusb-1.0.20/missing +215 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/tests/Makefile.am +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/tests/Makefile.in +19 -6
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/tests/libusb_testlib.h +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/tests/stress.c +0 -0
- data/ext/{libusb-1.0.19 → libusb-1.0.20}/tests/testlib.c +0 -0
- data/lib/libusb.rb +1 -0
- data/lib/libusb/call.rb +1 -0
- data/lib/libusb/context.rb +5 -2
- data/lib/libusb/stdio.rb +25 -0
- data/lib/libusb/version_gem.rb +1 -1
- data/libusb.gemspec +2 -1
- metadata +152 -115
- metadata.gz.sig +0 -0
- data/ext/libusb-1.0.19/Xcode/libusb.xcodeproj/project.pbxproj +0 -1
- data/ext/libusb-1.0.19/doc/doxygen.cfg.in +0 -1288
- data/ext/libusb-1.0.19/libusb/version_nano.h +0 -1
|
File without changes
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# Makefile.in generated by automake 1.
|
|
1
|
+
# Makefile.in generated by automake 1.15 from Makefile.am.
|
|
2
2
|
# @configure_input@
|
|
3
3
|
|
|
4
|
-
# Copyright (C) 1994-
|
|
4
|
+
# Copyright (C) 1994-2014 Free Software Foundation, Inc.
|
|
5
5
|
|
|
6
6
|
# This Makefile.in is free software; the Free Software Foundation
|
|
7
7
|
# gives unlimited permission to copy and/or distribute it,
|
|
@@ -15,7 +15,17 @@
|
|
|
15
15
|
@SET_MAKE@
|
|
16
16
|
|
|
17
17
|
VPATH = @srcdir@
|
|
18
|
-
am__is_gnu_make =
|
|
18
|
+
am__is_gnu_make = { \
|
|
19
|
+
if test -z '$(MAKELEVEL)'; then \
|
|
20
|
+
false; \
|
|
21
|
+
elif test -n '$(MAKE_HOST)'; then \
|
|
22
|
+
true; \
|
|
23
|
+
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
|
|
24
|
+
true; \
|
|
25
|
+
else \
|
|
26
|
+
false; \
|
|
27
|
+
fi; \
|
|
28
|
+
}
|
|
19
29
|
am__make_running_with_option = \
|
|
20
30
|
case $${target_option-} in \
|
|
21
31
|
?) ;; \
|
|
@@ -85,8 +95,6 @@ noinst_PROGRAMS = listdevs$(EXEEXT) xusb$(EXEEXT) fxload$(EXEEXT) \
|
|
|
85
95
|
@HAVE_SIGACTION_TRUE@@THREADS_POSIX_TRUE@am__append_2 = dpfp_threaded
|
|
86
96
|
@HAVE_SIGACTION_TRUE@am__append_3 = sam3u_benchmark
|
|
87
97
|
subdir = examples
|
|
88
|
-
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
|
|
89
|
-
$(top_srcdir)/depcomp
|
|
90
98
|
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
91
99
|
am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
|
92
100
|
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
|
@@ -94,6 +102,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/libtool.m4 \
|
|
|
94
102
|
$(top_srcdir)/libusb/version.h $(top_srcdir)/configure.ac
|
|
95
103
|
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
96
104
|
$(ACLOCAL_M4)
|
|
105
|
+
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
|
|
97
106
|
mkinstalldirs = $(install_sh) -d
|
|
98
107
|
CONFIG_HEADER = $(top_builddir)/config.h
|
|
99
108
|
CONFIG_CLEAN_FILES =
|
|
@@ -204,6 +213,7 @@ am__define_uniq_tagged_files = \
|
|
|
204
213
|
done | $(am__uniquify_input)`
|
|
205
214
|
ETAGS = etags
|
|
206
215
|
CTAGS = ctags
|
|
216
|
+
am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp
|
|
207
217
|
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
208
218
|
ACLOCAL = @ACLOCAL@
|
|
209
219
|
AMTAR = @AMTAR@
|
|
@@ -255,6 +265,7 @@ NMEDIT = @NMEDIT@
|
|
|
255
265
|
OBJDUMP = @OBJDUMP@
|
|
256
266
|
OBJEXT = @OBJEXT@
|
|
257
267
|
OS_DARWIN = @OS_DARWIN@
|
|
268
|
+
OS_HAIKU = @OS_HAIKU@
|
|
258
269
|
OS_LINUX = @OS_LINUX@
|
|
259
270
|
OS_NETBSD = @OS_NETBSD@
|
|
260
271
|
OS_OPENBSD = @OS_OPENBSD@
|
|
@@ -324,6 +335,7 @@ psdir = @psdir@
|
|
|
324
335
|
sbindir = @sbindir@
|
|
325
336
|
sharedstatedir = @sharedstatedir@
|
|
326
337
|
srcdir = @srcdir@
|
|
338
|
+
subdirs = @subdirs@
|
|
327
339
|
sysconfdir = @sysconfdir@
|
|
328
340
|
target_alias = @target_alias@
|
|
329
341
|
top_build_prefix = @top_build_prefix@
|
|
@@ -351,7 +363,6 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi
|
|
|
351
363
|
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/Makefile'; \
|
|
352
364
|
$(am__cd) $(top_srcdir) && \
|
|
353
365
|
$(AUTOMAKE) --gnu examples/Makefile
|
|
354
|
-
.PRECIOUS: Makefile
|
|
355
366
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
356
367
|
@case '$?' in \
|
|
357
368
|
*config.status*) \
|
|
@@ -694,6 +705,8 @@ uninstall-am:
|
|
|
694
705
|
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
|
695
706
|
tags tags-am uninstall uninstall-am
|
|
696
707
|
|
|
708
|
+
.PRECIOUS: Makefile
|
|
709
|
+
|
|
697
710
|
|
|
698
711
|
# Tell versions [3.59,3.63) of GNU make to not export all variables.
|
|
699
712
|
# Otherwise a system limit (for SysV at least) may be exceeded.
|
|
File without changes
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
|
|
24
24
|
#include <errno.h>
|
|
25
25
|
#include <pthread.h>
|
|
26
|
+
#include <semaphore.h>
|
|
26
27
|
#include <signal.h>
|
|
27
28
|
#include <string.h>
|
|
28
29
|
#include <stdio.h>
|
|
@@ -64,16 +65,15 @@ static unsigned char irqbuf[INTR_LENGTH];
|
|
|
64
65
|
static struct libusb_transfer *img_transfer = NULL;
|
|
65
66
|
static struct libusb_transfer *irq_transfer = NULL;
|
|
66
67
|
static int img_idx = 0;
|
|
67
|
-
static
|
|
68
|
+
static volatile sig_atomic_t do_exit = 0;
|
|
68
69
|
|
|
69
70
|
static pthread_t poll_thread;
|
|
70
|
-
static
|
|
71
|
-
static pthread_mutex_t exit_cond_lock = PTHREAD_MUTEX_INITIALIZER;
|
|
71
|
+
static sem_t exit_sem;
|
|
72
72
|
|
|
73
|
-
static void request_exit(
|
|
73
|
+
static void request_exit(sig_atomic_t code)
|
|
74
74
|
{
|
|
75
75
|
do_exit = code;
|
|
76
|
-
|
|
76
|
+
sem_post(&exit_sem);
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
static void *poll_thread_main(void *arg)
|
|
@@ -446,9 +446,16 @@ int main(void)
|
|
|
446
446
|
struct sigaction sigact;
|
|
447
447
|
int r = 1;
|
|
448
448
|
|
|
449
|
+
r = sem_init(&exit_sem, 0, 0);
|
|
450
|
+
if (r) {
|
|
451
|
+
fprintf(stderr, "failed to initialise semaphore error %d", errno);
|
|
452
|
+
exit(1);
|
|
453
|
+
}
|
|
454
|
+
|
|
449
455
|
r = libusb_init(NULL);
|
|
450
456
|
if (r < 0) {
|
|
451
457
|
fprintf(stderr, "failed to initialise libusb\n");
|
|
458
|
+
sem_destroy(&exit_sem);
|
|
452
459
|
exit(1);
|
|
453
460
|
}
|
|
454
461
|
|
|
@@ -500,11 +507,8 @@ int main(void)
|
|
|
500
507
|
goto out_deinit;
|
|
501
508
|
}
|
|
502
509
|
|
|
503
|
-
while (!do_exit)
|
|
504
|
-
|
|
505
|
-
pthread_cond_wait(&exit_cond, &exit_cond_lock);
|
|
506
|
-
pthread_mutex_unlock(&exit_cond_lock);
|
|
507
|
-
}
|
|
510
|
+
while (!do_exit)
|
|
511
|
+
sem_wait(&exit_sem);
|
|
508
512
|
|
|
509
513
|
printf("shutting down...\n");
|
|
510
514
|
pthread_join(poll_thread, NULL);
|
|
@@ -540,5 +544,6 @@ out_release:
|
|
|
540
544
|
out:
|
|
541
545
|
libusb_close(devh);
|
|
542
546
|
libusb_exit(NULL);
|
|
547
|
+
sem_destroy(&exit_sem);
|
|
543
548
|
return r >= 0 ? r : -r;
|
|
544
549
|
}
|
|
File without changes
|
|
File without changes
|
|
@@ -65,8 +65,9 @@ void logerror(const char *format, ...)
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
static int print_usage(int error_code) {
|
|
68
|
-
fprintf(stderr, "\nUsage: fxload [-v] [-V] [-t type] [-d vid:pid] [-p bus,addr] -i firmware\n");
|
|
68
|
+
fprintf(stderr, "\nUsage: fxload [-v] [-V] [-t type] [-d vid:pid] [-p bus,addr] [-s loader] -i firmware\n");
|
|
69
69
|
fprintf(stderr, " -i <path> -- Firmware to upload\n");
|
|
70
|
+
fprintf(stderr, " -s <path> -- Second stage loader\n");
|
|
70
71
|
fprintf(stderr, " -t <type> -- Target type: an21, fx, fx2, fx2lp, fx3\n");
|
|
71
72
|
fprintf(stderr, " -d <vid:pid> -- Target device, as an USB VID:PID\n");
|
|
72
73
|
fprintf(stderr, " -p <bus,addr> -- Target device, as a libusb bus number and device address path\n");
|
|
@@ -95,7 +96,7 @@ int main(int argc, char*argv[])
|
|
|
95
96
|
libusb_device_handle *device = NULL;
|
|
96
97
|
struct libusb_device_descriptor desc;
|
|
97
98
|
|
|
98
|
-
while ((opt = getopt(argc, argv, "qvV?hd:p:i:I:t:")) != EOF)
|
|
99
|
+
while ((opt = getopt(argc, argv, "qvV?hd:p:i:I:s:S:t:")) != EOF)
|
|
99
100
|
switch (opt) {
|
|
100
101
|
|
|
101
102
|
case 'd':
|
|
@@ -119,6 +120,11 @@ int main(int argc, char*argv[])
|
|
|
119
120
|
path[FIRMWARE] = optarg;
|
|
120
121
|
break;
|
|
121
122
|
|
|
123
|
+
case 's':
|
|
124
|
+
case 'S':
|
|
125
|
+
path[LOADER] = optarg;
|
|
126
|
+
break;
|
|
127
|
+
|
|
122
128
|
case 'V':
|
|
123
129
|
puts(FXLOAD_VERSION);
|
|
124
130
|
return 0;
|
|
@@ -224,15 +230,16 @@ int main(int argc, char*argv[])
|
|
|
224
230
|
}
|
|
225
231
|
if (dev == NULL) {
|
|
226
232
|
libusb_free_device_list(devs, 1);
|
|
233
|
+
libusb_exit(NULL);
|
|
227
234
|
logerror("could not find a known device - please specify type and/or vid:pid and/or bus,dev\n");
|
|
228
235
|
return print_usage(-1);
|
|
229
236
|
}
|
|
230
237
|
status = libusb_open(dev, &device);
|
|
238
|
+
libusb_free_device_list(devs, 1);
|
|
231
239
|
if (status < 0) {
|
|
232
240
|
logerror("libusb_open() failed: %s\n", libusb_error_name(status));
|
|
233
241
|
goto err;
|
|
234
242
|
}
|
|
235
|
-
libusb_free_device_list(devs, 1);
|
|
236
243
|
} else if (device_id != NULL) {
|
|
237
244
|
device = libusb_open_device_with_vid_pid(NULL, (uint16_t)vid, (uint16_t)pid);
|
|
238
245
|
if (device == NULL) {
|
|
@@ -245,6 +252,7 @@ int main(int argc, char*argv[])
|
|
|
245
252
|
libusb_set_auto_detach_kernel_driver(device, 1);
|
|
246
253
|
status = libusb_claim_interface(device, 0);
|
|
247
254
|
if (status != LIBUSB_SUCCESS) {
|
|
255
|
+
libusb_close(device);
|
|
248
256
|
logerror("libusb_claim_interface failed: %s\n", libusb_error_name(status));
|
|
249
257
|
goto err;
|
|
250
258
|
}
|
|
@@ -272,10 +280,23 @@ int main(int argc, char*argv[])
|
|
|
272
280
|
logerror("%s: type %s\n", path[i], img_name[img_type[i]]);
|
|
273
281
|
}
|
|
274
282
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
283
|
+
if (path[LOADER] == NULL) {
|
|
284
|
+
/* single stage, put into internal memory */
|
|
285
|
+
if (verbose > 1)
|
|
286
|
+
logerror("single stage: load on-chip memory\n");
|
|
287
|
+
status = ezusb_load_ram(device, path[FIRMWARE], fx_type, img_type[FIRMWARE], 0);
|
|
288
|
+
} else {
|
|
289
|
+
/* two-stage, put loader into internal memory */
|
|
290
|
+
if (verbose > 1)
|
|
291
|
+
logerror("1st stage: load 2nd stage loader\n");
|
|
292
|
+
status = ezusb_load_ram(device, path[LOADER], fx_type, img_type[LOADER], 0);
|
|
293
|
+
if (status == 0) {
|
|
294
|
+
/* two-stage, put firmware into internal memory */
|
|
295
|
+
if (verbose > 1)
|
|
296
|
+
logerror("2nd state: load on-chip memory\n");
|
|
297
|
+
status = ezusb_load_ram(device, path[FIRMWARE], fx_type, img_type[FIRMWARE], 1);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
279
300
|
|
|
280
301
|
libusb_release_interface(device, 0);
|
|
281
302
|
libusb_close(device);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
#include "libusb.h"
|
|
25
25
|
|
|
26
26
|
int done = 0;
|
|
27
|
-
libusb_device_handle *handle;
|
|
27
|
+
libusb_device_handle *handle = NULL;
|
|
28
28
|
|
|
29
29
|
static int LIBUSB_CALL hotplug_callback(libusb_context *ctx, libusb_device *dev, libusb_hotplug_event event, void *user_data)
|
|
30
30
|
{
|
|
@@ -38,7 +38,15 @@ static int LIBUSB_CALL hotplug_callback(libusb_context *ctx, libusb_device *dev,
|
|
|
38
38
|
|
|
39
39
|
printf ("Device attached: %04x:%04x\n", desc.idVendor, desc.idProduct);
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
if (handle) {
|
|
42
|
+
libusb_close (handle);
|
|
43
|
+
handle = NULL;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
rc = libusb_open (dev, &handle);
|
|
47
|
+
if (LIBUSB_SUCCESS != rc) {
|
|
48
|
+
fprintf (stderr, "Error opening device\n");
|
|
49
|
+
}
|
|
42
50
|
|
|
43
51
|
done++;
|
|
44
52
|
|
|
@@ -49,9 +57,13 @@ static int LIBUSB_CALL hotplug_callback_detach(libusb_context *ctx, libusb_devic
|
|
|
49
57
|
{
|
|
50
58
|
printf ("Device detached\n");
|
|
51
59
|
|
|
52
|
-
|
|
60
|
+
if (handle) {
|
|
61
|
+
libusb_close (handle);
|
|
62
|
+
handle = NULL;
|
|
63
|
+
}
|
|
53
64
|
|
|
54
65
|
done++;
|
|
66
|
+
|
|
55
67
|
return 0;
|
|
56
68
|
}
|
|
57
69
|
|
|
@@ -100,5 +112,11 @@ int main(int argc, char *argv[])
|
|
|
100
112
|
printf("libusb_handle_events() failed: %s\n", libusb_error_name(rc));
|
|
101
113
|
}
|
|
102
114
|
|
|
115
|
+
if (handle) {
|
|
116
|
+
libusb_close (handle);
|
|
117
|
+
}
|
|
118
|
+
|
|
103
119
|
libusb_exit (NULL);
|
|
120
|
+
|
|
121
|
+
return EXIT_SUCCESS;
|
|
104
122
|
}
|
|
File without changes
|
|
File without changes
|
|
@@ -1098,7 +1098,8 @@ int main(int argc, char** argv)
|
|
|
1098
1098
|
// but since we can't call on libusb_set_debug() before libusb_init(), we use the env variable method
|
|
1099
1099
|
old_dbg_str = getenv("LIBUSB_DEBUG");
|
|
1100
1100
|
if (debug_mode) {
|
|
1101
|
-
putenv("LIBUSB_DEBUG=4")
|
|
1101
|
+
if (putenv("LIBUSB_DEBUG=4") != 0) // LIBUSB_LOG_LEVEL_DEBUG
|
|
1102
|
+
printf("Unable to set debug level");
|
|
1102
1103
|
}
|
|
1103
1104
|
|
|
1104
1105
|
version = libusb_get_version();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/bin/sh
|
|
2
2
|
# install - install a program, script, or datafile
|
|
3
3
|
|
|
4
|
-
scriptversion=
|
|
4
|
+
scriptversion=2013-12-25.23; # UTC
|
|
5
5
|
|
|
6
6
|
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
|
7
7
|
# later released in X11R6 (xc/config/util/install.sh) with the
|
|
@@ -41,19 +41,15 @@ scriptversion=2011-11-20.07; # UTC
|
|
|
41
41
|
# This script is compatible with the BSD install script, but was written
|
|
42
42
|
# from scratch.
|
|
43
43
|
|
|
44
|
+
tab=' '
|
|
44
45
|
nl='
|
|
45
46
|
'
|
|
46
|
-
IFS="
|
|
47
|
+
IFS=" $tab$nl"
|
|
47
48
|
|
|
48
|
-
#
|
|
49
|
+
# Set DOITPROG to "echo" to test this script.
|
|
49
50
|
|
|
50
|
-
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
|
51
51
|
doit=${DOITPROG-}
|
|
52
|
-
|
|
53
|
-
doit_exec=exec
|
|
54
|
-
else
|
|
55
|
-
doit_exec=$doit
|
|
56
|
-
fi
|
|
52
|
+
doit_exec=${doit:-exec}
|
|
57
53
|
|
|
58
54
|
# Put in absolute file names if you don't have them in your path;
|
|
59
55
|
# or use environment vars.
|
|
@@ -68,17 +64,6 @@ mvprog=${MVPROG-mv}
|
|
|
68
64
|
rmprog=${RMPROG-rm}
|
|
69
65
|
stripprog=${STRIPPROG-strip}
|
|
70
66
|
|
|
71
|
-
posix_glob='?'
|
|
72
|
-
initialize_posix_glob='
|
|
73
|
-
test "$posix_glob" != "?" || {
|
|
74
|
-
if (set -f) 2>/dev/null; then
|
|
75
|
-
posix_glob=
|
|
76
|
-
else
|
|
77
|
-
posix_glob=:
|
|
78
|
-
fi
|
|
79
|
-
}
|
|
80
|
-
'
|
|
81
|
-
|
|
82
67
|
posix_mkdir=
|
|
83
68
|
|
|
84
69
|
# Desired mode of installed file.
|
|
@@ -97,7 +82,7 @@ dir_arg=
|
|
|
97
82
|
dst_arg=
|
|
98
83
|
|
|
99
84
|
copy_on_change=false
|
|
100
|
-
|
|
85
|
+
is_target_a_directory=possibly
|
|
101
86
|
|
|
102
87
|
usage="\
|
|
103
88
|
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
|
@@ -137,46 +122,57 @@ while test $# -ne 0; do
|
|
|
137
122
|
-d) dir_arg=true;;
|
|
138
123
|
|
|
139
124
|
-g) chgrpcmd="$chgrpprog $2"
|
|
140
|
-
|
|
125
|
+
shift;;
|
|
141
126
|
|
|
142
127
|
--help) echo "$usage"; exit $?;;
|
|
143
128
|
|
|
144
129
|
-m) mode=$2
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
shift;;
|
|
130
|
+
case $mode in
|
|
131
|
+
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
|
132
|
+
echo "$0: invalid mode: $mode" >&2
|
|
133
|
+
exit 1;;
|
|
134
|
+
esac
|
|
135
|
+
shift;;
|
|
152
136
|
|
|
153
137
|
-o) chowncmd="$chownprog $2"
|
|
154
|
-
|
|
138
|
+
shift;;
|
|
155
139
|
|
|
156
140
|
-s) stripcmd=$stripprog;;
|
|
157
141
|
|
|
158
|
-
-t)
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
142
|
+
-t)
|
|
143
|
+
is_target_a_directory=always
|
|
144
|
+
dst_arg=$2
|
|
145
|
+
# Protect names problematic for 'test' and other utilities.
|
|
146
|
+
case $dst_arg in
|
|
147
|
+
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
|
148
|
+
esac
|
|
149
|
+
shift;;
|
|
164
150
|
|
|
165
|
-
-T)
|
|
151
|
+
-T) is_target_a_directory=never;;
|
|
166
152
|
|
|
167
153
|
--version) echo "$0 $scriptversion"; exit $?;;
|
|
168
154
|
|
|
169
|
-
--)
|
|
170
|
-
|
|
155
|
+
--) shift
|
|
156
|
+
break;;
|
|
171
157
|
|
|
172
|
-
-*)
|
|
173
|
-
|
|
158
|
+
-*) echo "$0: invalid option: $1" >&2
|
|
159
|
+
exit 1;;
|
|
174
160
|
|
|
175
161
|
*) break;;
|
|
176
162
|
esac
|
|
177
163
|
shift
|
|
178
164
|
done
|
|
179
165
|
|
|
166
|
+
# We allow the use of options -d and -T together, by making -d
|
|
167
|
+
# take the precedence; this is for compatibility with GNU install.
|
|
168
|
+
|
|
169
|
+
if test -n "$dir_arg"; then
|
|
170
|
+
if test -n "$dst_arg"; then
|
|
171
|
+
echo "$0: target directory not allowed when installing a directory." >&2
|
|
172
|
+
exit 1
|
|
173
|
+
fi
|
|
174
|
+
fi
|
|
175
|
+
|
|
180
176
|
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
|
181
177
|
# When -d is used, all remaining arguments are directories to create.
|
|
182
178
|
# When -t is used, the destination is already specified.
|
|
@@ -207,6 +203,15 @@ if test $# -eq 0; then
|
|
|
207
203
|
exit 0
|
|
208
204
|
fi
|
|
209
205
|
|
|
206
|
+
if test -z "$dir_arg"; then
|
|
207
|
+
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
|
208
|
+
if test ! -d "$dst_arg"; then
|
|
209
|
+
echo "$0: $dst_arg: Is not a directory." >&2
|
|
210
|
+
exit 1
|
|
211
|
+
fi
|
|
212
|
+
fi
|
|
213
|
+
fi
|
|
214
|
+
|
|
210
215
|
if test -z "$dir_arg"; then
|
|
211
216
|
do_exit='(exit $ret); exit $ret'
|
|
212
217
|
trap "ret=129; $do_exit" 1
|
|
@@ -223,16 +228,16 @@ if test -z "$dir_arg"; then
|
|
|
223
228
|
|
|
224
229
|
*[0-7])
|
|
225
230
|
if test -z "$stripcmd"; then
|
|
226
|
-
|
|
231
|
+
u_plus_rw=
|
|
227
232
|
else
|
|
228
|
-
|
|
233
|
+
u_plus_rw='% 200'
|
|
229
234
|
fi
|
|
230
235
|
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
|
231
236
|
*)
|
|
232
237
|
if test -z "$stripcmd"; then
|
|
233
|
-
|
|
238
|
+
u_plus_rw=
|
|
234
239
|
else
|
|
235
|
-
|
|
240
|
+
u_plus_rw=,u+rw
|
|
236
241
|
fi
|
|
237
242
|
cp_umask=$mode$u_plus_rw;;
|
|
238
243
|
esac
|
|
@@ -269,41 +274,15 @@ do
|
|
|
269
274
|
# If destination is a directory, append the input filename; won't work
|
|
270
275
|
# if double slashes aren't ignored.
|
|
271
276
|
if test -d "$dst"; then
|
|
272
|
-
if test
|
|
273
|
-
|
|
274
|
-
|
|
277
|
+
if test "$is_target_a_directory" = never; then
|
|
278
|
+
echo "$0: $dst_arg: Is a directory" >&2
|
|
279
|
+
exit 1
|
|
275
280
|
fi
|
|
276
281
|
dstdir=$dst
|
|
277
282
|
dst=$dstdir/`basename "$src"`
|
|
278
283
|
dstdir_status=0
|
|
279
284
|
else
|
|
280
|
-
|
|
281
|
-
dstdir=`
|
|
282
|
-
(dirname "$dst") 2>/dev/null ||
|
|
283
|
-
expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
|
|
284
|
-
X"$dst" : 'X\(//\)[^/]' \| \
|
|
285
|
-
X"$dst" : 'X\(//\)$' \| \
|
|
286
|
-
X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
|
|
287
|
-
echo X"$dst" |
|
|
288
|
-
sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
|
|
289
|
-
s//\1/
|
|
290
|
-
q
|
|
291
|
-
}
|
|
292
|
-
/^X\(\/\/\)[^/].*/{
|
|
293
|
-
s//\1/
|
|
294
|
-
q
|
|
295
|
-
}
|
|
296
|
-
/^X\(\/\/\)$/{
|
|
297
|
-
s//\1/
|
|
298
|
-
q
|
|
299
|
-
}
|
|
300
|
-
/^X\(\/\).*/{
|
|
301
|
-
s//\1/
|
|
302
|
-
q
|
|
303
|
-
}
|
|
304
|
-
s/.*/./; q'
|
|
305
|
-
`
|
|
306
|
-
|
|
285
|
+
dstdir=`dirname "$dst"`
|
|
307
286
|
test -d "$dstdir"
|
|
308
287
|
dstdir_status=$?
|
|
309
288
|
fi
|
|
@@ -314,74 +293,74 @@ do
|
|
|
314
293
|
if test $dstdir_status != 0; then
|
|
315
294
|
case $posix_mkdir in
|
|
316
295
|
'')
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
296
|
+
# Create intermediate dirs using mode 755 as modified by the umask.
|
|
297
|
+
# This is like FreeBSD 'install' as of 1997-10-28.
|
|
298
|
+
umask=`umask`
|
|
299
|
+
case $stripcmd.$umask in
|
|
300
|
+
# Optimize common cases.
|
|
301
|
+
*[2367][2367]) mkdir_umask=$umask;;
|
|
302
|
+
.*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
|
|
303
|
+
|
|
304
|
+
*[0-7])
|
|
305
|
+
mkdir_umask=`expr $umask + 22 \
|
|
306
|
+
- $umask % 100 % 40 + $umask % 20 \
|
|
307
|
+
- $umask % 10 % 4 + $umask % 2
|
|
308
|
+
`;;
|
|
309
|
+
*) mkdir_umask=$umask,go-w;;
|
|
310
|
+
esac
|
|
311
|
+
|
|
312
|
+
# With -d, create the new directory with the user-specified mode.
|
|
313
|
+
# Otherwise, rely on $mkdir_umask.
|
|
314
|
+
if test -n "$dir_arg"; then
|
|
315
|
+
mkdir_mode=-m$mode
|
|
316
|
+
else
|
|
317
|
+
mkdir_mode=
|
|
318
|
+
fi
|
|
319
|
+
|
|
320
|
+
posix_mkdir=false
|
|
321
|
+
case $umask in
|
|
322
|
+
*[123567][0-7][0-7])
|
|
323
|
+
# POSIX mkdir -p sets u+wx bits regardless of umask, which
|
|
324
|
+
# is incompatible with FreeBSD 'install' when (umask & 300) != 0.
|
|
325
|
+
;;
|
|
326
|
+
*)
|
|
327
|
+
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
|
328
|
+
trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
|
|
329
|
+
|
|
330
|
+
if (umask $mkdir_umask &&
|
|
331
|
+
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
|
|
332
|
+
then
|
|
333
|
+
if test -z "$dir_arg" || {
|
|
334
|
+
# Check for POSIX incompatibilities with -m.
|
|
335
|
+
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
|
336
|
+
# other-writable bit of parent directory when it shouldn't.
|
|
337
|
+
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
|
338
|
+
ls_ld_tmpdir=`ls -ld "$tmpdir"`
|
|
339
|
+
case $ls_ld_tmpdir in
|
|
340
|
+
d????-?r-*) different_mode=700;;
|
|
341
|
+
d????-?--*) different_mode=755;;
|
|
342
|
+
*) false;;
|
|
343
|
+
esac &&
|
|
344
|
+
$mkdirprog -m$different_mode -p -- "$tmpdir" && {
|
|
345
|
+
ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
|
|
346
|
+
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
then posix_mkdir=:
|
|
350
|
+
fi
|
|
351
|
+
rmdir "$tmpdir/d" "$tmpdir"
|
|
352
|
+
else
|
|
353
|
+
# Remove any dirs left behind by ancient mkdir implementations.
|
|
354
|
+
rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
|
|
355
|
+
fi
|
|
356
|
+
trap '' 0;;
|
|
357
|
+
esac;;
|
|
379
358
|
esac
|
|
380
359
|
|
|
381
360
|
if
|
|
382
361
|
$posix_mkdir && (
|
|
383
|
-
|
|
384
|
-
|
|
362
|
+
umask $mkdir_umask &&
|
|
363
|
+
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
|
385
364
|
)
|
|
386
365
|
then :
|
|
387
366
|
else
|
|
@@ -391,53 +370,51 @@ do
|
|
|
391
370
|
# directory the slow way, step by step, checking for races as we go.
|
|
392
371
|
|
|
393
372
|
case $dstdir in
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
373
|
+
/*) prefix='/';;
|
|
374
|
+
[-=\(\)!]*) prefix='./';;
|
|
375
|
+
*) prefix='';;
|
|
397
376
|
esac
|
|
398
377
|
|
|
399
|
-
eval "$initialize_posix_glob"
|
|
400
|
-
|
|
401
378
|
oIFS=$IFS
|
|
402
379
|
IFS=/
|
|
403
|
-
|
|
380
|
+
set -f
|
|
404
381
|
set fnord $dstdir
|
|
405
382
|
shift
|
|
406
|
-
|
|
383
|
+
set +f
|
|
407
384
|
IFS=$oIFS
|
|
408
385
|
|
|
409
386
|
prefixes=
|
|
410
387
|
|
|
411
388
|
for d
|
|
412
389
|
do
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
390
|
+
test X"$d" = X && continue
|
|
391
|
+
|
|
392
|
+
prefix=$prefix$d
|
|
393
|
+
if test -d "$prefix"; then
|
|
394
|
+
prefixes=
|
|
395
|
+
else
|
|
396
|
+
if $posix_mkdir; then
|
|
397
|
+
(umask=$mkdir_umask &&
|
|
398
|
+
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
|
399
|
+
# Don't fail if two instances are running concurrently.
|
|
400
|
+
test -d "$prefix" || exit 1
|
|
401
|
+
else
|
|
402
|
+
case $prefix in
|
|
403
|
+
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
|
404
|
+
*) qprefix=$prefix;;
|
|
405
|
+
esac
|
|
406
|
+
prefixes="$prefixes '$qprefix'"
|
|
407
|
+
fi
|
|
408
|
+
fi
|
|
409
|
+
prefix=$prefix/
|
|
433
410
|
done
|
|
434
411
|
|
|
435
412
|
if test -n "$prefixes"; then
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
413
|
+
# Don't fail if two instances are running concurrently.
|
|
414
|
+
(umask $mkdir_umask &&
|
|
415
|
+
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
|
416
|
+
test -d "$dstdir" || exit 1
|
|
417
|
+
obsolete_mkdir_used=true
|
|
441
418
|
fi
|
|
442
419
|
fi
|
|
443
420
|
fi
|
|
@@ -472,15 +449,12 @@ do
|
|
|
472
449
|
|
|
473
450
|
# If -C, don't bother to copy if it wouldn't change the file.
|
|
474
451
|
if $copy_on_change &&
|
|
475
|
-
old=`LC_ALL=C ls -dlL "$dst"
|
|
476
|
-
new=`LC_ALL=C ls -dlL "$dsttmp"
|
|
477
|
-
|
|
478
|
-
eval "$initialize_posix_glob" &&
|
|
479
|
-
$posix_glob set -f &&
|
|
452
|
+
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
|
453
|
+
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
|
454
|
+
set -f &&
|
|
480
455
|
set X $old && old=:$2:$4:$5:$6 &&
|
|
481
456
|
set X $new && new=:$2:$4:$5:$6 &&
|
|
482
|
-
|
|
483
|
-
|
|
457
|
+
set +f &&
|
|
484
458
|
test "$old" = "$new" &&
|
|
485
459
|
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
|
486
460
|
then
|
|
@@ -493,24 +467,24 @@ do
|
|
|
493
467
|
# to itself, or perhaps because mv is so ancient that it does not
|
|
494
468
|
# support -f.
|
|
495
469
|
{
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
470
|
+
# Now remove or move aside any old file at destination location.
|
|
471
|
+
# We try this two ways since rm can't unlink itself on some
|
|
472
|
+
# systems and the destination file might be busy for other
|
|
473
|
+
# reasons. In this case, the final cleanup might fail but the new
|
|
474
|
+
# file should still install successfully.
|
|
475
|
+
{
|
|
476
|
+
test ! -f "$dst" ||
|
|
477
|
+
$doit $rmcmd -f "$dst" 2>/dev/null ||
|
|
478
|
+
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
|
479
|
+
{ $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
|
|
480
|
+
} ||
|
|
481
|
+
{ echo "$0: cannot unlink or rename $dst" >&2
|
|
482
|
+
(exit 1); exit 1
|
|
483
|
+
}
|
|
484
|
+
} &&
|
|
485
|
+
|
|
486
|
+
# Now rename the file to the real destination.
|
|
487
|
+
$doit $mvcmd "$dsttmp" "$dst"
|
|
514
488
|
}
|
|
515
489
|
fi || exit 1
|
|
516
490
|
|