V9/jerq/sgs/strip/copytmp.c
/* UNIX HEADER */
#include <stdio.h>
/* COMMON SGS HEADERS */
#include "filehdr.h"
#include "ldfcn.h"
/* STRIP HEADER */
#include "defs.h"
/* copytmp(filename, filehead)
*
* copies file header in filehead back to original file and
* copies the rest of the stripped file from temporary back to original
*
* calls:
* - ignorsig( ) to turn off interrupts while recreating original file
* - resetsig( ) to turn signals back on after recreating original
* - error(file, string, level) if it cannot recreate original
*
* returns SUCCESS or FAILURE
*/
int
copytmp(filename, filehead)
char *filename;
FILHDR *filehead;
{
/* UNIX FUNCTIONS CALLED */
extern int fread( ),
fwrite( );
/* STRIP FUNCTIONS CALLED */
extern ignorsig( ),
resetsig( ),
error( );
/* EXTERNAL VARIABLES USED */
extern FILE *strp1,
*strp2,
*stripout;
#if FLEXNAMES
extern long string_size;
extern char tmpnam5[];
#endif
/* LOCAL VARIABLES */
char buffer[BUFSIZ];
int nitems;
#if FLEXNAMES
FILE *tmpfile;
#endif
ignorsig( );
if (fwrite(filehead, FILHSZ, 1, stripout) != 1) {
error(filename, "cannot recreate fileheader", 5);
resetsig( );
return(FAILURE);
}
while ((nitems = fread(buffer, sizeof (char), BUFSIZ, strp1)) != 0) {
if (fwrite(buffer, sizeof (char), nitems, stripout) != nitems) {
error(filename, "cannot recreate stripped file<tmp1>", 5);
resetsig( );
return(FAILURE);
}
}
while ((nitems = fread(buffer, sizeof (char), BUFSIZ, strp2)) != 0) {
if (fwrite(buffer, sizeof (char), nitems, stripout) != nitems) {
error(filename, "cannot recreate stripped file<tmp2>", 5);
resetsig( );
return(FAILURE);
}
}
#if FLEXNAMES
if (string_size > 0L)
{
if ((tmpfile = fopen( tmpnam5, "r" )) == NULL)
{
fprintf( stderr, "cannot read temp file" );
resetsig( );
return( FAILURE );
}
if (fwrite( &string_size, sizeof( long ), 1, stripout ) != 1)
{
error( filename, "cannot recreate stripped file", 5 );
resetsig( );
return( FAILURE );
}
while ((nitems = fread( buffer, sizeof( char ), BUFSIZ, tmpfile)) != 0)
if (fwrite( buffer, sizeof( char ), nitems, stripout ) != nitems)
{
error( filename, "cannot recreate stripped file", 5 );
resetsig( );
return( FAILURE );
}
fclose( tmpfile );
}
#endif
resetsig( );
return(SUCCESS);
}
/*
* static char ID[] = "@(#) copytmp.c: 1.4 3/3/83";
*/