Browse Source

fix dbf column name length handling

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@46719 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 14 years ago
parent
commit
f2f6871d87
2 changed files with 11 additions and 1 deletions
  1. 10 0
      db/drivers/dbf/column.c
  2. 1 1
      db/drivers/dbf/globals.h

+ 10 - 0
db/drivers/dbf/column.c

@@ -32,6 +32,16 @@ int add_column(int tab, int type, char *name, int width, int decimals)
 	    "add_column(): tab = %d, type = %d, name = %s, width = %d, decimals = %d",
 	    tab, type, name, width, decimals);
 
+    /* truncate column name */
+    if (strlen(name) > DBF_COL_NAME - 1) {
+	char buf[2000];
+
+	sprintf(buf, "DBMI-DBF driver: column name '%s'", name);
+	name[DBF_COL_NAME - 1] = '\0';
+	sprintf(buf + strlen(buf), " truncated to '%s'", name);
+	G_warning(buf);
+    }
+
     /* Check if the column exists */
     for (c = 0; c < db.tables[tab].ncols; c++) {
 	if (G_strcasecmp(db.tables[tab].cols[c].name, name) == 0) {

+ 1 - 1
db/drivers/dbf/globals.h

@@ -1,6 +1,6 @@
 #include <grass/sqlp.h>
 
-#define DBF_COL_NAME 20		/* maximum column name (in fact shouldn't be > 10) */
+#define DBF_COL_NAME 11		/* maximum column name (10 characters plus \0) */
 
 /* 
  * DBF API:      http://shapelib.maptools.org/dbf_api.html