-#define putc(x, p) (--(p)->_cnt >= 0 || ((p)->_flag & _IOLBF) &&\
- -(p)->_cnt <= (p)->_bufsiz && (x) != '\n' ?\
- (int)(*(p)->_ptr++ = (unsigned)(x)) : _flsbuf((unsigned)(x), p))
+#define putc(x, p) (--(p)->_cnt >= 0 ?\
+ (int)(*(unsigned char *)(p)->_ptr++ = (x)) :\
+ (((p)->_flag & _IOLBF) && -(p)->_cnt < (p)->_bufsiz ?\
+ ((*(p)->_ptr = (x)) != '\n' ?\
+ (int)(*(unsigned char *)(p)->_ptr++) :\
+ _flsbuf(*(unsigned char *)(p)->_ptr, p)) :\
+ _flsbuf((unsigned char)(x), p)))