redirect.c source code
                                          
/**********************************************************************
* The redirect function redirects standard  output to outFileName and
* standard input to inFileName. If either inFileName or outFileName is
* NULL, the corresponding redirection does not occur.
* It returns 0 if successful and -1 if unsuccessful.
**********************************************************************/

#include "ush.h"

int redirect(char *inFileName, char *outFileName)
{
    int indes;
    int outdes;

    if (inFileName != NULL) 
    {  
	/* redirect standard in to inFileName */
	if ((indes = open(inFileName, O_RDONLY, STDMODE)) == -1)
         return -1;
	 
	if (dup2(indes, STDIN_FILENO) == -1) 
	{
	    close(indes);
	    return -1;
	}  
	close(indes);
    }
    
    if (outFileName != NULL) 
    {
	/* redirect standard out to outFileName */
	if ((outdes = open(outFileName, O_WRONLY|O_CREAT, STDMODE)) == -1)
	    return -1;
	    
	if (dup2(outdes, STDOUT_FILENO) == -1) 
	{
	    close(outdes);
	    return -1;
	}
	close(outdes);
    }   
    return 0;
}