rbcdio 0.03 → 0.04

Sign up to get free protection for your applications and to get access to all the features.
data/install-sh CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  # install - install a program, script, or datafile
3
3
 
4
- scriptversion=2005-05-14.22
4
+ scriptversion=2006-12-25.00
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
@@ -39,38 +39,68 @@ scriptversion=2005-05-14.22
39
39
  # when there is no Makefile.
40
40
  #
41
41
  # This script is compatible with the BSD install script, but was written
42
- # from scratch. It can only install one file at a time, a restriction
43
- # shared with many OS's install programs.
42
+ # from scratch.
43
+
44
+ nl='
45
+ '
46
+ IFS=" "" $nl"
44
47
 
45
48
  # set DOITPROG to echo to test this script
46
49
 
47
50
  # Don't use :- since 4.3BSD and earlier shells don't like it.
48
- doit="${DOITPROG-}"
51
+ doit=${DOITPROG-}
52
+ if test -z "$doit"; then
53
+ doit_exec=exec
54
+ else
55
+ doit_exec=$doit
56
+ fi
49
57
 
50
- # put in absolute paths if you don't have them in your path; or use env. vars.
58
+ # Put in absolute file names if you don't have them in your path;
59
+ # or use environment vars.
60
+
61
+ chgrpprog=${CHGRPPROG-chgrp}
62
+ chmodprog=${CHMODPROG-chmod}
63
+ chownprog=${CHOWNPROG-chown}
64
+ cmpprog=${CMPPROG-cmp}
65
+ cpprog=${CPPROG-cp}
66
+ mkdirprog=${MKDIRPROG-mkdir}
67
+ mvprog=${MVPROG-mv}
68
+ rmprog=${RMPROG-rm}
69
+ stripprog=${STRIPPROG-strip}
70
+
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
+ '
51
81
 
52
- mvprog="${MVPROG-mv}"
53
- cpprog="${CPPROG-cp}"
54
- chmodprog="${CHMODPROG-chmod}"
55
- chownprog="${CHOWNPROG-chown}"
56
- chgrpprog="${CHGRPPROG-chgrp}"
57
- stripprog="${STRIPPROG-strip}"
58
- rmprog="${RMPROG-rm}"
59
- mkdirprog="${MKDIRPROG-mkdir}"
82
+ posix_mkdir=
83
+
84
+ # Desired mode of installed file.
85
+ mode=0755
60
86
 
61
- chmodcmd="$chmodprog 0755"
62
- chowncmd=
63
87
  chgrpcmd=
64
- stripcmd=
88
+ chmodcmd=$chmodprog
89
+ chowncmd=
90
+ mvcmd=$mvprog
65
91
  rmcmd="$rmprog -f"
66
- mvcmd="$mvprog"
92
+ stripcmd=
93
+
67
94
  src=
68
95
  dst=
69
96
  dir_arg=
70
- dstarg=
97
+ dst_arg=
98
+
99
+ copy_on_change=false
71
100
  no_target_directory=
72
101
 
73
- usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
102
+ usage="\
103
+ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
74
104
  or: $0 [OPTION]... SRCFILES... DIRECTORY
75
105
  or: $0 [OPTION]... -t DIRECTORY SRCFILES...
76
106
  or: $0 [OPTION]... -d DIRECTORIES...
@@ -80,81 +110,86 @@ In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
80
110
  In the 4th, create DIRECTORIES.
81
111
 
82
112
  Options:
83
- -c (ignored)
84
- -d create directories instead of installing files.
85
- -g GROUP $chgrpprog installed files to GROUP.
86
- -m MODE $chmodprog installed files to MODE.
87
- -o USER $chownprog installed files to USER.
88
- -s $stripprog installed files.
89
- -t DIRECTORY install into DIRECTORY.
90
- -T report an error if DSTFILE is a directory.
91
- --help display this help and exit.
92
- --version display version info and exit.
113
+ --help display this help and exit.
114
+ --version display version info and exit.
115
+
116
+ -c (ignored)
117
+ -C install only if different (preserve the last data modification time)
118
+ -d create directories instead of installing files.
119
+ -g GROUP $chgrpprog installed files to GROUP.
120
+ -m MODE $chmodprog installed files to MODE.
121
+ -o USER $chownprog installed files to USER.
122
+ -s $stripprog installed files.
123
+ -t DIRECTORY install into DIRECTORY.
124
+ -T report an error if DSTFILE is a directory.
93
125
 
