Disc * MusicBrainz::readDisc(const std::string &deviceName) { #ifdef DISCID_FOUND DiscId *discid = discid_new(); if (!discid) { throw DiscError("Couldn't create a new DiscId instance."); } if (!discid_read(discid, deviceName.empty() ? NULL : deviceName.c_str())) { string msg(discid_get_error_msg(discid)); discid_free(discid); throw DiscError(msg); } Disc *disc = new Disc; disc->setId(discid_get_id(discid)); disc->setSectors(discid_get_sectors(discid)); disc->setFirstTrackNum(discid_get_first_track_num(discid)); disc->setLastTrackNum(discid_get_last_track_num(discid)); for (int i = disc->getFirstTrackNum(); i <= disc->getLastTrackNum(); i++) { disc->addTrack(Disc::Track(discid_get_track_offset(discid, i), discid_get_track_length(discid, i))); } discid_free(discid); return disc; #else throw DiscError("libdiscid is not available."); #endif }