diff --git a/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc b/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc index 01b3e3d51..3385d6c92 100644 --- a/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc +++ b/src/algorithms/libs/rtklib/rtklib_rtkcmn.cc @@ -31,6 +31,7 @@ #include "rtklib_rtkcmn.h" #include +#include #include #include #include @@ -377,7 +378,7 @@ int satsys(int sat, int *prn) int satid2no(const char *id) { int sys; - int prn; + int prn = 0; char code; if (sscanf(id, "%d", &prn) == 1) @@ -1417,6 +1418,7 @@ void matfprint(const double A[], int n, int m, int p, int q, FILE *fp) } } + void matsprint(const double A[], int n, int m, int p, int q, std::string &buffer) { int i; @@ -2689,6 +2691,20 @@ void addpcv(const pcv_t *pcv, pcvs_t *pcvs) } +/* strncpy without truncation ------------------------------------------------*/ +char *strncpy_no_trunc(char *out, size_t outsz, const char *in, size_t insz) +{ + assert(outsz > 0); + while (--outsz > 0 && insz > 0 && *in) + { + *out++ = *in++; + insz--; + } + *out = 0; + return out; +} + + /* read ngs antenna parameter file -------------------------------------------*/ int readngspcv(const char *file, pcvs_t *pcvs) { @@ -2718,7 +2734,7 @@ int readngspcv(const char *file, pcvs_t *pcvs) if (++n == 1) { pcv = pcv0; - strncpy(pcv.type, buff, 61); + strncpy_no_trunc(pcv.type, 61, buff, 256); pcv.type[61] = '\0'; } else if (n == 2) diff --git a/src/algorithms/libs/rtklib/rtklib_rtkcmn.h b/src/algorithms/libs/rtklib/rtklib_rtkcmn.h index b7724fac2..1ca972df5 100644 --- a/src/algorithms/libs/rtklib/rtklib_rtkcmn.h +++ b/src/algorithms/libs/rtklib/rtklib_rtkcmn.h @@ -59,6 +59,7 @@ #define GNSS_SDR_RTKLIB_RTKCMN_H #include "rtklib.h" +#include #include @@ -96,7 +97,7 @@ } \ while (0) - +char *strncpy_no_trunc(char *out, size_t outsz, const char *in, size_t insz); void fatalerr(const char *format, ...); int satno(int sys, int prn); int satsys(int sat, int *prn);