94
126
  Environment variables override the default commands:
95
- CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
127
+ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
128
+ RMPROG STRIPPROG
96
129
  "
97
130
 
98
- while test -n "$1"; do
131
+ while test $# -ne 0; do
99
132
  case $1 in
100
- -c) shift
101
- continue;;
133
+ -c) ;;
134
+
135
+ -C) copy_on_change=true;;
102
136
 
103
- -d) dir_arg=true
104
- shift
105
- continue;;
137
+ -d) dir_arg=true;;
106
138
 
107
139
  -g) chgrpcmd="$chgrpprog $2"
108
- shift
109
- shift
110
- continue;;
140
+ shift;;
111
141
 
112
142
  --help) echo "$usage"; exit $?;;
113
143
 
114
- -m) chmodcmd="$chmodprog $2"
115
- shift
116
- shift
117
- continue;;
144
+ -m) mode=$2
145
+ case $mode in
146
+ *' '* | *' '* | *'
147
+ '* | *'*'* | *'?'* | *'['*)
148
+ echo "$0: invalid mode: $mode" >&2
149
+ exit 1;;
150
+ esac
151
+ shift;;
118
152
 
119
153
  -o) chowncmd="$chownprog $2"
120
- shift
121
- shift
122
- continue;;
154
+ shift;;
123
155
 
124
- -s) stripcmd=$stripprog
125
- shift
126
- continue;;
156
+ -s) stripcmd=$stripprog;;
127
157
 
128
- -t) dstarg=$2
129
- shift
130
- shift
131
- continue;;
158
+ -t) dst_arg=$2
159
+ shift;;
132
160
 
133
- -T) no_target_directory=true
134
- shift
135
- continue;;
161
+ -T) no_target_directory=true;;
136
162
 
137
163
  --version) echo "$0 $scriptversion"; exit $?;;
138
164
 
139
- *) # When -d is used, all remaining arguments are directories to create.
140
- # When -t is used, the destination is already specified.
141
- test -n "$dir_arg$dstarg" && break
142
- # Otherwise, the last argument is the destination. Remove it from $@.
143
- for arg
144
- do
145
- if test -n "$dstarg"; then
146
- # $@ is not empty: it contains at least $arg.
147
- set fnord "$@" "$dstarg"
148
- shift # fnord
149
- fi
150
- shift # arg
151
- dstarg=$arg
152
- done
165
+ --) shift
153
166
  break;;
167
+
168
+ -*) echo "$0: invalid option: $1" >&2
169
+ exit 1;;
170
+
171
+ *) break;;
154
172
  esac
173
+ shift
155
174
  done
156
175
 
157
- if test -z "$1"; then
176
+ if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
177
+ # When -d is used, all remaining arguments are directories to create.
178
+ # When -t is used, the destination is already specified.
179
+ # Otherwise, the last argument is the destination. Remove it from $@.
180
+ for arg
181
+ do
182
+ if test -n "$dst_arg"; then
183
+ # $@ is not empty: it contains at least $arg.
184
+ set fnord "$@" "$dst_arg"
185
+ shift # fnord
186
+ fi
187
+ shift # arg
188
+ dst_arg=$arg
189
+ done
190
+ fi
191
+
192
+ if test $# -eq 0; then
158
193
  if test -z "$dir_arg"; then
159
194
  echo "$0: no input file specified." >&2
160
195
  exit 1
@@ -164,24 +199,47 @@ if test -z "$1"; then
164
199
  exit 0
165
200
  fi
166
201
 
