util.c revision 1556
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 * 3. All advertising materials mentioning features or use of this software
141556Srgrimes *    must display the following acknowledgement:
151556Srgrimes *	This product includes software developed by the University of
161556Srgrimes *	California, Berkeley and its contributors.
171556Srgrimes * 4. Neither the name of the University nor the names of its contributors
181556Srgrimes *    may be used to endorse or promote products derived from this software
191556Srgrimes *    without specific prior written permission.
201556Srgrimes *
211556Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
221556Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
231556Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
241556Srgrimes * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
251556Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
261556Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
271556Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
281556Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
291556Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
301556Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
311556Srgrimes * SUCH DAMAGE.
321556Srgrimes */
331556Srgrimes
341556Srgrimes#ifndef lint
351556Srgrimesstatic char sccsid[] = "@(#)util.c	8.3 (Berkeley) 4/2/94";
361556Srgrimes#endif /* not lint */
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
561556Srgrimescheckredirect()
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))
631556Srgrimeswarn("stdout appears redirected, but stdin is the control descriptor");
641556Srgrimes}
65