diff -Naurp --exclude CVS --exclude ChangeLog --exclude direct_api.c --exclude semanage_store.c --exclude VERSION --exclude libsemanage.map --exclude 'module_record*' --exclude 'database_directory*' --exclude Makefile old/libsemanage/src/database_file.c new/libsemanage/src/database_file.c --- old/libsemanage/src/database_file.c 2005-10-25 09:06:53.000000000 -0400 +++ new/libsemanage/src/database_file.c 2005-10-26 19:28:35.000000000 -0400 @@ -388,14 +388,26 @@ static int dbase_file_set( record_key_t* key, record_t* data) { + cache_entry_t* entry; + int status; + if (enter_rw(handle, dbase) < 0) goto err; - /* Stub */ - key = NULL; - data = NULL; + status = dbase_file_cache_locate(handle, dbase, key, &entry); + if (status < 0) + goto err; + if (status == STATUS_NODATA) { + /* FIXME: handle error */ + goto err; + } + else { + dbase->rtable->free(entry->data); + entry->data = data; + } + dbase->modified = 1; - return STATUS_ERR; + return STATUS_SUCCESS; err: /* FIXME: handle error */ @@ -422,8 +434,10 @@ static int dbase_file_modify( if (dbase_file_cache_add(dbase, data) < 0) goto err; } - else + else { + dbase->rtable->free(entry->data); entry->data = data; + } dbase->modified = 1; return STATUS_SUCCESS;