11556Srgrimes/*-
21556Srgrimes * Copyright (c) 1991, 1993, 1994
31556Srgrimes *	The Regents of the University of California.  All rights reserved.
41556Srgrimes *
51556Srgrimes * Redistribution and use in source and binary forms, with or without
61556Srgrimes * modification, are permitted provided that the following conditions
71556Srgrimes * are met:
81556Srgrimes * 1. Redistributions of source code must retain the above copyright
91556Srgrimes *    notice, this list of conditions and the following disclaimer.
101556Srgrimes * 2. Redistributions in binary form must reproduce the above copyright
111556Srgrimes *    notice, this list of conditions and the following disclaimer in the
121556Srgrimes *    documentation and/or other materials provided with the distribution.
131556Srgrimes * 4. Neither the name of the University nor the names of its contributors
141556Srgrimes *    may be used to endorse or promote products derived from this software
151556Srgrimes *    without specific prior written permission.
161556Srgrimes *
171556Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
181556Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
191556Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
201556Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
211556Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
221556Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
231556Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
241556Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
251556Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
261556Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
271556Srgrimes * SUCH DAMAGE.
281556Srgrimes */
291556Srgrimes
301556Srgrimes#ifndef lint
3136152Scharnier#if 0
3236152Scharnierstatic char sccsid[] = "@(#)util.c	8.3 (Berkeley) 4/2/94";
3336152Scharnier#endif
341556Srgrimes#endif /* not lint */
3599110Sobrien#include <sys/cdefs.h>
3699110Sobrien__FBSDID("$FreeBSD$");
371556Srgrimes
381556Srgrimes#include <sys/types.h>
391556Srgrimes#include <sys/stat.h>
401556Srgrimes
411556Srgrimes#include <err.h>
421556Srgrimes#include <stdio.h>
431556Srgrimes#include <stdlib.h>
441556Srgrimes#include <unistd.h>
451556Srgrimes
461556Srgrimes#include "stty.h"
471556Srgrimes#include "extern.h"
481556Srgrimes
491556Srgrimes/*
501556Srgrimes * Gross, but since we're changing the control descriptor from 1 to 0, most
511556Srgrimes * users will be probably be doing "stty > /dev/sometty" by accident.  If 1
521556Srgrimes * and 2 are both ttys, but not the same, assume that 1 was incorrectly
531556Srgrimes * redirected.
541556Srgrimes */
551556Srgrimesvoid
5690111Simpcheckredirect(void)
571556Srgrimes{
581556Srgrimes	struct stat sb1, sb2;
591556Srgrimes
601556Srgrimes	if (isatty(STDOUT_FILENO) && isatty(STDERR_FILENO) &&
611556Srgrimes	    !fstat(STDOUT_FILENO, &sb1) && !fstat(STDERR_FILENO, &sb2) &&
621556Srgrimes	    (sb1.st_rdev != sb2.st_rdev))
639393Sbdewarnx("stdout appears redirected, but stdin is the control descriptor");
641556Srgrimes}
65