campo-sirio/cb/setup/d4port.c
alex af15e0698b Codebase
git-svn-id: svn://10.65.10.50/trunk@4679 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-06-16 13:01:08 +00:00

671 lines
19 KiB
C
Executable File

/*********************************************************************
d4port.c (c)Copyright Sequiter Software Inc., 1996.
All rights reserved.
This example test program tests low-level functions.
*********************************************************************/
#include "d4port.h"
int main()
{
long lenl ;
int lens ;
long bscheckl = 2020175445;
int bschecks = 2020175445;
unsigned char testBuf[5] ;
unsigned char testunix[17], testxinu[5], testnuxi[5] ;
char teststr[6] ;
int rc, myfile, i, status ;
int bigbits =0; /*boolean*/
int iserror = EXIT_SUCCESS ;
char ch ;
pid_t pid;
double powc, powc2,atofcheck;
const double value = 9.876 ;
size_t size_var = 1;
char strtest[15];
char *str;
int dec, sign;
#ifndef S4NO_FTIME
struct timeb tp ;
#else
struct timeval tp;
#endif
setvbuf(stdout, NULL, _IOLBF, BUFSIZ);
/*S464BIT*************************************************/
if (sizeof(long) == 8)
{
bigbits = 1 ;
fprintf(stdout, " #define S464BIT\n");
}
else if (sizeof(long) == 4)
fprintf(stdout, "/* #define S464BIT */\n");
else
{
fprintf(stderr, "ERROR: Unknown bit system\n");
iserror = EXIT_FAILURE ;
}
/*S4BYTEORDER_3210****************************************/
/*S4BYTEORDER_2301****************************************/
if (bigbits)
{
lens = 0x01020408 ;
memcpy( testBuf, (void *)&lens, 4 ) ;
}
else
{
lenl = 0x01020408 ;
memcpy( testBuf, (void *)&lenl, 4 ) ;
}
memcpy( testunix, "\001\002\004\010", 4 ) ; /* S4BYTEORDER_3210 */
memcpy( testnuxi, "\002\001\010\004", 4 ) ; /* S4BYTEORDER_2301 */
memcpy( testxinu, "\010\004\002\001", 4 ) ; /* default */
if ( memcmp( testunix , testBuf, 4 ) )
if ( memcmp( testnuxi , testBuf, 4 ) )
if ( memcmp( testxinu , testBuf, 4 ) )
{
fprintf(stderr, "ERROR: Unknown byte ordering\n");
iserror = EXIT_FAILURE ;
}
else
{
fprintf(stdout, "/* #define S4BYTEORDER_2301 */\n");
fprintf(stdout, "/* #define S4BYTEORDER_3210 */\n");
}
else
{
fprintf(stdout, " #define S4BYTEORDER_2301 \n");
fprintf(stdout, "/* #define S4BYTEORDER_3210 */\n");
}
else
{
fprintf(stdout, "/* #define S4BYTEORDER_2301 */\n");
fprintf(stdout, " #define S4BYTEORDER_3210 \n");
}
/*S4BYTE_SWAP*********************************************/
/*OPENING FILE********************************************/
myfile = open("d4test", O_RDWR|O_CREAT|O_TRUNC, 0666);
if ( myfile < 0 )
{
fprintf(stderr, "ERROR: Function open() is failing with 'O_CREAT | O_TRUNC | O_RDWR'\n" );
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EACCES :
fprintf(stderr, "ERRNO == EACCES: Permission denied\n" ) ;
break ;
case EINVAL :
fprintf(stderr, "ERRNO == EINVAL: Invalid mode and permission setting\n" ) ;
break ;
case EEXIST :
fprintf(stderr, "ERRNO == EEXIST: O_CREAT and O_EXCL specified but file already exists\n" );
break ;
case EMFILE :
fprintf(stderr, "ERRNO == EMFILE: No more file handles available\n" ) ;
break ;
case ENOENT :
fprintf(stderr, "ERRNO == ENOENT: File not found or directory not present\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
rc = lseek( myfile, 10, SEEK_SET ) ;
if ( rc != 10 )
{
fprintf(stderr, "ERROR: Function lseek() is failing to seek past EOF(1)\n" );
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
case EINVAL :
fprintf(stderr, "ERRNO == EINVAL: Invalid mode and permission setting\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
if (bigbits)
rc = write(myfile, &bschecks, 4) ;
else
rc = write(myfile, &bscheckl, 4) ;
if ( rc != 4 )
{
fprintf(stderr, "ERROR: Function write() is failing to write past EOF\n" );
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
case ENOSPC :
fprintf(stderr, "ERRNO == ENOSPC: system out of disk space\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
rc = filelen(myfile);
if(rc != 14)
{
fprintf(stderr, "ERROR: File length is incorrect(1)\n");
iserror = EXIT_FAILURE ;
}
lseek(myfile, 10, SEEK_SET ) ;
for (i=0; i<4; i++)
{
rc=read(myfile,&teststr[i],size_var);
if (rc!=1)
{
fprintf(stderr, "ERROR: Problems reading from the file.\nUnable to continue\n");
iserror = EXIT_FAILURE ;
break;
}
}
if (strncmp(teststr, "Unix",4) )
if (strncmp(teststr, "xinU",4) )
{
fprintf(stderr, "ERROR: Writing error\n");
iserror = EXIT_FAILURE ;
}
else
fprintf(stdout," #define S4BYTE_SWAP\n");
else
fprintf(stdout,"/* #define S4BYTE_SWAP */\n");
rc = close( myfile ) ;
if ( rc < 0 )
{
fprintf(stderr, "ERROR: Closing file(1)\n");
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
myfile = open( "d4test", O_RDWR , 0666 ) ;
if ( myfile < 0 )
{
fprintf(stderr, "ERROR: function open() is failing with 'O_RDWR'\n");
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EACCES :
fprintf(stderr, "ERRNO == EACCES: Permission denied\n" ) ;
break ;
case EINVAL :
fprintf(stderr, "ERRNO == EINVAL: Invalid mode and permission setting\n" ) ;
break ;
case EEXIST :
fprintf(stderr, "ERRNO == EEXIST: O_CREAT and O_EXCL specified but file already exists\n" );
break ;
case EMFILE :
fprintf(stderr, "ERRNO == EMFILE: No more file handles available\n" ) ;
break ;
case ENOENT :
fprintf(stderr, "ERRNO == ENOENT: File not found or directory not present\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
/*Checking filelength(2)*************************************/
rc = filelen(myfile);
if(rc != 14)
{
fprintf(stderr, "ERROR: File length is incorrect(2)\n");
iserror = EXIT_FAILURE ;
}
#ifndef S4NO_CHSIZE
rc=chsize(myfile, 200);
#else
rc=ftruncate(myfile, 200);
#endif
if ( rc < 0 )
{
fprintf(stderr, "\nERROR: Changing file size \n" ) ;
iserror = EXIT_FAILURE ;
}
rc = filelen(myfile);
if(rc != 200)
{
fprintf(stderr, "ERROR: File length is incorrect(3)\n");
iserror = EXIT_FAILURE ;
}
rc = lseek( myfile, T4LOCK_POS, 0 ) ;
if ( rc != T4LOCK_POS )
{
fprintf(stderr, "ERROR: Function lseek() is failing to seek past EOF(2)\n" );
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
case EINVAL :
fprintf(stderr, "ERRNO == EINVAL: Invalid mode and permission setting\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
#ifdef S4LOCKF
rc = lockf( myfile, F_TLOCK, 1 ) ;
#else
rc = locking( myfile, LK_NBLCK, 1 ) ;
#endif
if ( rc < 0 )
{
iserror = EXIT_FAILURE ;
fprintf(stderr, "ERROR: Function lock() is failing to lock past EOF\n" );
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
case EINVAL :
fprintf(stderr, "ERRNO == EINVAL: Invalid mode and permission setting\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
rc = lseek( myfile, T4LOCK_POS, 0 ) ;
if ( rc != T4LOCK_POS )
{
fprintf(stderr,"ERROR: Function lseek() is failing to seek past EOF(3)\n" );
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
case EINVAL :
fprintf(stderr, "ERRNO == EINVAL: Invalid mode and permission setting\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
#ifdef S4LOCKF
rc = lockf( myfile, F_ULOCK, 1 ) ;
#else
rc = locking( myfile, LK_UNLCK, 1 ) ;
#endif
if ( rc < 0 )
{
fprintf(stderr, "ERROR: Function unlock() is failing to unlock file\n" );
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
case EINVAL :
fprintf(stderr, "ERRNO == EINVAL: Invalid mode and permission setting\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
/*S4NO_NEGATIVE_LOCK**************************************/
rc = lseek(myfile, -10, SEEK_SET ); /*rc should = -10 */
#ifdef S4LOCKF
rc = lockf( myfile, F_LOCK, 5 ) ;
#else
rc = locking( myfile, LK_NBLCK, 5 ) ;
#endif
if (rc != 0 )
{
fprintf(stderr, "ERROR: Locking\n");
iserror = EXIT_FAILURE ;
}
if ( (pid=fork()) <0)
{
fprintf(stderr, "ERROR: Fork(1)\n");
iserror = EXIT_FAILURE ;
}
else if (pid == 0)
{
int lockfail = 0;
rc = lseek(myfile, -15, SEEK_SET ); /*rc should = -15 */
#ifdef S4LOCKF
rc = lockf( myfile, F_TLOCK, 3 ) ;
#else
rc = locking( myfile, LK_NBLCK, 3 ) ;
#endif
if (rc < 0 )
lockfail = 1;
rc = lseek(myfile, 0, SEEK_SET ); /*rc should = 0 */
#ifdef S4LOCKF
rc = lockf( myfile, F_TLOCK, 5 ) ;
#else
rc = locking( myfile, LK_NBLCK, 5 ) ;
#endif
if (rc != 0 )
lockfail = 1;
exit(lockfail) ;
}
while(wait(&status)!=pid)
;
if ((WIFEXITED(status)==0))
{
fprintf(stderr, "ERROR: Fork(2)\n");
iserror = EXIT_FAILURE ;
}
if (WEXITSTATUS(status))
fprintf(stdout," #define S4NO_NEGATIVE_LOCK \n");
else
fprintf(stdout,"/* #define S4NO_NEGATIVE_LOCK */\n");
rc = close( myfile ) ;
if ( rc < 0 )
{
fprintf(stderr, "ERROR: Closing file(2)\n");
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EBADF :
fprintf(stderr, "ERRNO == EBADF: file handle is invalid\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
/*S4DATA_ALIGN************************************************/
/* testunix[1]='U';*/
/*testunix[2]='n';*/
/*testunix[3]='i';*/
/*testunix[4]='x';*/
/*if (signal(SIGBUS, sig_bus) == SIG_ERR)*/
/*{*/
/*fprintf(stderr, "ERROR: Unable to catch bus errors\n");*/
/*iserror = EXIT_FAILURE ;*/
/*}*/
/*bscheckl = *((long *)(testunix+1));*/
/*if (!buserr)*/
/*fprintf(stdout, "/ #define S4DATA_ALIGN /\n");*/
fprintf(stdout, " #define S4DATA_ALIGN\n");
/*S4MEMCMP************************************************/
rc = memcmp( "\320", "\120", 1 ) ;
if (rc <= 0) /* memcmp assumes signed bytes -- not usable */
fprintf(stdout," #define S4MEMCMP\n");
else
fprintf(stdout,"/* #define S4MEMCMP */\n");
/*Checking for unsigned bytes*******************************/
ch = -5 ;
if ( ch != -5 )
{
fprintf(stderr, "ERROR: compiled using unsigned byte default\n" ) ;
fprintf(stderr, "See your compiler documentation for\n" ) ;
fprintf(stderr, "'signed byte compilation' information.\n" ) ;
iserror = EXIT_FAILURE ;
}
/***********************************************************/
fprintf(stdout, "\n");
/*S4LOCKF****************************************************/
#ifndef S4LOCKF
fprintf(stdout, "/* #define S4LOCKF */\n");
#else
fprintf(stdout, " #define S4LOCKF\n");
#endif
/*S4NO_ATOF**************************************************/
#ifndef S4NO_ATOF
fprintf(stdout, "/* #define S4NO_ATOF */\n");
atofcheck = atof("-152.5e1gobbledigook");
if (atofcheck != -1525)
{
fprintf(stderr, "ERROR: atof() does not produce a correct result\n");
iserror = EXIT_FAILURE ;
}
#else
fprintf(stdout, " #define S4NO_ATOF\n");
#endif
/*S4NO_CHSIZE************************************************/
#ifndef S4NO_CHSIZE
fprintf(stdout, "/* #define S4NO_CHSIZE */\n");
#else
fprintf(stdout, " #define S4NO_CHSIZE\n");
#endif
/*S4NO_ECVT****************************************************/
#ifndef S4NO_ECVT
str=ecvt(value, 10, &dec, &sign);
if (strncmp(str,"98760000",8))
{
fprintf(stderr,"ERROR: ecvt() returned incorrect results\n");
iserror = EXIT_FAILURE ;
}
fprintf(stdout,"/* #define S4NO_ECVT */\n");
#else
fprintf(stdout," #define S4NO_ECVT\n");
#endif
/*S4NO_FCVT****************************************************/
#ifndef S4NO_FCVT
str= fcvt(value, 5, &dec, &sign);
if (strncmp(str, "987600",6))
{
fprintf(stderr, "ERROR: fcvt() returned incorrect results\n");
iserror = EXIT_FAILURE ;
}
fprintf(stdout,"/* #define S4NO_FCVT */\n");
#else
fprintf(stdout," #define S4NO_FCVT\n");
#endif
/*S4NO_FILELENGTH********************************************/
#ifndef S4NO_FILELENGTH
fprintf(stdout, "/* #define S4NO_FILELENGTH */\n");
#else
fprintf(stdout, " #define S4NO_FILELENGTH\n");
#endif
/*S4NO_FTIME*************************************************/
#ifndef S4NO_FTIME
ftime(&tp);
fprintf(stdout, "/* #define S4NO_FTIME */\n");
#else
gettimeofday(&tp, NULL);
fprintf(stdout, " #define S4NO_FTIME\n");
#endif
/*S4NO_MEMMOVE***********************************************/
#ifndef S4NO_MEMMOVE
strcpy(strtest, "unixxxxxxx");
memmove(&strtest[2], &strtest[0],4);
if (strcmp(strtest, "ununixxxxx"))
{
fprintf(stdout," #define S4NO_MEMMOVE\n");
}
else
{
strcpy(strtest, "xxxxxxunix");
memmove(&strtest[4], &strtest[6],4);
if (strcmp(strtest, "xxxxunixix"))
{
fprintf(stdout," #define S4NO_MEMMOVE\n");
}
else
fprintf(stdout,"/* #define S4NO_MEMMOVE */\n");
}
#else
fprintf(stdout,"/* #define S4NO_MEMMOVE */\n");
#endif
/*S4NO_POW***************************************************/
#ifndef S4NO_POW
powc = pow(10.0, 2.0);
if (powc == 100.0)
fprintf(stdout,"/* #define S4NO_POW */\n");
else
{
powc2 = floor(powc + 0.5);
if (powc2 == 100.0)
fprintf(stdout,"/* #define S4NO_POW */ /* Not 100%% precise */\n");
else
fprintf(stdout," #define S4NO_POW\n");
}
#else
fprintf(stdout, "#define S4NO_POW\n");
#endif
/*S4NO_RENAME**************************************************/
#ifndef S4NO_RENAME
fprintf(stdout, "/* #define S4NO_RENAME */\n");
rc = rename("d4test", "d4erik");
#else
fprintf(stdout, " #define S4NO_RENAME\n");
rc = system("mv d4test d4erik");
#endif
if (rc<0)
{
fprintf(stderr, "ERROR: Unable to change filename\n");
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EACCES :
fprintf(stderr, "ERRNO == EACCES: Permission denied\n" ) ;
break ;
case ENOENT :
fprintf(stderr, "ERRNO == ENOENT: No such file or directory\n" ) ;
break ;
default:
fprintf(stderr, "ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
/*S4NO_REMOVE*****************************************************/
#ifndef S4NO_REMOVE
fprintf(stdout, "/* #define S4NO_REMOVE */\n");
rc =remove("d4erik");
#else
fprintf(stdout, " #define S4NO_REMOVE\n");
rc =unlink("d4erik");
#endif
if (rc<0)
{
fprintf(stdout,"\nERROR: Unable to remove file\n" ) ;
iserror = EXIT_FAILURE ;
switch ( (int) errno )
{
case EACCES :
fprintf(stderr,"ERRNO == EACCES: Permission denied\n" ) ;
break ;
default:
fprintf(stderr,"ERRNO VALUE NOT RECOGNIZED\n" ) ;
}
}
/*S4NO_NO_SIZE_T**********************************************/
#ifndef S4NO_SIZE_T
fprintf(stdout, "/* #define S4NO_SIZE_T */\n");
#else
fprintf(stdout, " #define S4NO_SIZE_T\n");
#endif
/*S4NO_STRLWR**************************************************/
#ifndef S4NO_STRLWR
strcpy(strtest, "UNIX ROCKS");
strlwr(strtest);
rc = strcmp(strtest, "unix rocks");
if (rc)
{
fprintf(stderr, "ERROR: The strlwr() function does not work properly: %s\n", strtest);
iserror = EXIT_FAILURE ;
}
fprintf(stdout, "/* #define S4NO_STRLWR */\n") ;
#else
fprintf(stdout, " #define S4NO_STRLWR\n") ;
#endif
/*S4NO_STRUPR**************************************************/
#ifndef S4NO_STRUPR
strcpy(strtest, "unix rocks");
strupr(strtest);
rc = strcmp(strtest, "UNIX ROCKS");
if (rc)
{
fprintf(stderr, "ERROR: The strupr() function does not work properly: %s\n", strtest);
iserror = EXIT_FAILURE ;
}
fprintf(stdout, "/* #define S4NO_STRUPR */\n") ;
#else
fprintf(stdout, " #define S4NO_STRUPR\n") ;
#endif
/*S4NO_STRNICMP*************************************************/
#ifndef S4NO_STRNICMP
strcpy(strtest, "UnIx RoCkS");
rc = strnicmp(strtest, "uNiX rOcXx",8);
if (rc)
{
fprintf(stderr, "ERROR: The strnicmp() function does not work properly: %s\n", strtest);
iserror = EXIT_FAILURE ;
}
fprintf(stdout, "/* #define S4NO_STRNICMP */\n") ;
#else
fprintf(stdout, " #define S4NO_STRNICMP\n") ;
#endif
exit(iserror);
}
/*static void sig_bus(int signo)*/
/*{*/
/*if(signo == SIGBUS )*/
/*{*/
/*buserr = 1;*/
/*fprintf(stdout," #define S4DATA_ALIGN\n");*/
/*}*/
/*else*/
/*fprintf(stderr, "received signal %d\n", signo);*/
/*}*/
static int filelen(int myfile)
{
#ifndef S4NO_FILELENGTH
return filelength(myfile);
#else
struct stat strStat ;
if (fstat( myfile, &strStat) )
fprintf(stderr, "ERROR: file length function\n");
return ( (long)strStat.st_size ) ;
#endif
}