diff options
Diffstat (limited to 'astro/gpsdrive/files/patch-src-gpsd.c')
-rw-r--r-- | astro/gpsdrive/files/patch-src-gpsd.c | 128 |
1 files changed, 128 insertions, 0 deletions
diff --git a/astro/gpsdrive/files/patch-src-gpsd.c b/astro/gpsdrive/files/patch-src-gpsd.c new file mode 100644 index 000000000000..58fcd74e4ab9 --- /dev/null +++ b/astro/gpsdrive/files/patch-src-gpsd.c @@ -0,0 +1,128 @@ +--- src/gpsd.c~ Fri Apr 19 20:26:14 2002 ++++ src/gpsd.c Thu Jun 27 18:02:12 2002 +@@ -78,27 +78,31 @@ + int debug = 0; + int device_speed = B4800; + int device_type; ++int nfds; /* number of file descriptors to select() for */ + char *device_name = 0; + char *latitude = 0; + char *longitude = 0; + char latd = 'N'; + char lond = 'W'; +- /* command line option defaults */ +-char *default_device_name = "/dev/gps"; +-char *default_latitude = "3600.000"; +-char *default_longitude = "-12300.000"; +- +-int nfds, dsock; +-int verbose = 1; +-int bincount; + +-int reopen = 0; ++/* command line option defaults */ ++static char *default_device_name = "/dev/gps"; ++static char *default_latitude = "3600.000"; ++static char *default_longitude = "-12300.000"; ++ ++static int dsock; /* socket to dpgs server */ ++ ++/* If set, close (and reopen?) the serial interface. Triggered by SIGUSR1. */ ++static int reopen = 0; ++ + + static int handle_input (int input, fd_set * afds, fd_set * nmea_fds); +-extern int handle_EMinput (int input, fd_set * afds, fd_set * nmea_fds); + static int handle_request (int fd, fd_set * fds); +-int connectsock (char *host, char *service, char *protocol); +-void em_send_rtcm (unsigned short *rtcmbuf, int rtcmbytes); ++ ++extern int handle_EMinput (int input, fd_set * afds, fd_set * nmea_fds); ++extern int connectsock (char *host, char *service, char *protocol); ++extern void em_send_rtcm (unsigned short *rtcmbuf, int rtcmbytes); ++ + + static void + onsig (int sig) +@@ -164,16 +168,17 @@ + char *default_service = "gpsd"; + char *default_dgpsserver = "dgps.wsrcc.com"; + char *default_dgpsport = "rtcm-sc104"; +- char *service = 0; ++ char *service = 0; /* port number to listen to */ + char *dgpsport = 0; + char *dgpsserver = 0; + struct sockaddr_in fsin; +- int msock; ++ int msock; /* listening socket fd */ + fd_set rfds; + fd_set afds; + fd_set nmea_fds; + int alen; +- int fd, input; ++ int fd; ++ int input; /* GPS device fd */ + int need_gps, need_dgps = 0, need_init = 1; + extern char *optarg; + int option; +@@ -273,17 +278,18 @@ + default: + fputs ("usage: gpsd [options] \n\ + options include: \n\ +- -D integer [ set debug level ] \n\ ++ -D level [ set debug level. If >= 2, remain in foreground ] \n\ + -L longitude [ set longitude ] \n\ +- -S integer [ set port for daemon ] \n\ +- -T e [ earthmate flag ] \n\ +- -h [ help message ] \n\ + -l latitude [ set latitude ] \n\ +- -p string [ set gps device name ] \n\ ++ -S port [ set gpsd listening port ] \n\ ++ -T type [ set DeLorme models. e = Earthmate, t = Tripmate ] \n\ ++ -h [ help message ] \n\ ++ -p path [ set gps device pathname ] \n\ + -s baud_rate [ set baud rate on gps device ] \n\ + -c [ use dgps service for corrections ] \n\ +- -d host [ set dgps server ] \n\ +- -r port [ set dgps rtcm-sc104 port ] \n\ ++ -d host [ set dgps server hostname] \n\ ++ -r port [ set dgps server port ] \n\ ++ -n [ disable setting default values for longitute and latitute ] \n\ + ", stderr); + exit (0); + } +@@ -354,8 +360,11 @@ + need_dgps = 0; + } + } +- +- nfds = getdtablesize (); ++#ifndef min ++#define min(a, b) (((a) < (b)) ? (a) : (b)) ++#endif ++ /* still wrong, but at least do not coredump */ ++ nfds = min (getdtablesize (), FD_SETSIZE); + + FD_ZERO (&afds); + FD_ZERO (&nmea_fds); +@@ -375,10 +384,9 @@ + + while (1) + { +- memcpy ((char *) &rfds, (char *) &afds, sizeof (rfds)); ++ memcpy (&rfds, &afds, sizeof (rfds)); + +- if (select (nfds, &rfds, (fd_set *) 0, (fd_set *) 0, +- (struct timeval *) 0) < 0) ++ if (select (nfds, &rfds, NULL, NULL, NULL) < 0) + { + if (errno == EINTR) + continue; +@@ -599,6 +607,7 @@ + { + static unsigned char buf[BUFSIZE]; /* that is more then a sentence */ + static int offset = 0; ++ static int bincount; + int fd; + + while (offset < BUFSIZE) |