struct mpd_directory * mpd_recv_directory(struct mpd_connection *connection) { struct mpd_pair *pair; struct mpd_directory *directory; pair = mpd_recv_pair_named(connection, "directory"); if (pair == NULL) return NULL; directory = mpd_directory_begin(pair); mpd_return_pair(connection, pair); if (directory == NULL) { mpd_error_entity(&connection->error); return NULL; } while ((pair = mpd_recv_pair(connection)) != NULL && mpd_directory_feed(directory, pair)) mpd_return_pair(connection, pair); if (mpd_error_is_defined(&connection->error)) { assert(pair == NULL); mpd_directory_free(directory); return NULL; } /* unread this pair for the next mpd_recv_directory() call */ mpd_enqueue_pair(connection, pair); return directory; }
static int lmpddirectory_gc(lua_State *L) { struct mpd_directory **dir; dir = luaL_checkudata(L, 1, MPD_DIRECTORY_T); if (*dir != NULL) mpd_directory_free(*dir); *dir = NULL; return 0; }
int cmd_lstab ( int argc, char ** argv, struct mpd_connection *conn ) { struct mpd_directory *dir; if (argc != 1) return 0; if (!mpd_send_list_all(conn, NULL)) printErrorAndExit(conn); while ((dir = mpd_recv_directory(conn)) != NULL) { if (strncmp(mpd_directory_get_path(dir), argv[0], strlen(argv[0])) == 0) printf("%s\n", charset_from_utf8(mpd_directory_get_path(dir))); mpd_directory_free(dir); } my_finishCommand(conn); return 0; }
void mpd_entity_free(struct mpd_entity *entity) { assert(entity != NULL); switch (entity->type) { case MPD_ENTITY_TYPE_UNKNOWN: /* nothing to free */ break; case MPD_ENTITY_TYPE_DIRECTORY: mpd_directory_free(entity->info.directory); break; case MPD_ENTITY_TYPE_SONG: mpd_song_free(entity->info.song); break; case MPD_ENTITY_TYPE_PLAYLIST: mpd_playlist_free(entity->info.playlistFile); break; } free(entity); }