1*4882a593SmuzhiyunFrom 9664809da36bd7bada3e44f50cfc042539fb61ee Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Paul Eggleton <paul.eggleton@linux.intel.com> 3*4882a593SmuzhiyunDate: Sun, 14 Jul 2019 19:13:21 -0700 4*4882a593SmuzhiyunSubject: [PATCH] Fix building with musl 5*4882a593Smuzhiyun 6*4882a593SmuzhiyunUpstream-status: Pending 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunSigned-off-by: Paul Eggleton <paul.eggleton@linux.intel.com> 9*4882a593Smuzhiyun--- 10*4882a593Smuzhiyun termios2.c | 27 +++++++++++++++++++++++++++ 11*4882a593Smuzhiyun termios2.h | 5 +++++ 12*4882a593Smuzhiyun 2 files changed, 32 insertions(+) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyundiff --git a/termios2.c b/termios2.c 15*4882a593Smuzhiyunindex 97c3be0..88ff6fc 100644 16*4882a593Smuzhiyun--- a/termios2.c 17*4882a593Smuzhiyun+++ b/termios2.c 18*4882a593Smuzhiyun@@ -37,6 +37,7 @@ 19*4882a593Smuzhiyun #include <errno.h> 20*4882a593Smuzhiyun #include <termios.h> 21*4882a593Smuzhiyun #include <sys/ioctl.h> 22*4882a593Smuzhiyun+#include <asm/ioctls.h> 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun /* Contains the definition of the termios2 structure and some related 25*4882a593Smuzhiyun constants that we should normally include from system 26*4882a593Smuzhiyun@@ -53,6 +54,10 @@ 27*4882a593Smuzhiyun */ 28*4882a593Smuzhiyun #define IBAUD0 020000000000 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun+#if !defined(__GLIBC__) 31*4882a593Smuzhiyun+#define __MAX_BAUD B4000000 32*4882a593Smuzhiyun+#endif 33*4882a593Smuzhiyun+ 34*4882a593Smuzhiyun int 35*4882a593Smuzhiyun tc2setattr(int fd, int optional_actions, const struct termios *tios) 36*4882a593Smuzhiyun { 37*4882a593Smuzhiyun@@ -79,8 +84,13 @@ tc2setattr(int fd, int optional_actions, const struct termios *tios) 38*4882a593Smuzhiyun t2.c_cflag = tios->c_cflag; 39*4882a593Smuzhiyun t2.c_lflag = tios->c_lflag; 40*4882a593Smuzhiyun t2.c_line = tios->c_line; 41*4882a593Smuzhiyun+#if !defined(__GLIBC__) 42*4882a593Smuzhiyun+ t2.c_ispeed = tios->__c_ispeed; 43*4882a593Smuzhiyun+ t2.c_ospeed = tios->__c_ospeed; 44*4882a593Smuzhiyun+#else 45*4882a593Smuzhiyun t2.c_ispeed = tios->c_ispeed; 46*4882a593Smuzhiyun t2.c_ospeed = tios->c_ospeed; 47*4882a593Smuzhiyun+#endif 48*4882a593Smuzhiyun memcpy(&t2.c_cc[0], &tios->c_cc[0], K_NCCS * sizeof (cc_t)); 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun return ioctl(fd, cmd, &t2); 51*4882a593Smuzhiyun@@ -101,8 +111,13 @@ tc2getattr(int fd, struct termios *tios) 52*4882a593Smuzhiyun tios->c_cflag = t2.c_cflag; 53*4882a593Smuzhiyun tios->c_lflag = t2.c_lflag; 54*4882a593Smuzhiyun tios->c_line = t2.c_line; 55*4882a593Smuzhiyun+#if !defined(__GLIBC__) 56*4882a593Smuzhiyun+ tios->__c_ispeed = t2.c_ispeed; 57*4882a593Smuzhiyun+ tios->__c_ospeed = t2.c_ospeed; 58*4882a593Smuzhiyun+#else 59*4882a593Smuzhiyun tios->c_ispeed = t2.c_ispeed; 60*4882a593Smuzhiyun tios->c_ospeed = t2.c_ospeed; 61*4882a593Smuzhiyun+#endif 62*4882a593Smuzhiyun memcpy(&tios->c_cc[0], &t2.c_cc[0], K_NCCS * sizeof (cc_t)); 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun for (i = K_NCCS; i < NCCS; i++) 65*4882a593Smuzhiyun@@ -131,7 +146,11 @@ cf2setispeed(struct termios *tios, speed_t speed) 66*4882a593Smuzhiyun errno = EINVAL; 67*4882a593Smuzhiyun return -1; 68*4882a593Smuzhiyun } 69*4882a593Smuzhiyun+#if !defined(__GLIBC__) 70*4882a593Smuzhiyun+ tios->__c_ispeed = speed; 71*4882a593Smuzhiyun+#else 72*4882a593Smuzhiyun tios->c_ispeed = speed; 73*4882a593Smuzhiyun+#endif 74*4882a593Smuzhiyun tios->c_cflag &= ~((CBAUD | CBAUDEX) << IBSHIFT); 75*4882a593Smuzhiyun tios->c_cflag |= (speed << IBSHIFT); 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun@@ -156,7 +175,11 @@ cf2setospeed_custom(struct termios *tios, int speed) 78*4882a593Smuzhiyun } 79*4882a593Smuzhiyun tios->c_cflag &= ~(CBAUD | CBAUDEX); 80*4882a593Smuzhiyun tios->c_cflag |= BOTHER; 81*4882a593Smuzhiyun+#if !defined(__GLIBC__) 82*4882a593Smuzhiyun+ tios->__c_ospeed = speed; 83*4882a593Smuzhiyun+#else 84*4882a593Smuzhiyun tios->c_ospeed = speed; 85*4882a593Smuzhiyun+#endif 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun return 0; 88*4882a593Smuzhiyun } 89*4882a593Smuzhiyun@@ -177,7 +200,11 @@ cf2setispeed_custom(struct termios *tios, int speed) 90*4882a593Smuzhiyun } else { 91*4882a593Smuzhiyun tios->c_cflag &= ~((CBAUD | CBAUDEX) << IBSHIFT); 92*4882a593Smuzhiyun tios->c_cflag |= (BOTHER << IBSHIFT); 93*4882a593Smuzhiyun+#if !defined(__GLIBC__) 94*4882a593Smuzhiyun+ tios->__c_ispeed = speed; 95*4882a593Smuzhiyun+#else 96*4882a593Smuzhiyun tios->c_ispeed = speed; 97*4882a593Smuzhiyun+#endif 98*4882a593Smuzhiyun } 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun return 0; 101*4882a593Smuzhiyundiff --git a/termios2.h b/termios2.h 102*4882a593Smuzhiyunindex e13b0e3..63dd0ce 100644 103*4882a593Smuzhiyun--- a/termios2.h 104*4882a593Smuzhiyun+++ b/termios2.h 105*4882a593Smuzhiyun@@ -37,8 +37,13 @@ 106*4882a593Smuzhiyun /* And define these new ones */ 107*4882a593Smuzhiyun #define cfsetospeed_custom cf2setospeed_custom 108*4882a593Smuzhiyun #define cfsetispeed_custom cf2setispeed_custom 109*4882a593Smuzhiyun+#if defined(__linux__) && !defined(__GLIBC__) 110*4882a593Smuzhiyun+#define cfgetospeed_custom(tiop) ((tiop)->__c_ospeed) 111*4882a593Smuzhiyun+#define cfgetispeed_custom(tiop) ((tiop)->__c_ispeed) 112*4882a593Smuzhiyun+#else 113*4882a593Smuzhiyun #define cfgetospeed_custom(tiop) ((tiop)->c_ospeed) 114*4882a593Smuzhiyun #define cfgetispeed_custom(tiop) ((tiop)->c_ispeed) 115*4882a593Smuzhiyun+#endif 116*4882a593Smuzhiyun 117*4882a593Smuzhiyun /* Replacements for the standard tcsetattr(3), tcgetattr(3) 118*4882a593Smuzhiyun * functions. Same user interface, but these use the new termios2 119