* {allegra,ihnp4,uiucdcs,ctvax}!convex!williams
#if defined(BSD42) || defined(BSD43)
creadfile (save
, eraseflg
)
if (eraseflg
&& strcmp(save
, curfile
) && modcheck(" first")) return;
if ((fildes
= open(findhome(save
), O_RDONLY
, 0)) < 0)
error ("Can't read file \"%s\"", save
);
if (eraseflg
) erasedb ();
error("Can't make pipe to child");
if ((pid
=fork()) == 0) /* if child */
(void) close (0); /* close stdin */
(void) close (1); /* close stdout */
(void) close (pipefd
[0]); /* close pipe input */
(void) dup (fildes
); /* standard in from file */
(void) dup (pipefd
[1]); /* connect to pipe */
(void) fprintf (stderr
, " ");
(void) execl ("/bin/sh", "sh", "-c", "crypt", (char *)0);
(void) close (pipefd
[1]); /* close pipe output */
if ((f
= fdopen (pipefd
[0], "r")) == (FILE *)0)
error ("Can't fdopen file \"%s\"", save
);
(void) close (pipefd
[0]);
while (fgets(line
,sizeof line
,f
)) {
if (line
[0] != '#') (void) yyparse ();
(void) close (pipefd
[0]);
while (pid
!= wait(&fildes
)) /**/;
(void) strcpy (curfile
, save
);
cwritefile (fname
, r0
, c0
, rn
, cn
)
if (*fname
== '\0') fname
= &curfile
[0];
while (*fn
&& (*fn
== ' ')) /* Skip leading blanks */
error ("Can't have encrypted pipe");
(void) strcpy(save
,fname
);
if (!backup_file(busave
) &&
(yn_ask("Could not create backup copy, Save anyhow?: (y,n)") != 1))
if ((fildes
= open (busave
, O_TRUNC
|O_WRONLY
|O_CREAT
, 0600)) < 0)
error ("Can't create file \"%s\"", save
);
error ("Can't make pipe to child\n");
if ((pid
=fork()) == 0) /* if child */
(void) close (0); /* close stdin */
(void) close (1); /* close stdout */
(void) close (pipefd
[1]); /* close pipe output */
(void) dup (pipefd
[0]); /* connect to pipe input */
(void) dup (fildes
); /* standard out to file */
(void) fprintf (stderr
, " ");
(void) execl ("/bin/sh", "sh", "-c", "crypt", 0);
(void) close (pipefd
[0]); /* close pipe input */
f
= fdopen (pipefd
[1], "w");
error ("Can't fdopen file \"%s\"", save
);
(void) close (pipefd
[1]);
write_fd(f
, r0
, c0
, rn
, cn
);
(void) close (pipefd
[1]);
while (pid
!= wait(&fildes
)) /**/;
(void) strcpy(curfile
,save
);
error ("File \"%s\" written", curfile
);