allocate strings in a pool (taken from ncmpc)

This commit is contained in:
unK
2008-09-16 14:43:04 +02:00
parent 77a01b6574
commit ded070c61b
5 changed files with 214 additions and 47 deletions

View File

@@ -295,15 +295,15 @@ static mpd_ReturnElement * mpd_newReturnElement(const char * name, const char *
{
mpd_ReturnElement * ret = malloc(sizeof(mpd_ReturnElement));
ret->name = strdup(name);
ret->value = strdup(value);
ret->name = str_pool_get(name);
ret->value = str_pool_get(value);
return ret;
}
static void mpd_freeReturnElement(mpd_ReturnElement * re) {
free(re->name);
free(re->value);
str_pool_put(re->name);
str_pool_put(re->value);
free(re);
}
@@ -940,18 +940,18 @@ static void mpd_initSong(mpd_Song * song) {
}
static void mpd_finishSong(mpd_Song * song) {
if(song->file) free(song->file);
if(song->artist) free(song->artist);
if(song->album) free(song->album);
if(song->title) free(song->title);
if(song->track) free(song->track);
if(song->name) free(song->name);
if(song->date) free(song->date);
if(song->genre) free(song->genre);
if(song->composer) free(song->composer);
if(song->performer) free(song->performer);
if(song->disc) free(song->disc);
if(song->comment) free(song->comment);
if(song->file) str_pool_put(song->file);
if(song->artist) str_pool_put(song->artist);
if(song->album) str_pool_put(song->album);
if(song->title) str_pool_put(song->title);
if(song->track) str_pool_put(song->track);
if(song->name) str_pool_put(song->name);
if(song->date) str_pool_put(song->date);
if(song->genre) str_pool_put(song->genre);
if(song->composer) str_pool_put(song->composer);
if(song->performer) str_pool_put(song->performer);
if(song->disc) str_pool_put(song->disc);
if(song->comment) str_pool_put(song->comment);
}
mpd_Song * mpd_newSong(void) {
@@ -970,18 +970,18 @@ void mpd_freeSong(mpd_Song * song) {
mpd_Song * mpd_songDup(mpd_Song * song) {
mpd_Song * ret = mpd_newSong();
if(song->file) ret->file = strdup(song->file);
if(song->artist) ret->artist = strdup(song->artist);
if(song->album) ret->album = strdup(song->album);
if(song->title) ret->title = strdup(song->title);
if(song->track) ret->track = strdup(song->track);
if(song->name) ret->name = strdup(song->name);
if(song->date) ret->date = strdup(song->date);
if(song->genre) ret->genre= strdup(song->genre);
if(song->composer) ret->composer= strdup(song->composer);
if(song->performer) ret->performer = strdup(song->performer);
if(song->disc) ret->disc = strdup(song->disc);
if(song->comment) ret->comment = strdup(song->comment);
if(song->file) ret->file = str_pool_dup(song->file);
if(song->artist) ret->artist = str_pool_dup(song->artist);
if(song->album) ret->album = str_pool_dup(song->album);
if(song->title) ret->title = str_pool_dup(song->title);
if(song->track) ret->track = str_pool_dup(song->track);
if(song->name) ret->name = str_pool_dup(song->name);
if(song->date) ret->date = str_pool_dup(song->date);
if(song->genre) ret->genre= str_pool_dup(song->genre);
if(song->composer) ret->composer= str_pool_dup(song->composer);
if(song->performer) ret->performer = str_pool_dup(song->performer);
if(song->disc) ret->disc = str_pool_dup(song->disc);
if(song->comment) ret->comment = str_pool_dup(song->comment);
ret->time = song->time;
ret->pos = song->pos;
ret->id = song->id;
@@ -994,7 +994,8 @@ static void mpd_initDirectory(mpd_Directory * directory) {
}
static void mpd_finishDirectory(mpd_Directory * directory) {
if(directory->path) free(directory->path);
if(directory->path)
str_pool_put(directory->path);
}
mpd_Directory * mpd_newDirectory(void) {
@@ -1014,7 +1015,8 @@ void mpd_freeDirectory(mpd_Directory * directory) {
mpd_Directory * mpd_directoryDup(mpd_Directory * directory) {
mpd_Directory * ret = mpd_newDirectory();
if(directory->path) ret->path = strdup(directory->path);
if(directory->path)
ret->path = str_pool_dup(directory->path);
return ret;
}
@@ -1024,7 +1026,8 @@ static void mpd_initPlaylistFile(mpd_PlaylistFile * playlist) {
}
static void mpd_finishPlaylistFile(mpd_PlaylistFile * playlist) {
if(playlist->path) free(playlist->path);
if(playlist->path)
str_pool_put(playlist->path);
}
mpd_PlaylistFile * mpd_newPlaylistFile(void) {
@@ -1043,7 +1046,8 @@ void mpd_freePlaylistFile(mpd_PlaylistFile * playlist) {
mpd_PlaylistFile * mpd_playlistFileDup(mpd_PlaylistFile * playlist) {
mpd_PlaylistFile * ret = mpd_newPlaylistFile();
if(playlist->path) ret->path = strdup(playlist->path);
if(playlist->path)
ret->path = str_pool_dup(playlist->path);
return ret;
}
@@ -1100,7 +1104,7 @@ mpd_InfoEntity * mpd_getNextInfoEntity(mpd_Connection * connection) {
entity->type = MPD_INFO_ENTITY_TYPE_SONG;
entity->info.song = mpd_newSong();
entity->info.song->file =
strdup(connection->returnElement->value);
str_pool_dup(connection->returnElement->value);
}
else if(strcmp(connection->returnElement->name,
"directory")==0) {
@@ -1108,14 +1112,14 @@ mpd_InfoEntity * mpd_getNextInfoEntity(mpd_Connection * connection) {
entity->type = MPD_INFO_ENTITY_TYPE_DIRECTORY;
entity->info.directory = mpd_newDirectory();
entity->info.directory->path =
strdup(connection->returnElement->value);
str_pool_dup(connection->returnElement->value);
}
else if(strcmp(connection->returnElement->name,"playlist")==0) {
entity = mpd_newInfoEntity();
entity->type = MPD_INFO_ENTITY_TYPE_PLAYLISTFILE;
entity->info.playlistFile = mpd_newPlaylistFile();
entity->info.playlistFile->path =
strdup(connection->returnElement->value);
str_pool_dup(connection->returnElement->value);
}
else if(strcmp(connection->returnElement->name, "cpos") == 0){
entity = mpd_newInfoEntity();
@@ -1144,23 +1148,23 @@ mpd_InfoEntity * mpd_getNextInfoEntity(mpd_Connection * connection) {
strlen(re->value)) {
if(!entity->info.song->artist &&
strcmp(re->name,"Artist")==0) {
entity->info.song->artist = strdup(re->value);
entity->info.song->artist = str_pool_dup(re->value);
}
else if(!entity->info.song->album &&
strcmp(re->name,"Album")==0) {
entity->info.song->album = strdup(re->value);
entity->info.song->album = str_pool_dup(re->value);
}
else if(!entity->info.song->title &&
strcmp(re->name,"Title")==0) {
entity->info.song->title = strdup(re->value);
entity->info.song->title = str_pool_dup(re->value);
}
else if(!entity->info.song->track &&
strcmp(re->name,"Track")==0) {
entity->info.song->track = strdup(re->value);
entity->info.song->track = str_pool_dup(re->value);
}
else if(!entity->info.song->name &&
strcmp(re->name,"Name")==0) {
entity->info.song->name = strdup(re->value);
entity->info.song->name = str_pool_dup(re->value);
}
else if(entity->info.song->time==MPD_SONG_NO_TIME &&
strcmp(re->name,"Time")==0) {
@@ -1176,27 +1180,27 @@ mpd_InfoEntity * mpd_getNextInfoEntity(mpd_Connection * connection) {
}
else if(!entity->info.song->date &&
strcmp(re->name, "Date") == 0) {
entity->info.song->date = strdup(re->value);
entity->info.song->date = str_pool_dup(re->value);
}
else if(!entity->info.song->genre &&
strcmp(re->name, "Genre") == 0) {
entity->info.song->genre = strdup(re->value);
entity->info.song->genre = str_pool_dup(re->value);
}
else if(!entity->info.song->composer &&
strcmp(re->name, "Composer") == 0) {
entity->info.song->composer = strdup(re->value);
entity->info.song->composer = str_pool_dup(re->value);
}
else if(!entity->info.song->performer &&
strcmp(re->name, "Performer") == 0) {
entity->info.song->performer = strdup(re->value);
entity->info.song->performer = str_pool_dup(re->value);
}
else if(!entity->info.song->disc &&
strcmp(re->name, "Disc") == 0) {
entity->info.song->disc = strdup(re->value);
entity->info.song->disc = str_pool_dup(re->value);
}
else if(!entity->info.song->comment &&
strcmp(re->name, "Comment") == 0) {
entity->info.song->comment = strdup(re->value);
entity->info.song->comment = str_pool_dup(re->value);
}
}
else if(entity->type == MPD_INFO_ENTITY_TYPE_DIRECTORY) {