diff options
Diffstat (limited to 'gcc/testsuite/gcc.wendy/gnu2.c')
-rwxr-xr-x | gcc/testsuite/gcc.wendy/gnu2.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.wendy/gnu2.c b/gcc/testsuite/gcc.wendy/gnu2.c new file mode 100755 index 0000000..296c34c --- /dev/null +++ b/gcc/testsuite/gcc.wendy/gnu2.c @@ -0,0 +1,122 @@ +/* + * Causes gnu cc 1.14 to coredump. Not sure why. + * An excerpt from PD tar's "list.c" file. + */ +typedef unsigned char u_char; +typedef unsigned short u_short; +typedef unsigned int u_int; +typedef unsigned long u_long; +typedef unsigned short ushort; +typedef unsigned int uint; + + + + + + + + +typedef struct _physadr { short r[1]; } *physadr; +typedef struct label_t { + int val[13]; +} label_t; + +typedef struct _quad { long val[2]; } quad; +typedef long daddr_t; +typedef char * caddr_t; +typedef u_long ino_t; +typedef long swblk_t; + +typedef long time_t; +typedef short dev_t; +typedef int off_t; +typedef long key_t; + +typedef struct fd_set { int fds_bits[1]; } fd_set; + + +struct stat { + dev_t st_dev; + ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + dev_t st_rdev; + off_t st_size; + time_t st_atime; + int st_spare1; + time_t st_mtime; + int st_spare2; + time_t st_ctime; + int st_spare3; + long st_blksize; + long st_blocks; + long st_spare4[2]; +}; + +union record { + char charptr[512 ]; + struct header { + char name[100 ]; + char mode[8]; + char uid[8]; + char gid[8]; + char size[12]; + char mtime[12]; + char chksum[8]; + char linkflag; + char linkname[100 ]; + char magic[8]; + char uname[32 ]; + char gname[32 ]; + char devmajor[8]; + char devminor[8]; + } header; +}; +long from_oct(); + +decode_header(header, st, stdp, wantug) + register union record *header; + register struct stat *st; + int *stdp; + int wantug; +{ + + st->st_mode = from_oct(8, header->header.mode); + st->st_mtime = from_oct(1+12, header->header.mtime); + + if (0==strcmp(header->header.magic, "ustar " )) { + + *stdp = 1; + if (wantug) { + st->st_uid = finduid(header->header.uname); + st->st_gid = findgid(header->header.gname); + } + switch (header->header.linkflag) + case '4' : case '3' : + st->st_rdev = ((dev_t)(((from_oct(8, header->header.devmajor))<<8) | ( + from_oct(8, header->header.devminor)))) ; + } else { + *stdp = 0; + st->st_uid = from_oct(8, header->header.uid); + st->st_gid = from_oct(8, header->header.gid); + st->st_rdev = 0; + } +} + +main(){ + printf("Test passed (if it compiled at all)\n"); +} + +long from_oct(x) + char *x; +{ + return 0; +} + +int finduid(x) char *x; +{ return 0; } + +int findgid(x) char *x; +{ return 0; } |