Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions general/g.setproj/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,8 +209,9 @@ int main(int argc, char *argv[])
1)) {
char lbuf[100], lbufa[100];

if (exist && (G_get_datumparams_from_projinfo(old_proj_keys, lbuf,
lbufa) == 2)) {
if (exist &&
(G_get_datumparams_from_projinfo(old_proj_keys, lbuf, sizeof(lbuf),
lbufa, sizeof(lbufa)) == 2)) {
G_strip(lbuf);
if ((i = G_get_datum_by_name(lbuf)) > 0) {
G_message(_("The current datum is %s (%s)"), G_datum_name(i),
Expand Down
3 changes: 2 additions & 1 deletion include/grass/defs/gis.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,8 @@ int G_get_datum_by_name(const char *);
const char *G_datum_name(int);
const char *G_datum_description(int);
const char *G_datum_ellipsoid(int);
int G_get_datumparams_from_projinfo(const struct Key_Value *, char *, char *);
int G_get_datumparams_from_projinfo(const struct Key_Value *, char *, size_t,
char *, size_t);
void G_read_datum_table(void);

/* debug.c */
Expand Down
27 changes: 18 additions & 9 deletions lib/gis/datum.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,19 @@ const char *G_datum_ellipsoid(int n)
}

/***********************************************************
* G_get_datumparams_from_projinfo(projinfo, datumname, params)
* G_get_datumparams_from_projinfo(projinfo, datumname, datumname_size,
* params, params_size)
* struct Key_Value *projinfo Set of key_value pairs containing
* projection information in PROJ_INFO file
* format
* char *datumname Pointer into which a string containing
* the datum name (if present) will be
* placed.
* size_t datumname_size Size in bytes of the datumname buffer.
* char *params Pointer into which a string containing
* the datum parameters (if present) will
* be placed.
* size_t params_size Size in bytes of the params buffer.
*
* Extract the datum transformation-related parameters from a
* set of general PROJ_INFO parameters.
Expand All @@ -102,33 +105,39 @@ const char *G_datum_ellipsoid(int n)
************************************************************/

int G_get_datumparams_from_projinfo(const struct Key_Value *projinfo,
char *datumname, char *params)
char *datumname, size_t datumname_size,
char *params, size_t params_size)
{
int returnval = -1;

if (NULL != G_find_key_value("datum", projinfo)) {
sprintf(datumname, "%s", G_find_key_value("datum", projinfo));
snprintf(datumname, datumname_size, "%s",
G_find_key_value("datum", projinfo));
returnval = 1;
}

if (G_find_key_value("datumparams", projinfo) != NULL) {
sprintf(params, "%s", G_find_key_value("datumparams", projinfo));
snprintf(params, params_size, "%s",
G_find_key_value("datumparams", projinfo));
returnval = 2;
}
else if (G_find_key_value("nadgrids", projinfo) != NULL) {
sprintf(params, "nadgrids=%s", G_find_key_value("nadgrids", projinfo));
snprintf(params, params_size, "nadgrids=%s",
G_find_key_value("nadgrids", projinfo));
returnval = 2;
}
else if (G_find_key_value("towgs84", projinfo) != NULL) {
sprintf(params, "towgs84=%s", G_find_key_value("towgs84", projinfo));
snprintf(params, params_size, "towgs84=%s",
G_find_key_value("towgs84", projinfo));
returnval = 2;
}
else if (G_find_key_value("dx", projinfo) != NULL &&
G_find_key_value("dy", projinfo) != NULL &&
G_find_key_value("dz", projinfo) != NULL) {
sprintf(params, "towgs84=%s,%s,%s", G_find_key_value("dx", projinfo),
G_find_key_value("dy", projinfo),
G_find_key_value("dz", projinfo));
snprintf(params, params_size, "towgs84=%s,%s,%s",
G_find_key_value("dx", projinfo),
G_find_key_value("dy", projinfo),
G_find_key_value("dz", projinfo));
returnval = 2;
}

Expand Down
3 changes: 2 additions & 1 deletion lib/gis/proj3.c
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,8 @@ const char *G_database_datum_name(void)
else if (!proj_info)
return NULL;
else
datumstatus = G_get_datumparams_from_projinfo(proj_info, buf, params);
datumstatus = G_get_datumparams_from_projinfo(
proj_info, buf, sizeof(buf), params, sizeof(params));

if (datumstatus == 2)
return G_store(params);
Expand Down
Loading