|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T u
Length: 2757 (0xac5)
Types: TextFile
Names: »unbind.c«
└─⟦3d0c2be1b⟧ Bits:30001254 ISODE-5.0 Tape
└─⟦eba4602b1⟧ »./isode-5.0.tar.Z«
└─⟦d3ac74d73⟧
└─⟦this⟧ »isode-5.0/others/quipu/uips/dish/unbind.c«
/* unbind.c - dish shell unbind and squid commands */
#ifndef lint
static char *rcsid = "$Header: /f/osi/others/quipu/uips/dish/RCS/unbind.c,v 6.0 89/03/18 23:34:32 mrose Rel $";
#endif
/*
* $Header: /f/osi/others/quipu/uips/dish/RCS/unbind.c,v 6.0 89/03/18 23:34:32 mrose Rel $
*
*
* $Log: unbind.c,v $
* Revision 6.0 89/03/18 23:34:32 mrose
* Release 5.0
*
*/
/*
* NOTICE
*
* Acquisition, use, and distribution of this module and related
* materials are subject to the restrictions of a license agreement.
* Consult the Preface in the User's Manual for the full terms of
* this agreement.
*
*/
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include "quipu/util.h"
#include <signal.h>
#ifndef BINDIR
#define BINDIR "/usr"
#endif
#define BIGBUF 100000
extern int errno;
char retfile [LINESIZE];
int fd;
main (argc,argv)
int argc;
char ** argv;
{
int res;
char buffer [BIGBUF];
char sendfile [LINESIZE];
int i;
char * ptr;
void pipe_quit ();
char * getenv(), *ttyname(), *sprintf();
(void) umask(0);
(void) sprintf (retfile,"/tmp/dish%d",getpid());
(void) sprintf (sendfile,"/tmp/dish-%s-%d",rindex(ttyname(0),'/')+1, getuid());
setbuf (stdout,NULLCP);
setbuf (stderr,NULLCP);
if (mknod (retfile,S_IFIFO|0660,0) == -1) {
(void) fprintf (stderr,"Can't create result file %s\n",retfile);
exit (-5);
}
for (i=1; i<=15; i++)
(void) signal(i,pipe_quit);
if ((fd = open (sendfile,O_WRONLY|O_NDELAY)) == -1) {
(void) fprintf (stderr,"No connection and no cache !!!\n");
(void) unlink (retfile);
exit (0);
}
argc--;
if ((ptr = rindex (argv[0],'/')) == NULLCP)
(void) sprintf (buffer,"%s:%s",retfile,argv[0]);
else
(void) sprintf (buffer,"%s:%s",retfile,++ptr);
*argv++;
while (argc--) {
(void) strcat (buffer," ");
(void) strcat (buffer,*argv++);
}
if (( res =write (fd, buffer,strlen (buffer))) == -1) {
(void) fprintf (stderr,"Write failed\n");
(void) close (fd);
(void) unlink (retfile);
exit (-2);
}
(void) close (fd);
/* get results */
if (( fd = open (retfile,O_RDONLY)) < 0) {
(void) fprintf (stderr,"Can't read results\n");
(void) unlink (retfile);
exit (-3);
}
if (( res = read (fd,buffer,BIGBUF)) == -1) {
(void) fprintf (stderr,"Read failed (%d)\n",errno);
(void) unlink (retfile);
(void) close (fd);
exit (-4);
}
*(buffer+res) = 0;
if (*buffer == '2')
fputs (&buffer[1], stderr);
else if (*buffer == '1')
fputs (&buffer[1], stdout);
(void) close (fd);
(void) unlink (retfile);
if (*buffer == '2')
exit (-1);
}
void pipe_quit (sig)
int sig;
{
extern char *sys_siglist[];
(void) fprintf (stderr,"(%s) exiting...\n",sys_siglist[sig]);
(void) unlink (retfile);
}