xref: /illumos-gate/usr/src/cmd/diff3/diff3.sh (revision 4eaa471005973e11a6110b69fe990530b3b95a38)
1#!/usr/bin/sh
2#
3# CDDL HEADER START
4#
5# The contents of this file are subject to the terms of the
6# Common Development and Distribution License, Version 1.0 only
7# (the "License").  You may not use this file except in compliance
8# with the License.
9#
10# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
11# or http://www.opensolaris.org/os/licensing.
12# See the License for the specific language governing permissions
13# and limitations under the License.
14#
15# When distributing Covered Code, include this CDDL HEADER in each
16# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
17# If applicable, add the following below this CDDL HEADER, with the
18# fields enclosed by brackets "[]" replaced with your own identifying
19# information: Portions Copyright [yyyy] [name of copyright owner]
20#
21# CDDL HEADER END
22#
23#	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T
24#	  All Rights Reserved
25
26
27#	Copyright (c) 1999, 2001 by Sun Microsystems, Inc.
28#	All rights reserved.
29
30#ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.4	*/
31
32usage="usage: diff3 file1 file2 file3"
33
34# mktmpdir - Create a private (mode 0700) temporary directory inside of /tmp
35# for this process's temporary files.  We set up a trap to remove the
36# directory on exit (trap 0), and also on SIGHUP, SIGINT, SIGQUIT, SIGPIPE,
37# and SIGTERM.
38
39mktmpdir() {
40	tmpdir=/tmp/diff3.$$
41	trap '/usr/bin/rm -rf $tmpdir' 0 1 2 3 13 15
42	/usr/bin/mkdir -m 700 $tmpdir || exit 1
43}
44mktmpdir
45
46e=
47case $1 in
48-*)
49	e=$1
50	shift;;
51esac
52if [ $# != 3 ]; then
53	echo ${usage} 1>&2
54	exit 1
55fi
56if [ \( -f $1 -o -c $1 \) -a \( -f $2 -o -c $2 \) -a \( -f $3 -o -c $3 \) ]; then
57	:
58else
59	echo ${usage} 1>&2
60	exit 1
61fi
62f1=$1 f2=$2 f3=$3
63if [ -c $f1 ]
64then
65	/usr/bin/cat $f1 > $tmpdir/d3c$$
66	f1=$tmpdir/d3c$$
67fi
68if [ -c $f2 ]
69then
70	/usr/bin/cat $f2 > $tmpdir/d3d$$
71	f2=$tmpdir/d3d$$
72fi
73if [ -c $f3 ]
74then
75	/usr/bin/cat $f3 > $tmpdir/d3e$$
76	f3=$tmpdir/d3e$$
77fi
78
79/usr/bin/diff $f1 $f3 > $tmpdir/d3a$$ 2> $tmpdir/d3a$$.err
80STATUS=$?
81if [ $STATUS -eq 1 ]
82then
83	/usr/xpg4/bin/grep -q "^[<>]" $tmpdir/d3a$$
84	RET=$?
85	if [ $RET -eq 1 ]
86	then
87		/usr/bin/cat $tmpdir/d3a$$
88		exit $STATUS
89	fi
90
91	if [ $RET -gt 1 ]
92	then
93		echo "diff3 failed" 1>&2
94		exit $STATUS
95	fi
96fi
97
98if [ $STATUS -gt 1 ]
99then
100	/usr/bin/cat $tmpdir/d3a$$.err
101	exit $STATUS
102fi
103
104/usr/bin/diff $f2 $f3 > $tmpdir/d3b$$ 2> $tmpdir/d3b$$.err
105STATUS=$?
106if [ $STATUS -eq 1 ]
107then
108	/usr/xpg4/bin/grep -q "^[<>]" $tmpdir/d3b$$
109	RET=$?
110	if [ $RET -eq 1 ]
111	then
112		/usr/bin/cat $tmpdir/d3b$$
113		exit $STATUS
114	fi
115
116	if [ $RET -gt 1 ]
117	then
118		echo "diff3 failed" 1>&2
119		exit $STATUS
120	fi
121fi
122
123if [ $STATUS -gt 1 ]
124then
125	/usr/bin/cat $tmpdir/d3b$$.err
126	exit $STATUS
127fi
128
129/usr/lib/diff3prog $e $tmpdir/d3[ab]$$ $f1 $f2 $f3
130