pr33870-1.c

来自「用于进行gcc测试」· C语言 代码 · 共 95 行

C
95
字号
extern void abort (void);typedef struct PgHdr PgHdr;typedef unsigned char u8;struct PgHdr {int y;struct { unsigned int pgno; PgHdr *pNextHash, *pPrevHash; PgHdr *pNextFree, *pPrevFree; PgHdr *pNextAll; u8 inJournal; short int nRef; PgHdr *pDirty, *pPrevDirty; unsigned int notUsed;} x;};PgHdr **xx;volatile int vx;static inline PgHdr *merge_pagelist(PgHdr *pA, PgHdr *pB){ PgHdr result; PgHdr *pTail; xx = &result.x.pDirty; pTail = &result; while( pA && pB ){   if( pA->x.pgno<pB->x.pgno ){     pTail->x.pDirty = pA;     pTail = pA;     pA = pA->x.pDirty;   }else{     pTail->x.pDirty = pB;     pTail = pB;     pB = pB->x.pDirty;   }   vx = (*xx)->y; } if( pA ){   pTail->x.pDirty = pA; }else if( pB ){   pTail->x.pDirty = pB; }else{   pTail->x.pDirty = 0; } return result.x.pDirty;}PgHdr * __attribute__((noinline)) sort_pagelist(PgHdr *pIn){ PgHdr *a[25], *p; int i; __builtin_memset (a, 0, sizeof (a)); while( pIn ){   p = pIn;   pIn = p->x.pDirty;   p->x.pDirty = 0;   for(i=0; i<25 -1; i++){     if( a[i]==0 ){       a[i] = p;       break;     }else{       p = merge_pagelist(a[i], p);       a[i] = 0;       a[i] = 0;     }   }   if( i==25 -1 ){     a[i] = merge_pagelist(a[i], p);   } } p = a[0]; for(i=1; i<25; i++){   p = merge_pagelist (p, a[i]); } return p;}int main(){ PgHdr a[5]; PgHdr *p; a[0].x.pgno = 5; a[0].x.pDirty = &a[1]; a[1].x.pgno = 4; a[1].x.pDirty = &a[2]; a[2].x.pgno = 1; a[2].x.pDirty = &a[3]; a[3].x.pgno = 3; a[3].x.pDirty = 0; p = sort_pagelist (&a[0]); if (p->x.pDirty == p)   abort (); return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?