From ccdbb547059a3fa77008a6bca1e5aee5c3d2b68f Mon Sep 17 00:00:00 2001 From: tomo Date: Wed, 6 Aug 2003 10:25:43 +0000 Subject: [PATCH] (chise_open_attribute_table): Encode '/' and '%' in argument `feature' for file name. --- chise.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/chise.c b/chise.c index 4681fe3..c24fd8e 100644 --- a/chise.c +++ b/chise.c @@ -229,16 +229,17 @@ chise_open_attribute_table (CHISE_Attribute_Table **db, { DB* dbase; int status; - int len; + int len, flen, i; int size; - char *db_file_name; + char *db_file_name, *sp; status = db_create (&dbase, NULL, 0); if (status) return -1; len = strlen (db_dir); - size = len + strlen (encoding) + strlen (feature) + 4; + flen = strlen (feature); + size = len + strlen (encoding) + flen * 3 + 4; db_file_name = alloca (size); strcpy (db_file_name, db_dir); if (db_file_name[len - 1] != '/') @@ -248,7 +249,21 @@ chise_open_attribute_table (CHISE_Attribute_Table **db, } strcat (db_file_name, encoding); strcat (db_file_name, "/"); - strcat (db_file_name, feature); + /* strcat (db_file_name, feature); */ + sp = &db_file_name[strlen (db_file_name)]; + for (i = 0; i < flen; i++) + { + int c = feature[i]; + + if ( (c == '/') || (c == '%') ) + { + sprintf (sp, "%%%02X", c); + sp += 3; + } + else + *sp++ = c; + } + *sp = '\0'; status = dbase->open (dbase, db_file_name, NULL, real_subtype, accessmask, modemask); if (status) -- 1.7.10.4