This caused a segfault when com_init() was invoked twice because
osl was trying to close an already closed table.
Also, add a bunch of error descriptions.
{
char *buf = obj->data;
if (obj->size < AFSI_SIZE)
{
char *buf = obj->data;
if (obj->size < AFSI_SIZE)
afsi->last_played = read_u64(buf + AFSI_LAST_PLAYED_OFFSET);
afsi->attributes = read_u64(buf + AFSI_ATTRIBUTES_OFFSET);
afsi->num_played = read_u32(buf + AFSI_NUM_PLAYED_OFFSET);
afsi->last_played = read_u64(buf + AFSI_LAST_PLAYED_OFFSET);
afsi->attributes = read_u64(buf + AFSI_ATTRIBUTES_OFFSET);
afsi->num_played = read_u32(buf + AFSI_NUM_PLAYED_OFFSET);
void aft_shutdown(enum osl_close_flags flags)
{
osl_close_table(audio_file_table, flags);
void aft_shutdown(enum osl_close_flags flags)
{
osl_close_table(audio_file_table, flags);
+ audio_file_table = NULL;
void attribute_shutdown(enum osl_close_flags flags)
{
osl_close_table(attribute_table, flags);
void attribute_shutdown(enum osl_close_flags flags)
{
osl_close_table(attribute_table, flags);
+ attribute_table = NULL;
}
int attribute_init(struct table_info *ti, const char *db)
}
int attribute_init(struct table_info *ti, const char *db)
PARA_ERROR(NO_COMPARE_FUNC, "fixme"), \
PARA_ERROR(NULL_OBJECT, "fixme"), \
PARA_ERROR(BAD_DATA_SIZE, "fixme"), \
PARA_ERROR(NO_COMPARE_FUNC, "fixme"), \
PARA_ERROR(NULL_OBJECT, "fixme"), \
PARA_ERROR(BAD_DATA_SIZE, "fixme"), \
- PARA_ERROR(NOT_MAPPED, "fixme"), \
- PARA_ERROR(ALREADY_MAPPED, "fixme"), \
+ PARA_ERROR(NOT_MAPPED, "file not mapped"), \
+ PARA_ERROR(ALREADY_MAPPED, "file already mapped"), \
PARA_ERROR(BAD_SIZE, "fixme"), \
PARA_ERROR(TRUNC, "fixme"), \
PARA_ERROR(UNLINK, "fixme"), \
PARA_ERROR(BAD_SIZE, "fixme"), \
PARA_ERROR(TRUNC, "fixme"), \
PARA_ERROR(UNLINK, "fixme"), \
- PARA_ERROR(EXIST, "fixme"), \
- PARA_ERROR(ISDIR, "fixme"), \
- PARA_ERROR(NOTDIR, "fixme"), \
+ PARA_ERROR(EXIST, "file or directory already exists"), \
+ PARA_ERROR(ISDIR, "error: is a directory"), \
+ PARA_ERROR(NOTDIR, "error: not a directory"), \
PARA_ERROR(NOENT, "fixme"), \
PARA_ERROR(OSL_PERM, "fixme"), \
PARA_ERROR(BAD_TABLE, "table not open"), \
PARA_ERROR(BAD_TABLE_HEADER, "table header corruption"), \
PARA_ERROR(NOENT, "fixme"), \
PARA_ERROR(OSL_PERM, "fixme"), \
PARA_ERROR(BAD_TABLE, "table not open"), \
PARA_ERROR(BAD_TABLE_HEADER, "table header corruption"), \
- PARA_ERROR(BAD_TABLE_DESC, "fixme"), \
+ PARA_ERROR(BAD_TABLE_DESC, "invalid table description"), \
PARA_ERROR(RB_KEY_EXISTS, "key already exists in rbtree"), \
PARA_ERROR(RB_KEY_NOT_FOUND, "key not found in rbtree"), \
PARA_ERROR(BAD_ID, "fixme"), \
PARA_ERROR(RB_KEY_EXISTS, "key already exists in rbtree"), \
PARA_ERROR(RB_KEY_NOT_FOUND, "key not found in rbtree"), \
PARA_ERROR(BAD_ID, "fixme"), \
- PARA_ERROR(AFS_SYNTAX, "fixme"), \
- PARA_ERROR(FORK, "fixme"), \
- PARA_ERROR(BAD_TABLE_NAME, "fixme"), \
- PARA_ERROR(INPUT_TOO_LARGE, "fixme"), \
+ PARA_ERROR(AFS_SYNTAX, "afs syntax error"), \
+ PARA_ERROR(FORK, "fork error"), \
+ PARA_ERROR(BAD_TABLE_NAME, "invalid table"), \
+ PARA_ERROR(INPUT_TOO_LARGE, "input too large for stdin command"), \
- PARA_ERROR(BAD_AFS, "fixme"), \
+ PARA_ERROR(BAD_AFSI, "invaid afs info"), \
PARA_ERROR(LOCALTIME, "fixme"), \
PARA_ERROR(STRFTIME, "fixme"), \
PARA_ERROR(BAD_PATH, "invalid path"), \
PARA_ERROR(BAD_SORT, "fixme"), \
PARA_ERROR(FNMATCH, "fixme"), \
PARA_ERROR(NO_MATCH, "no matches"), \
PARA_ERROR(LOCALTIME, "fixme"), \
PARA_ERROR(STRFTIME, "fixme"), \
PARA_ERROR(BAD_PATH, "invalid path"), \
PARA_ERROR(BAD_SORT, "fixme"), \
PARA_ERROR(FNMATCH, "fixme"), \
PARA_ERROR(NO_MATCH, "no matches"), \
- PARA_ERROR(NO_AFHI, "fixme"), \
- PARA_ERROR(AFT_SYNTAX, "syntax error"), \
- PARA_ERROR(HASH_MISMATCH, "fixme"), \
+ PARA_ERROR(NO_AFHI, "audio format handler info required"), \
+ PARA_ERROR(AFT_SYNTAX, "audio file table syntax error"), \
+ PARA_ERROR(HASH_MISMATCH, "hash mismatch, consider re-add"), \
#define USER_LIST_ERRORS \
#define USER_LIST_ERRORS \
void score_shutdown(enum osl_close_flags flags)
{
osl_close_table(score_table, flags | OSL_FREE_VOLATILE);
void score_shutdown(enum osl_close_flags flags)
{
osl_close_table(score_table, flags | OSL_FREE_VOLATILE);