202
+ if test -z "$dir_arg"; then
203
+ trap '(exit $?); exit' 1 2 13 15
204
+
205
+ # Set umask so as not to create temps with too-generous modes.
206
+ # However, 'strip' requires both read and write access to temps.
207
+ case $mode in
208
+ # Optimize common cases.
209
+ *644) cp_umask=133;;
210
+ *755) cp_umask=22;;
211
+
212
+ *[0-7])
213
+ if test -z "$stripcmd"; then
214
+ u_plus_rw=
215
+ else
216
+ u_plus_rw='% 200'
217
+ fi
218
+ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
219
+ *)
220
+ if test -z "$stripcmd"; then
221
+ u_plus_rw=
222
+ else
223
+ u_plus_rw=,u+rw
224
+ fi
225
+ cp_umask=$mode$u_plus_rw;;
226
+ esac
227
+ fi
228
+
167
229
  for src
168
230
  do
169
231
  # Protect names starting with `-'.
170
232
  case $src in
171
- -*) src=./$src ;;
233
+ -*) src=./$src;;
172
234
  esac
173
235
 
174
236
  if test -n "$dir_arg"; then
175
237
  dst=$src
176
- src=
177
-
178
- if test -d "$dst"; then
179
- mkdircmd=:
180
- chmodcmd=
181
- else
182
- mkdircmd=$mkdirprog
183
- fi
238
+ dstdir=$dst
239
+ test -d "$dstdir"
240
+ dstdir_status=$?
184
241
  else
242
+
185
243
  # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
186
244
  # might cause directories to be created, which would be especially bad
187
245
  # if $src (and thus $dsttmp) contains '*'.
@@ -190,71 +248,199 @@ do
190
248
  exit 1
191
249
  fi
192
250
 
193
- if test -z "$dstarg"; then
251
+ if test -z "$dst_arg"; then
194
252
  echo "$0: no destination specified." >&2
195
253
  exit 1
196
254
  fi
197
255
 
198
- dst=$dstarg
256
+ dst=$dst_arg
199
257
  # Protect names starting with `-'.
200
258
  case $dst in
201
- -*) dst=./$dst ;;
259
+ -*) dst=./$dst;;
202
260
  esac
203
261
 
204
262
  # If destination is a directory, append the input filename; won't work
205
263
  # if double slashes aren't ignored.
206
264
  if test -d "$dst"; then
207
265
  if test -n "$no_target_directory"; then
208
- echo "$0: $dstarg: Is a directory" >&2
266
+ echo "$0: $dst_arg: Is a directory" >&2
209
267
  exit 1
210
268
  fi
211
- dst=$dst/`basename "$src"`
269
+ dstdir=$dst
270
+ dst=$dstdir/`basename "$src"`
271
+ dstdir_status=0
272
+ else
273
+ # Prefer dirname, but fall back on a substitute if dirname fails.
274
+ dstdir=`
275
+ (dirname "$dst") 2>/dev/null ||
276
+ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
277
+ X"$dst" : 'X\(//\)[^/]' \| \
278
+ X"$dst" : 'X\(//\)$' \| \
279
+ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
280
+ echo X"$dst" |
281
+ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
282
+ s//\1/
283
+ q
284
+ }
285
+ /^X\(\/\/\)[^/].*/{
286
+ s//\1/
287
+ q
288
+ }
289
+ /^X\(\/\/\)$/{
290
+ s//\1/
291
+ q
292
+ }
293
+ /^X\(\/\).*/{
294
+ s//\1/
295
+ q
296
+ }
297
+ s/.*/./; q'
298
+ `
299
+
300
+ test -d "$dstdir"
301
+ dstdir_status=$?
212
302
  fi
213
303
  fi
214
304
 
