Binary to hex faster than xxd, part 2 of 2

  •     static void flush(void) {                                                                                                                 
          if (writeall(1, buf, buflen) == -1) _exit(errno);                                                                                     
          buflen = 0;                                                                                                                           
          }                                                                                                                                         
        static void wrch(const char ch) {                                                                                                         
          if (buflen >= sizeof buf) flush();                                                                                                    
          buf[buflen++] = ch;                                                                                                                   
          return;                                                                                                                               
         }                                                                                                                                         
        char inbuf[128];
        int main(int argc, char **argv) {
            long long r, i;
            for (;;) {
                r = read(0, inbuf, sizeof inbuf);
                if (r == -1) _exit(errno);
                if (r == 0) break;
                for (i = 0; i < r; ++i) {
                    wrch("0123456789abcdef"[15 & (inbuf[i] >> 4)]);
                    wrch("0123456789abcdef"[15 & inbuf[i]]);
                }
            }
            wrch('\n');
            return 0;
        }