This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c/14175] New: I can compile this routine on Solaris 2.5 or newer, but not on Linux (Suse 9.0)
- From: "lapo at erdw dot ethz dot ch" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 17 Feb 2004 13:33:01 -0000
- Subject: [Bug c/14175] New: I can compile this routine on Solaris 2.5 or newer, but not on Linux (Suse 9.0)
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Compilation errors (some variables are undeclared, others are multiply
declared)
seem to arise from differences between header files in
Unix and Linux.
in particular, header files sys/filio.h and sys/ttold.h are present on
Sun but do not exist on Linux machines.
the source code of the routine follows:
/* Updated for Solaris 2.4, SPARCompiler 3.0.1; October 19, 1995,
Erik Larson */
#include <sys/types.h>
/* #include <rmt.h> */ /* omit this line if remote tape access library not
installed*/
#include <sys/stat.h>
#include <sys/times.h>
#include <sys/ioctl.h>
#include <sys/mtio.h>
#include <sys/file.h>
#include <sys/filio.h>
#include <sys/fcntl.h>
#include <dirent.h>
#include <sys/ttold.h>
#include <stdio.h>
#include <unistd.h>
struct sgttyb pack;
struct stat buf;
clockf_(ichan,iopt,isize,ires,ierrno)
long *ichan, *iopt, *isize, *ires, *ierrno;
{ extern int errno, lockf();
int kopt;
kopt = (int) (*iopt);
switch (kopt) {
case 0:
kopt = F_ULOCK;
break;
case 1:
kopt = F_LOCK;
break;
case 2:
kopt = F_TLOCK;
break;
case 3:
kopt = F_TEST;
break;
default:
fprintf(stderr, "lockf: unknown option %d", *iopt);
exit(2);
break;
}
errno=0;
*ires = (long) lockf((int)(*ichan), kopt, *isize);
*ierrno = (long) errno;
}
cermes_(ierrno,mess,lmess)
char *mess;
long *ierrno, *lmess;
{ extern int sys_nerr;
extern char *sys_errlist[];
char *cp, *mp;
int lm;
if(*ierrno >= 0 & *ierrno < sys_nerr)
{for (lm=0, mp=mess, cp=sys_errlist[*ierrno];*cp;mp++, cp++)
{*mp=*cp;lm++;}
*lmess=(long)lm;
}
else
*lmess=-1;
}
copendir_(name,ichan)
char *name;
long *ichan;
{ extern DIR *opendir();
*ichan=(long) opendir(name);
}
cclosedir_(ichan)
long *ichan;
{ closedir( (DIR *)(*ichan) );
}
creaddir_(ichan,name,lname,idno)
char *name;
long *ichan, *lname, *idno;
{
short i, l;
struct dirent *dptr;
char *nn;
if(dptr = readdir((DIR *)(*ichan)))
{l=dptr->d_reclen;
*lname= (long) l;
*idno=(long) dptr->d_ino;
for (i=0, nn=name; i < l; i++, nn++)
*nn=dptr->d_name[i];
}
else
{*lname=0;
*idno=-1;
}
}
creadlink_(path, pbuf, pnbyt, ires, ierrno)
char *pbuf, *path;
long *pnbyt, *ires, *ierrno;
{
extern int errno, readlink();
errno = 0;
*ires = (long) readlink(path , pbuf, (int) (*pnbyt));
*ierrno = (long) errno;
}
cgterr_(ierrno)
long *ierrno;
{ extern int errno;
*ierrno=(long)errno;
}
cmkdir_(pname,mode,ires,ierrno)
long *ires,*ierrno,*mode;
char *pname;
{
extern int errno, mkdir();
errno=0;
*ires=(long) mkdir(pname,(int)(*mode));
*ierrno=(long)errno;
}
cutimes_(pname, times, ires, ierrno)
long *ires, *ierrno;
long *times;
char *pname;
{
extern int errno, utimes();
errno=0;
*ires= (long) utimes( pname,times);
*ierrno=(long)errno;
}
cflush_(ichan, inout, ires, ierrno)
long *ichan, *inout, *ires, *ierrno;
{
extern int errno;
int arg;
errno=0;
arg=(int)(*inout);
*ires=(long) ioctl((int)(*ichan),TIOCFLUSH,&arg);
*ierrno=(long) errno;
}
cstdtr_(ichan, ires, ierrno)
long *ichan, *ires, *ierrno;
{
extern int errno;
errno=0;
*ires=(long) ioctl((int)(*ichan),TIOCSDTR,0);
*ierrno=(long) errno;
}
ccldtr_(ichan, ires, ierrno)
long *ichan, *ires, *ierrno;
{
extern int errno;
errno=0;
*ires=(long) ioctl((int)(*ichan),TIOCCDTR,0);
*ierrno=(long) errno;
}
cgtlmw_(ichan, iword, ires, ierrno)
long *ichan, *iword, *ires, *ierrno;
{
extern int errno;
int word;
errno=0;
*ires=(long) ioctl((int)(*ichan),TIOCLGET,&word);
*iword=(long) word;
*ierrno=(long) errno;
}
cstlmw_(ichan, iword, ires, ierrno)
long *ichan, *iword, *ires, *ierrno;
{
extern int errno;
int word;
errno=0;
word=*iword;
*ires=(long) ioctl((int)(*ichan),TIOCLSET,&word);
*ierrno=(long) errno;
}
cgtflag_(ichan, iflag, ires, ierrno)
long *ichan, *iflag, *ires, *ierrno;
{
extern int errno;
errno = 0;
*ires = (long) ioctl((int) (*ichan), TIOCGETP, &pack);
*ierrno = (long) errno;
*iflag = (long) pack.sg_flags;
}
cstflag_(ichan, iflag, speed, ires, ierrno)
long *ichan, *iflag, *speed, *ires, *ierrno;
{
extern int errno;
errno = 0;
pack.sg_flags = (int) (*iflag);
pack.sg_ispeed=(char) (*speed);
pack.sg_ospeed=(char) (*speed);
*ires = (long) ioctl((int) (*ichan), TIOCSETP, &pack);
*ierrno = (long) errno;
}
cstexc_(ichan, ires, ierrno)
long *ichan, *ires, *ierrno;
{
extern int errno;
char *dummy;
errno = 0;
*ires = (long) ioctl((int) (*ichan), TIOCEXCL, dummy);
*ierrno = (long) errno;
}
cnoblock_(ichan, iopt, ires, ierrno)
long *ichan, *iopt, *ires, *ierrno;
{
extern int errno;
int tiopt;
tiopt = (int) (*iopt);
errno = 0;
*ires = (long) ioctl((int) (*ichan), FIONBIO, &tiopt);
*ierrno = (long) errno;
}
copen_(pname, ichan, iopt, ierrno, inew, mode)
char *pname;
long *ichan, *iopt, *ierrno, *inew, *mode;
{
extern int errno;
extern int open();
int kopt, knew;
kopt = (int) (*iopt);
knew = (int) (*inew);
switch (kopt) {
case 0:
kopt = O_RDONLY;
break;
case 1:
kopt = O_WRONLY;
break;
case 2:
kopt = O_RDWR;
break;
case 8:
kopt = O_APPEND;
break;
default:
fprintf(stderr, "copen: unknown option %d", *iopt);
exit(2);
break;
}
switch (knew) {
case 0:
break;
case 1:
kopt = kopt | O_EXCL | O_CREAT;
break;
case 2:
kopt = kopt | O_TRUNC | O_CREAT;
break;
default:
fprintf(stderr, "copen: unknown status %d", *inew);
exit(2);
break;
}
errno = 0;
*ichan = (long) open(pname, kopt);
*ierrno = (long) errno;
}
cclose_(ichan, ires, ierrno)
long *ichan, *ires, *ierrno;
{
extern int errno;
extern int close();
errno = 0;
*ires = (long) close((int) (*ichan));
*ierrno = (long) errno;
}
cread_(ichan, pbuf, pnbyt, ires, ierrno)
char *pbuf;
long *ichan, *pnbyt, *ires, *ierrno;
{
extern int errno, read();
errno = 0;
*ires = (long) read((int) (*ichan), pbuf, (int) (*pnbyt));
*ierrno = (long) errno;
}
cwrite_(ichan, pbuf, pnbyt, ires, ierrno)
char *pbuf;
long *ichan, *pnbyt, *ires, *ierrno;
{
extern int errno, write();
errno = 0;
*ires = (long) write((int) (*ichan), pbuf, (int) (*pnbyt));
*ierrno = (long) errno;
}
clseek_(ichan, offst, iopt, ires, ierrno)
long *ichan, *offst, *iopt, *ires, *ierrno;
{
extern int errno;
int kopt;
kopt = (int) (*iopt);
switch (kopt) {
case 0:
kopt = SEEK_SET;
break;
case 1:
kopt = SEEK_CUR;
break;
case 2:
kopt = SEEK_END;
break;
default:
fprintf(stderr, "clseek: unknown optiion %d", *iopt);
exit(2);
break;
}
errno = 0;
*ires = (long) lseek((int) (*ichan), (*offst), kopt);
*ierrno = (long) errno;
}
cmtio_(ichan, iop, icnt, ires, ierrno)
long *ichan, *iop, *icnt, *ires, *ierrno;
{
extern int errno;
int kopt;
struct mtop magop;
kopt = (int) (*iop);
switch (kopt) {
case 0:
kopt = MTWEOF;
break;
case 1:
kopt = MTFSF;
break;
case 2:
kopt = MTBSF;
break;
case 3:
kopt = MTFSR;
break;
case 4:
kopt = MTBSR;
break;
case 5:
kopt = MTREW;
break;
case 6:
kopt = MTOFFL;
break;
case 7:
kopt = MTNOP;
break;
default:
fprintf(stderr, "cmtio: unknown optiion %d", *iop);
exit(2);
break;
}
magop.mt_op = kopt;
magop.mt_count = (long) (*icnt);
errno = 0;
*ires = (long) ioctl((int) (*ichan), MTIOCTOP, &magop);
*ierrno = (long) errno;
}
cperror_(s)
char *s;
{
perror(s);
}
csleep_(psec)
long *psec;
{
int idum;
idum = sleep((unsigned) (*psec));
}
/* This has been disabled */
cusleep_(psec)
long *psec;
{
int idum;
/* idum = usleep((unsigned) (*psec)); */
}
cfstat_(ichan, size, istat, ierrno)
long *ichan, *size, *istat, *ierrno;
{
extern int errno;
extern int fstat();
int dummy;
errno = 0;
/* printf("calling fstat in c\n"); */
dummy = fstat((int) (*ichan), &buf);
/* printf("fstat through in c\n"); */
*ierrno = (long) errno;
*size = (long) (buf.st_size);
*istat = (long) (buf.st_mode);
}
cstat_(file, size, block, istat, timea, timem, ierrno)
char *file;
long *size, *block, *istat, *timea, *timem, *ierrno;
{
extern int errno;
extern int stat();
int dummy;
errno = 0;
dummy = stat(file, &buf);
*ierrno = (long) errno;
*size = (long) (buf.st_size);
*istat = (long) (buf.st_mode);
*block= buf.st_blksize;
*timea=(long) buf.st_atime;
*timem=(long) buf.st_mtime;
}
ctrun_(ichan, leng, ierrno)
long *ichan, *leng, *ierrno;
{
extern int errno, ftruncate();
int dummy;
errno = 0;
dummy = ftruncate((int) (*ichan), (unsigned long) (*leng));
*ierrno = (long) errno;
}
cgetpid_(ires,ierrno)
long *ires,*ierrno;
{
extern int errno;
errno = 0;
*ires=(long)getpid();
*ierrno = (long) errno;
}
cgetppid_(ires,ierrno)
long *ires,*ierrno;
{
extern int errno;
errno = 0;
*ires=(long)getppid();
*ierrno = (long) errno;
}
/* this used to be called creadlink - i don't think its used anywhere */
creadlinkg_(path, file, namlen, ierrno)
char *path, *file;
int *namlen, *ierrno;
{
extern int errno, readlink();
int dummy;
errno = 0;
dummy = readlink(path, file, namlen);
if (dummy = -1) { *ierrno = errno; };
if (dummy!= -1) { *ierrno = dummy; };
}
--
Summary: I can compile this routine on Solaris 2.5 or newer, but
not on Linux (Suse 9.0)
Product: gcc
Version: 3.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: lapo at erdw dot ethz dot ch
CC: gcc-bugs at gcc dot gnu dot org,lapo at erdw dot ethz
dot ch
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=14175