#include "chise-name.h"
const unsigned char chise_db_dir[] = CHISE_DB_DIR;
+const unsigned char chise_system_db_dir[] = CHISE_SI_DB_DIR;
CHISE_Feature_Table*
chise_ds_open_feature_table (CHISE_DS *ds, const char *feature);
CHISE_Attribute_Table*
CHISE_Attribute_Table_open (const unsigned char *db_dir,
- const char *encoding, const char *feature,
+ const char *category,
+ const char *key_type, const char *name,
DBTYPE real_subtype,
u_int32_t accessmask, int modemask);
CHISE_DS*
CHISE_DS_open (CHISE_DS_Type type, const unsigned char *location,
- DBTYPE subtype, int modemask)
+ int subtype, int modemask)
{
CHISE_DS *ds = (CHISE_DS*)malloc (sizeof (CHISE_DS));
size_t len = strlen (location);
return NULL;
ds->type = type;
- ds->subtype = subtype;
+ ds->subtype = ( (subtype != 0) ? subtype : DB_HASH );
ds->modemask = modemask;
ds->location = (unsigned char*)malloc (len + 1);
if (ds->location == NULL)
unsigned char *name))
{
unsigned char *dname
- = alloca (strlen (ds->location) + sizeof ("/system-char-id") + 1);
+ = alloca (strlen (ds->location) + sizeof ("/character/feature") + 1);
DIR *dir;
struct dirent *de;
strcpy (dname, ds->location);
- strcat (dname, "/system-char-id");
+ strcat (dname, "/character/feature");
if ( (dir = opendir (dname)) == NULL)
return -1;
CHISE_DS *ds = feature->ds;
feature->db
- = CHISE_Attribute_Table_open (ds->location,
- "system-char-id", feature->name,
+ = CHISE_Attribute_Table_open (ds->location, "character",
+ "feature", feature->name,
ds->subtype, access, ds->modemask);
if (feature->db == NULL)
return -1;
CHISE_DS *ds = ccs->ds;
ccs->db
- = CHISE_Attribute_Table_open (ds->location,
- ccs->name, "system-char-id",
+ = CHISE_Attribute_Table_open (ds->location, "character",
+ "by_feature", ccs->name,
ds->subtype, access, ds->modemask);
if (ccs->db == NULL)
return -1;
CHISE_Attribute_Table*
CHISE_Attribute_Table_open (const unsigned char *db_dir,
- const char *encoding, const char *feature,
+ const char *category,
+ const char *key_type, const char *name,
DBTYPE real_subtype,
u_int32_t accessmask, int modemask)
{
DB* dbase;
int status;
- int len, flen, i;
+ int len, name_len, i;
int size;
char *db_file_name, *sp;
struct stat statbuf;
mkdir (db_dir, modemask);
len = strlen (db_dir);
- flen = strlen (feature);
- size = len + strlen (encoding) + flen * 3 + 4;
+ name_len = strlen (name);
+ size = len + strlen (category) + strlen (key_type) + name_len * 3 + 5;
db_file_name = alloca (size);
strcpy (db_file_name, db_dir);
if (db_file_name[len - 1] != '/')
db_file_name[len++] = '/';
db_file_name[len] = '\0';
}
- strcat (db_file_name, encoding);
+ strcat (db_file_name, category);
if ( (accessmask & DB_CREATE) && stat (db_file_name, &statbuf) )
mkdir (db_file_name, modemask);
+ strcat (db_file_name, "/");
+ strcat (db_file_name, key_type);
+ if ( (accessmask & DB_CREATE) && stat (db_file_name, &statbuf) )
+ mkdir (db_file_name, modemask);
strcat (db_file_name, "/");
- /* strcat (db_file_name, feature); */
+
+ /* strcat (db_file_name, name); */
sp = &db_file_name[strlen (db_file_name)];
- for (i = 0; i < flen; i++)
+ for (i = 0; i < name_len; i++)
{
- int c = feature[i];
+ int c = name[i];
if ( (c == '/') || (c == '%') )
{