@@ -187,83 +187,51 @@ __termios_console_hook(struct _clib4 *__clib4, struct fd *fd, struct file_action
187187            assert (fam -> fam_Data  !=  NULL );
188188            assert (fam -> fam_Size  >  0 );
189189
190-             if  (FLAG_IS_CLEAR (fd -> fd_Flags , FDF_STDIO )) {
191-                 /* Attempt to fake everything needed in non-canonical mode. */ 
192-                 if  (FLAG_IS_SET (tios -> c_lflag , ICANON )) {
193-                     /* Canonical read = same as usual. Unless... */ 
194-                     if  (FLAG_IS_CLEAR (tios -> c_lflag , ECHO )) {
195-                         /* No-echo mode needs to be emulated. */ 
196-                         result  =  LineEditor (file , fam -> fam_Data , fam -> fam_Size , tios );
197-                     } else  {
198-                         result  =  Read (file , fam -> fam_Data , fam -> fam_Size );
199-                     }
200-                 } else  if  (fam -> fam_Size  >  0 ) {
201-                     /* Non-canonical reads have timeouts and a minimum number of characters to read. */ 
202-                     int  i  =  0 ;
203-                     result  =  0 ;
204- 
205-                     if  (tios -> c_cc [VMIN ] >  0 ) {
206-                         /* Reading the first character is not affected by the timeout unless VMIN==0. */ 
207-                         i  =  Read (file , fam -> fam_Data , 1 );
208-                         if  (i  ==  ERROR ) {
209-                             fam -> fam_Error  =  EIO ;
210-                             goto out ;
211-                         }
190+             /* Attempt to fake everything needed in non-canonical mode. */ 
191+             if  (FLAG_IS_SET (tios -> c_lflag , ICANON )) {
192+                 /* Canonical read = same as usual. Unless... */ 
193+                 if  (FLAG_IS_CLEAR (tios -> c_lflag , ECHO )) {
194+                     /* No-echo mode needs to be emulated. */ 
195+                     result  =  LineEditor (file , fam -> fam_Data , fam -> fam_Size , tios );
196+                 } else  {
197+                     result  =  Read (file , fam -> fam_Data , fam -> fam_Size );
198+                 }
199+             } else  if  (fam -> fam_Size  >  0 ) {
200+                 /* Non-canonical reads have timeouts and a minimum number of characters to read. */ 
201+                 int  i  =  0 ;
202+                 result  =  0 ;
212203
213-                         result  =  i ;
204+                 if  (tios -> c_cc [VMIN ] >  0 ) {
205+                     /* Reading the first character is not affected by the timeout unless VMIN==0. */ 
206+                     i  =  Read (file , fam -> fam_Data , 1 );
207+                     if  (i  ==  ERROR ) {
208+                         fam -> fam_Error  =  EIO ;
209+                         goto out ;
210+                     }
214211
215-                         while  ((result  <  tios -> c_cc [VMIN ]) &&  (result  <  fam -> fam_Size )) {
216-                             if  (tios -> c_cc [VTIME ] >  0 ) {
217-                                 if  (WaitForChar (file , 100000  *  tios -> c_cc [VTIME ]) ==  DOSFALSE ) {
218-                                     break ; /* No more characters available within alloted time. */ 
219-                                 }
220-                             }
212+                     result  =  i ;
221213
222-                             i  =  Read (file , & fam -> fam_Data [result ], 1 );
223-                             if  (i  <= 0 ) {
224-                                 break ; /* Break out of this while loop only. */ 
214+                     while  ((result  <  tios -> c_cc [VMIN ]) &&  (result  <  fam -> fam_Size )) {
215+                         if  (tios -> c_cc [VTIME ] >  0 ) {
216+                             if  (WaitForChar (file , 100000  *  tios -> c_cc [VTIME ]) ==  DOSFALSE ) {
217+                                 break ; /* No more characters available within alloted time. */ 
225218                            }
226- 
227-                             result  +=  i ;
228219                        }
229-                     } else  {
230-                         if  (WaitForChar (file , 100000  *  tios -> c_cc [VTIME ])) {
231-                             result  =  Read (file , fam -> fam_Data , fam -> fam_Size );
232-                         }
233-                     }
234-                 } else  {
235-                     result  =  0 ; /* Reading zero characters will always succeed. */ 
236-                 }
237-             } else  {
238-                 result  =  0 ;
239-                 /* Well.. this seems an hack to make ncurses works correctly 
240-                  * I don't know if there are other problems setting STDIO always 
241-                  * in RAW Mode but I suppose that we are ok since we are using 
242-                  * a termios hook 
243-                  */ 
244-                 SHOWVALUE (FLAG_IS_CLEAR (tios -> c_lflag , ICANON ));
245-                 if  (FLAG_IS_CLEAR (tios -> c_lflag , ICANON )) {
246-                     /* Set raw mode. */ 
247-                     if  (fam -> fam_DOSMode  ==  DOSFALSE ) {
248-                         SetMode (file , DOSTRUE );
249-                         fam -> fam_DOSMode  =  DOSTRUE ;
250-                     }
251-                     if  (tios -> c_cc [VMIN ] >  0  &&  tios -> c_cc [VTIME ] >  0 ) {
252-                         if  (WaitForChar (file , 100000  *  tios -> c_cc [VTIME ])) {
253-                             result  =  Read (file , fam -> fam_Data , fam -> fam_Size );
220+ 
221+                         i  =  Read (file , & fam -> fam_Data [result ], 1 );
222+                         if  (i  <= 0 ) {
223+                             break ; /* Break out of this while loop only. */ 
254224                        }
255-                     } else  {
256-                         if  (WaitForChar (file , 1 ))
257-                             result  =  Read (file , fam -> fam_Data , fam -> fam_Size );
225+ 
226+                         result  +=  i ;
258227                    }
259228                } else  {
260-                     if  (FLAG_IS_CLEAR (tios -> c_lflag , ECHO )) {
261-                         /* No-echo mode needs to be emulated. */ 
262-                         result  =  LineEditor (file , fam -> fam_Data , fam -> fam_Size , tios );
263-                     } else  {
229+                     if  (WaitForChar (file , 100000  *  tios -> c_cc [VTIME ])) {
264230                        result  =  Read (file , fam -> fam_Data , fam -> fam_Size );
265231                    }
266232                }
233+             } else  {
234+                 result  =  0 ; /* Reading zero characters will always succeed. */ 
267235            }
268236
269237            if  (result  ==  ERROR ) {
0 commit comments