Mercurial > hg > CbC > CbC_gcc
comparison gcc/testsuite/gcc.c-torture/execute/20001124-1.c @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 | |
2 struct inode { | |
3 long long i_size; | |
4 struct super_block *i_sb; | |
5 }; | |
6 | |
7 struct file { | |
8 long long f_pos; | |
9 }; | |
10 | |
11 struct super_block { | |
12 int s_blocksize; | |
13 unsigned char s_blocksize_bits; | |
14 int s_hs; | |
15 }; | |
16 | |
17 static char * | |
18 isofs_bread(unsigned int block) | |
19 { | |
20 if (block) | |
21 abort (); | |
22 exit(0); | |
23 } | |
24 | |
25 static int | |
26 do_isofs_readdir(struct inode *inode, struct file *filp) | |
27 { | |
28 int bufsize = inode->i_sb->s_blocksize; | |
29 unsigned char bufbits = inode->i_sb->s_blocksize_bits; | |
30 unsigned int block, offset; | |
31 char *bh = 0; | |
32 int hs; | |
33 | |
34 if (filp->f_pos >= inode->i_size) | |
35 return 0; | |
36 | |
37 offset = filp->f_pos & (bufsize - 1); | |
38 block = filp->f_pos >> bufbits; | |
39 hs = inode->i_sb->s_hs; | |
40 | |
41 while (filp->f_pos < inode->i_size) { | |
42 if (!bh) | |
43 bh = isofs_bread(block); | |
44 | |
45 hs += block << bufbits; | |
46 | |
47 if (hs == 0) | |
48 filp->f_pos++; | |
49 | |
50 if (offset >= bufsize) | |
51 offset &= bufsize - 1; | |
52 | |
53 if (*bh) | |
54 filp->f_pos++; | |
55 | |
56 filp->f_pos++; | |
57 } | |
58 return 0; | |
59 } | |
60 | |
61 struct super_block s; | |
62 struct inode i; | |
63 struct file f; | |
64 | |
65 int | |
66 main(int argc, char **argv) | |
67 { | |
68 s.s_blocksize = 512; | |
69 s.s_blocksize_bits = 9; | |
70 i.i_size = 2048; | |
71 i.i_sb = &s; | |
72 f.f_pos = 0; | |
73 | |
74 do_isofs_readdir(&i,&f); | |
75 abort (); | |
76 } |