aboutsummaryrefslogtreecommitdiff
path: root/astro/gpsdrive/files/patch-src-gpsd.c
diff options
context:
space:
mode:
Diffstat (limited to 'astro/gpsdrive/files/patch-src-gpsd.c')
-rw-r--r--astro/gpsdrive/files/patch-src-gpsd.c128
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)