215
- # This sed command emulates the dirname command.
216
- dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
305
+ obsolete_mkdir_used=false
306
+
307
+ if test $dstdir_status != 0; then
308
+ case $posix_mkdir in
309
+ '')
310
+ # Create intermediate dirs using mode 755 as modified by the umask.
311
+ # This is like FreeBSD 'install' as of 1997-10-28.
312
+ umask=`umask`
313
+ case $stripcmd.$umask in
314
+ # Optimize common cases.
315
+ *[2367][2367]) mkdir_umask=$umask;;
316
+ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
317
+
318
+ *[0-7])
319
+ mkdir_umask=`expr $umask + 22 \
320
+ - $umask % 100 % 40 + $umask % 20 \
321
+ - $umask % 10 % 4 + $umask % 2
322
+ `;;
323
+ *) mkdir_umask=$umask,go-w;;
324
+ esac
325
+
326
+ # With -d, create the new directory with the user-specified mode.
327
+ # Otherwise, rely on $mkdir_umask.
328
+ if test -n "$dir_arg"; then
329
+ mkdir_mode=-m$mode
330
+ else
331
+ mkdir_mode=
332
+ fi
333
+
334
+ posix_mkdir=false
335
+ case $umask in
336
+ *[123567][0-7][0-7])
337
+ # POSIX mkdir -p sets u+wx bits regardless of umask, which
338
+ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
339
+ ;;
340
+ *)
341
+ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
342
+ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
343
+
344
+ if (umask $mkdir_umask &&
345
+ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
346
+ then
347
+ if test -z "$dir_arg" || {
348
+ # Check for POSIX incompatibilities with -m.
349
+ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
350
+ # other-writeable bit of parent directory when it shouldn't.
351
+ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
352
+ ls_ld_tmpdir=`ls -ld "$tmpdir"`
353
+ case $ls_ld_tmpdir in
354
+ d????-?r-*) different_mode=700;;
355
+ d????-?--*) different_mode=755;;
356
+ *) false;;
357
+ esac &&
358
+ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
359
+ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
360
+ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
361
+ }
362
+ }
363
+ then posix_mkdir=:
364
+ fi
365
+ rmdir "$tmpdir/d" "$tmpdir"
366
+ else
367
+ # Remove any dirs left behind by ancient mkdir implementations.
368
+ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
369
+ fi
370
+ trap '' 0;;
371
+ esac;;
372
+ esac
217
373
 
218
- # Make sure that the destination directory exists.
374
+ if
375
+ $posix_mkdir && (
376
+ umask $mkdir_umask &&
377
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
378
+ )
379
+ then :
380
+ else
219
381
 
220
- # Skip lots of stat calls in the usual case.
221
- if test ! -d "$dstdir"; then
222
- defaultIFS='
223
- '
224
- IFS="${IFS-$defaultIFS}"
382
+ # The umask is ridiculous, or mkdir does not conform to POSIX,
383
+ # or it failed possibly due to a race condition. Create the
384
+ # directory the slow way, step by step, checking for races as we go.
225
385
 
