| static void | |
| putc(int fd, char c) | |
| { | |
| write(fd, &c, 1); | |
| } | |
| static void | |
| printint(int fd, int xx, int base, int sgn) | |
| { | |
| static char digits[] = "0123456789ABCDEF"; | |
| char buf[16]; | |
| int i, neg; | |
| uint x; | |
| neg = 0; | |
| if(sgn && xx < 0){ | |
| neg = 1; | |
| x = -xx; | |
| } else { | |
| x = xx; | |
| } | |
| i = 0; | |
| do{ | |
| buf[i++] = digits[x % base]; | |
| }while((x /= base) != 0); | |
| if(neg) | |
| buf[i++] = '-'; | |
| while(--i >= 0) | |
| putc(fd, buf[i]); | |
| } | |
| // Print to the given fd. Only understands %d, %x, %p, %s. | |
| void | |
| printf(int fd, const char *fmt, ...) | |
| { | |
| char *s; | |
| int c, i, state; | |
| uint *ap; | |
| state = 0; | |
| ap = (uint*)(void*)&fmt + 1; | |
| for(i = 0; fmt[i]; i++){ | |
| c = fmt[i] & 0xff; | |
| if(state == 0){ | |
| if(c == '%'){ | |
| state = '%'; | |
| } else { | |
| putc(fd, c); | |
| } | |
| } else if(state == '%'){ | |
| if(c == 'd'){ | |
| printint(fd, *ap, 10, 1); | |
| ap++; | |
| } else if(c == 'x' || c == 'p'){ | |
| printint(fd, *ap, 16, 0); | |
| ap++; | |
| } else if(c == 's'){ | |
| s = (char*)*ap; | |
| ap++; | |
| if(s == 0) | |
| s = "(null)"; | |
| while(*s != 0){ | |
| putc(fd, *s); | |
| s++; | |
| } | |
| } else if(c == 'c'){ | |
| putc(fd, *ap); | |
| ap++; | |
| } else if(c == '%'){ | |
| putc(fd, c); | |
| } else { | |
| // Unknown % sequence. Print it to draw attention. | |
| putc(fd, '%'); | |
| putc(fd, c); | |
| } | |
| state = 0; | |
| } | |
| } | |
| } | |
Xet Storage Details
- Size:
- 1.47 kB
- Xet hash:
- 91db803cc88ede0806fd0e13cdbb92fbdb8f56ea0cb5ea09adc3ab083323dff1
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.