/[rdesktop]/sourceforge.net/trunk/rdesktop/rdpdr.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/rdpdr.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 663 by astrand, Sat Apr 17 06:58:30 2004 UTC revision 710 by jsorg71, Tue Jun 15 22:17:08 2004 UTC
# Line 38  Line 38 
38  #include <sys/time.h>  #include <sys/time.h>
39  #include <dirent.h>             /* opendir, closedir, readdir */  #include <dirent.h>             /* opendir, closedir, readdir */
40  #include <time.h>  #include <time.h>
41    #include <errno.h>
42  #include "rdesktop.h"  #include "rdesktop.h"
43    
44  #define IRP_MJ_CREATE                   0x00  #define IRP_MJ_CREATE                   0x00
# Line 54  Line 55 
55  #define IRP_MN_QUERY_DIRECTORY          0x01  #define IRP_MN_QUERY_DIRECTORY          0x01
56  #define IRP_MN_NOTIFY_CHANGE_DIRECTORY  0x02  #define IRP_MN_NOTIFY_CHANGE_DIRECTORY  0x02
57    
58  extern char hostname[16];  extern char g_hostname[16];
59  extern DEVICE_FNS serial_fns;  extern DEVICE_FNS serial_fns;
60  extern DEVICE_FNS printer_fns;  extern DEVICE_FNS printer_fns;
61  extern DEVICE_FNS parallel_fns;  extern DEVICE_FNS parallel_fns;
62  extern DEVICE_FNS disk_fns;  extern DEVICE_FNS disk_fns;
63  extern FILEINFO g_fileinfo[];  extern FILEINFO g_fileinfo[];
64    
65  static VCHANNEL *rdpdr_channel;  static VCHANNEL *rdpdr_channel;
66    
67  /* If select() times out, the request for the device with handle g_min_timeout_fd is aborted */  /* If select() times out, the request for the device with handle g_min_timeout_fd is aborted */
# Line 204  rdpdr_send_name(void) Line 205  rdpdr_send_name(void)
205    
206          if (NULL == g_rdpdr_clientname)          if (NULL == g_rdpdr_clientname)
207          {          {
208                  g_rdpdr_clientname = hostname;                  g_rdpdr_clientname = g_hostname;
209          }          }
210          hostlen = (strlen(g_rdpdr_clientname) + 1) * 2;          hostlen = (strlen(g_rdpdr_clientname) + 1) * 2;
211    
# Line 814  rdpdr_add_fds(int *n, fd_set * rfds, fd_ Line 815  rdpdr_add_fds(int *n, fd_set * rfds, fd_
815          iorq = g_iorequest;          iorq = g_iorequest;
816          while (iorq != NULL)          while (iorq != NULL)
817          {          {
818                  /* We need to test that the fd is still valid */                  if (iorq->fd != 0)
                 if ((iorq->fd != 0) && (read(iorq->fd, &c, 0) == 0))  
819                  {                  {
820                          switch (iorq->major)                          switch (iorq->major)
821                          {                          {
822                                  case IRP_MJ_READ:                                  case IRP_MJ_READ:
823                                            /* Is this FD valid? FDs will
824                                               be invalid when
825                                               reconnecting. FIXME: Real
826                                               support for reconnects. */
827    
828                                            if ((read(iorq->fd, &c, 0) != 0) && (errno == EBADF))
829                                                    break;
830    
831                                          FD_SET(iorq->fd, rfds);                                          FD_SET(iorq->fd, rfds);
832                                            *n = MAX(*n, iorq->fd);
833    
834                                          // Check if io request timeout is smaller than current (but not 0).                                          // Check if io request timeout is smaller than current (but not 0).
835                                          if (iorq->timeout                                          if (iorq->timeout
# Line 835  rdpdr_add_fds(int *n, fd_set * rfds, fd_ Line 843  rdpdr_add_fds(int *n, fd_set * rfds, fd_
843                                                  tv->tv_usec = (select_timeout % 1000) * 1000;                                                  tv->tv_usec = (select_timeout % 1000) * 1000;
844                                                  *timeout = True;                                                  *timeout = True;
845                                          }                                          }
846    
847                                          break;                                          break;
848    
849                                  case IRP_MJ_WRITE:                                  case IRP_MJ_WRITE:
850                                            /* FD still valid? See above. */
851                                            if ((write(iorq->fd, &c, 0) != 0) && (errno == EBADF))
852                                                    break;
853    
854                                          FD_SET(iorq->fd, wfds);                                          FD_SET(iorq->fd, wfds);
855                                            *n = MAX(*n, iorq->fd);
856                                          break;                                          break;
857    
858                          }                          }
859                          *n = MAX(*n, iorq->fd);  
860                  }                  }
861    
862                  iorq = iorq->next;                  iorq = iorq->next;

Legend:
Removed from v.663  
changed lines
  Added in v.710

  ViewVC Help
Powered by ViewVC 1.1.26