extern int f1 (int, void *); extern int *f2 (void) __attribute__ ((__const__)); extern int f3 (int, void *); int test (int x, char *y, int z) { int b = 0; if (x < 1024) { y[0] = '\0'; do { switch (f1 (x, y + b)) { case -1: if (b == 0) return -1; else return b; default: b++; } } while (y[b - 1] != '\0' && y[b - 1] != '\n' && b < z); } else { do { switch (f3 (x, y + b)) { case -1: if ((*f2 ()) == 4) continue; if (b == 0) return -1; else return b; default: b++; } } while (y[b - 1] != '\0' && y[b - 1] != '\n' && b < z); } return b; }