xref: /openbsd-src/usr.bin/diff3/diff3.ksh (revision 1a49fa34ae3de435d3bc8be7cc75d47be4a71074)
1d407ca27Smillert#!/bin/ksh -
2d407ca27Smillert#
3*1a49fa34Sajacoutot# $OpenBSD: diff3.ksh,v 1.6 2019/09/28 17:30:07 ajacoutot Exp $
4d407ca27Smillert#
5bf198cc6Smillert# Copyright (c) 2003 Todd C. Miller <millert@openbsd.org>
6d407ca27Smillert#
7d407ca27Smillert# Permission to use, copy, modify, and distribute this software for any
8d407ca27Smillert# purpose with or without fee is hereby granted, provided that the above
9d407ca27Smillert# copyright notice and this permission notice appear in all copies.
10d407ca27Smillert#
11d407ca27Smillert# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12d407ca27Smillert# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13d407ca27Smillert# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14d407ca27Smillert# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15d407ca27Smillert# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16d407ca27Smillert# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17d407ca27Smillert# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18d407ca27Smillert#
19d407ca27Smillert# Sponsored in part by the Defense Advanced Research Projects
20d407ca27Smillert# Agency (DARPA) and Air Force Research Laboratory, Air Force
21d407ca27Smillert# Materiel Command, USAF, under agreement number F39502-99-1-0512.
22d407ca27Smillert#
23d407ca27Smillert
24d407ca27Smillertset -o posix		# set POSIX mode to prevent +foo in getopts
25d407ca27SmillertOPTIND=1		# force getopts to reset itself
26d407ca27Smillert
27*1a49fa34Sajacoutotexport PATH=/usr/bin:/bin:/usr/sbin:/sbin
28d407ca27Smillertdiff3prog=/usr/libexec/diff3prog
2987c98d9cSjmcUSAGE="usage: diff3 [-3aEeXx] file1 file2 file3"
30d407ca27Smillert
31d407ca27Smillert# Pull out any command line flags (some for diff, some for diff3)
32d407ca27Smillertdflags=
33d407ca27Smillertd3flags=
34d407ca27Smillertwhile getopts "aeExX3" c; do
35d407ca27Smillert	case "$c" in
36d407ca27Smillert		a)
376789405fSmillert			dflags="$dflags -$c"
38d407ca27Smillert			;;
39d407ca27Smillert		e|E|x|X|3)
40d407ca27Smillert			d3flags="-$c"
41d407ca27Smillert			;;
42d407ca27Smillert		*)
43d407ca27Smillert			echo "$USAGE" 1>&2
44d407ca27Smillert			exit 1
45d407ca27Smillert			;;
46d407ca27Smillert	esac
47d407ca27Smillertdone
48d407ca27Smillertshift $(( $OPTIND - 1 ))
49d407ca27Smillert
506789405fSmillertif [ $# -lt 3 ]; then
516789405fSmillert	echo "$USAGE" 1>&2
526789405fSmillert	exit 1
536789405fSmillertfi
546789405fSmillert
55d407ca27SmillertTMP1=`mktemp -t d3a.XXXXXXXXXX` || exit 1
56d407ca27SmillertTMP2=`mktemp -t d3b.XXXXXXXXXX`
57d407ca27Smillertif [ $? -ne 0 ]; then
58d407ca27Smillert	rm -f $TMP1
59d407ca27Smillert	exit 1
60d407ca27Smillertfi
61d407ca27Smillerttrap "/bin/rm -f $TMP1 $TMP2" 0 1 2 13 15
6283865580Stedudiff $dflags -- $1 $3 > $TMP1
6383865580Stedudiff $dflags -- $2 $3 > $TMP2
6483865580Stedu$diff3prog $d3flags -- $TMP1 $TMP2 $1 $2 $3
65d407ca27Smillertexit $?
66