int next_num(int num) { char num_str[10]; int index, len, i, least_idx, least_num; int num_array[9], tmp; memset(num_str, 0, 10); sprintf(num_str, "%d", num); len = strlen(num_str); for (i = 0; i < len; i++) { num_array[i] = C2N(num_str[i]); } for (i = 0; i < len - 1; i++) { if (num_array[i] < num_array[i + 1]) index = i; } for (i = index + 1, least_num = 9; i < len; i++) { if (num_array[i] < least_num && num_array[i] > num_array[index]) { least_idx = i; least_num = num_array[i]; } } tmp = num_array[index]; num_array[index] = num_array[least_idx]; num_array[least_idx] = tmp; quick_sort(num_array, index + 1, len - 1); for (i = 0; i < len; i++) { num_str[i] = N2C(num_array[i]); } return atoi(num_str); }
int gdb_tx_mem(const unsigned char *addr, size_t size) { void *prev; jmp_buf jb; int ret; prev = kdb_jmpbuf(jb); ret = setjmp(jb); if (ret == 0) { while (size-- > 0) { *gdb_txp++ = N2C(*addr >> 4); *gdb_txp++ = N2C(*addr & 0x0f); addr++; } } (void)kdb_jmpbuf(prev); return ((ret == 0) ? 1 : 0); }
int gdb_tx_end(void) { const char *p; int runlen; unsigned char c, cksum; do { gdb_cur->gdb_putc('$'); cksum = 0; p = gdb_txbuf; while (p < gdb_txp) { /* Send a character and start run-length encoding. */ c = *p++; gdb_cur->gdb_putc(c); cksum += c; runlen = 0; /* Determine run-length and update checksum. */ while (p < gdb_txp && *p == c) { runlen++; p++; } /* Emit the run-length encoded string. */ while (runlen >= 97) { gdb_cur->gdb_putc('*'); cksum += '*'; gdb_cur->gdb_putc(97+29); cksum += 97+29; runlen -= 97; if (runlen > 0) { gdb_cur->gdb_putc(c); cksum += c; runlen--; } } if (runlen == 1) { gdb_cur->gdb_putc(c); cksum += c; runlen--; } if (runlen == 0) continue; /* Don't emit '$', '#', '+' or '-'. */ if (runlen == 7) { gdb_cur->gdb_putc(c); cksum += c; runlen--; } if (runlen == 6 || runlen == 14 || runlen == 16) { gdb_cur->gdb_putc(c); cksum += c; runlen--; } gdb_cur->gdb_putc('*'); cksum += '*'; gdb_cur->gdb_putc(runlen+29); cksum += runlen+29; } gdb_cur->gdb_putc('#'); c = cksum >> 4; gdb_cur->gdb_putc(N2C(c)); c = cksum & 0x0f; gdb_cur->gdb_putc(N2C(c)); c = gdb_getc(); } while (c != '+'); return (0); }