aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2014-01-07 10:21:42 +0100
committerMax Kellermann <max@duempel.org>2014-01-07 10:21:42 +0100
commit0f99410ba1334670554b9eeda122cdbe1e0478d7 (patch)
tree7828de92231402c21a396c587b9c033948ba60c3
parent442dadd6fe5c4bab90848b233a560c02f8f63a09 (diff)
downloadmpd-0f99410ba1334670554b9eeda122cdbe1e0478d7.tar.gz
mpd-0f99410ba1334670554b9eeda122cdbe1e0478d7.tar.xz
mpd-0f99410ba1334670554b9eeda122cdbe1e0478d7.zip
playlist/soundcloud: parse URI without copying it
-rw-r--r--src/playlist/SoundCloudPlaylistPlugin.cxx30
1 files changed, 11 insertions, 19 deletions
diff --git a/src/playlist/SoundCloudPlaylistPlugin.cxx b/src/playlist/SoundCloudPlaylistPlugin.cxx
index 716e2d6fb..fa2712dad 100644
--- a/src/playlist/SoundCloudPlaylistPlugin.cxx
+++ b/src/playlist/SoundCloudPlaylistPlugin.cxx
@@ -323,43 +323,35 @@ static SongEnumerator *
soundcloud_open_uri(const char *uri, Mutex &mutex, Cond &cond)
{
assert(memcmp(uri, "soundcloud://", 13) == 0);
-
- char *const s = g_strdup(uri + 13);
- char *p = s;
- char *arg = p;
- for (; *p; p++) {
- if (*p == '/') {
- *p = 0;
- p++;
- break;
- }
- }
-
- char *rest = p;
+ uri += 13;
char *u = nullptr;
- if (strcmp(arg, "track") == 0) {
+ if (memcmp(uri, "track/", 6) == 0) {
+ const char *rest = uri + 6;
u = g_strconcat("https://api.soundcloud.com/tracks/",
rest, ".json?client_id=",
soundcloud_config.apikey.c_str(), nullptr);
- } else if (strcmp(arg, "playlist") == 0) {
+ } else if (memcmp(uri, "playlist/", 9) == 0) {
+ const char *rest = uri + 9;
u = g_strconcat("https://api.soundcloud.com/playlists/",
rest, ".json?client_id=",
soundcloud_config.apikey.c_str(), nullptr);
- } else if (strcmp(arg, "user") == 0) {
+ } else if (memcmp(uri, "user/", 5) == 0) {
+ const char *rest = uri + 5;
u = g_strconcat("https://api.soundcloud.com/users/",
rest, "/tracks.json?client_id=",
soundcloud_config.apikey.c_str(), nullptr);
- } else if (strcmp(arg, "search") == 0) {
+ } else if (memcmp(uri, "search/", 7) == 0) {
+ const char *rest = uri + 7;
u = g_strconcat("https://api.soundcloud.com/tracks.json?q=",
rest, "&client_id=",
soundcloud_config.apikey.c_str(), nullptr);
- } else if (strcmp(arg, "url") == 0) {
+ } else if (memcmp(uri, "url/", 4) == 0) {
+ const char *rest = uri + 4;
/* Translate to soundcloud resolver call. libcurl will automatically
follow the redirect to the right resource. */
u = soundcloud_resolve(rest);
}
- g_free(s);
if (u == nullptr) {
LogWarning(soundcloud_domain, "unknown soundcloud URI");