226
- oIFS=$IFS
227
- # Some sh's can't handle IFS=/ for some reason.
228
- IFS='%'
229
- set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
230
- shift
231
- IFS=$oIFS
386
+ case $dstdir in
387
+ /*) prefix='/';;
388
+ -*) prefix='./';;
389
+ *) prefix='';;
390
+ esac
232
391
 
233
- pathcomp=
392
+ eval "$initialize_posix_glob"
234
393
 
235
- while test $# -ne 0 ; do
236
- pathcomp=$pathcomp$1
394
+ oIFS=$IFS
395
+ IFS=/
396
+ $posix_glob set -f
397
+ set fnord $dstdir
237
398
  shift
238
- if test ! -d "$pathcomp"; then
239
- $mkdirprog "$pathcomp"
240
- # mkdir can fail with a `File exist' error in case several
241
- # install-sh are creating the directory concurrently. This
242
- # is OK.
243
- test -d "$pathcomp" || exit
399
+ $posix_glob set +f
400
+ IFS=$oIFS
401
+
402
+ prefixes=
403
+
404
+ for d
405
+ do
406
+ test -z "$d" && continue
407
+
408
+ prefix=$prefix$d
409
+ if test -d "$prefix"; then
410
+ prefixes=
411
+ else
412
+ if $posix_mkdir; then
413
+ (umask=$mkdir_umask &&
414
+ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
415
+ # Don't fail if two instances are running concurrently.
416
+ test -d "$prefix" || exit 1
417
+ else
418
+ case $prefix in
419
+ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
420
+ *) qprefix=$prefix;;
421
+ esac
422
+ prefixes="$prefixes '$qprefix'"
423
+ fi
424
+ fi
425
+ prefix=$prefix/
426
+ done
427
+
428
+ if test -n "$prefixes"; then
429
+ # Don't fail if two instances are running concurrently.
430
+ (umask $mkdir_umask &&
431
+ eval "\$doit_exec \$mkdirprog $prefixes") ||
432
+ test -d "$dstdir" || exit 1
433
+ obsolete_mkdir_used=true
244
434
  fi
245
- pathcomp=$pathcomp/
246
- done
435
+ fi
247
436
  fi
248
437
 
249
438
  if test -n "$dir_arg"; then
250
- $doit $mkdircmd "$dst" \
251
- && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
252
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
253
- && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
254
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
255
-
439
+ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
440
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
441
+ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
442
+ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
256
443
  else
257
- dstfile=`basename "$dst"`
258
444
 
259
445
  # Make a couple of temp file names in the proper directory.
260
446
  dsttmp=$dstdir/_inst.$$_
@@ -262,10 +448,9 @@ do
262
448
 
263
449
  # Trap to clean up those temp files at exit.
264
450
  trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
265
- trap '(exit $?); exit' 1 2 13 15
266
451
 
267
452
  # Copy the file name to the temp name.
268
- $doit $cpprog "$src" "$dsttmp" &&
453
+ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
269
454
 
270
455
  # and set any options; do chmod last to preserve setuid bits.
271
456
  #
@@ -273,48 +458,59 @@ do
273
458
  # ignore errors from any of these, just make sure not to ignore
274
459
  # errors from the above "$doit $cpprog $src $dsttmp" command.
275
460
  #
276
- { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
277
- && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
278
- && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
279
- && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
280
-
281
- # Now rename the file to the real destination.
282
- { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
283
- || {
284
- # The rename failed, perhaps because mv can't rename something else
285
- # to itself, or perhaps because mv is so ancient that it does not
286
- # support -f.
287
-
288
- # Now remove or move aside any old file at destination location.
289
- # We try this two ways since rm can't unlink itself on some
290
- # systems and the destination file might be busy for other
291
- # reasons. In this case, the final cleanup might fail but the new
292
- # file should still install successfully.
293
- {
294
- if test -f "$dstdir/$dstfile"; then
295
- $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
296
- || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
297
- || {
298
- echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
299
- (exit 1); exit 1
300
- }
301
- else
302
- :
303
- fi
304
- } &&
305
-
306
- # Now rename the file to the real destination.
307
- $doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
308
- }
309
- }
310
- fi || { (exit 1); exit 1; }
461
+ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
462
+ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
463
+ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
464
+ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
465
+
466
+ # If -C, don't bother to copy if it wouldn't change the file.
467
+ if $copy_on_change &&
468
+ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
469
+ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
470
+
471
+ eval "$initialize_posix_glob" &&
472
+ $posix_glob set -f &&
473
+ set X $old && old=:$2:$4:$5:$6 &&
474
+ set X $new && new=:$2:$4:$5:$6 &&
475
+ $posix_glob set +f &&
476
+
477
+ test "$old" = "$new" &&
478
+ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
479
+ then
480
+ rm -f "$dsttmp"
481
+ else
482
+ # Rename the file to the real destination.
483
+ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
484
+
485
+ # The rename failed, perhaps because mv can't rename something else
486
+ # to itself, or perhaps because mv is so ancient that it does not
487
+ # support -f.
488
+ {
489
+ # Now remove or move aside any old file at destination location.
490
+ # We try this two ways since rm can't unlink itself on some
491
+ # systems and the destination file might be busy for other
492
+ # reasons. In this case, the final cleanup might fail but the new
493
+ # file should still install successfully.
494
+ {
495
+ test ! -f "$dst" ||
496
+ $doit $rmcmd -f "$dst" 2>/dev/null ||
497
+ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
498
+ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
499
+ } ||
500
+ { echo "$0: cannot unlink or rename $dst" >&2
501
+ (exit 1); exit 1
502
+ }
503
+ } &&
504
+
505
+ # Now rename the file to the real destination.
506
+ $doit $mvcmd "$dsttmp" "$dst"
507
+ }
508
+ fi || exit 1
509
+
510
+ trap '' 0
511
+ fi
311
512
  done
312
513
 
313
- # The final little trick to "correctly" pass the exit status to the exit trap.
314
- {
315
- (exit 0); exit 0
316
- }
317
-
318
514
  # Local variables:
319
515
  # eval: (add-hook 'write-file-hooks 'time-stamp)
320
516
  # time-stamp-start: "scriptversion="