+ case 'l':
+ c = *fmt++;
+ switch (c) {
+ case 'd':
+ val = va_arg(args, long);
+ if (val < 0) {
+ neg = 1;
+ val = -val;
+ }
+ base = 10;
+ break;
+ case 'u':
+ val = va_arg(args, unsigned long);
+ base = 10;
+ break;
+ default:
+ *buf++ = '%'; --buflen;
+ *buf++ = 'l'; --buflen;
+ --fmt; /* so %lz outputs %lz etc. */
+ continue;
+ }
+ break;