diff options
Diffstat (limited to 'audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c')
-rw-r--r-- | audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c | 196 |
1 files changed, 0 insertions, 196 deletions
diff --git a/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c b/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c deleted file mode 100644 index 84380c0cf4d3..000000000000 --- a/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c +++ /dev/null @@ -1,196 +0,0 @@ ---- src/xmms2-scrobbler.c.orig 2009-12-30 17:04:01 UTC -+++ src/xmms2-scrobbler.c -@@ -140,93 +140,126 @@ signal_handler (int sig) - keep_running = false; - } - --static size_t --handle_handshake_reponse (void *rawptr, size_t size, size_t nmemb, -- void *data) --{ -- Server *server = data; -- size_t total = size * nmemb, left = total; -- char *ptr = rawptr, *newline; -- int len; -+char * get_line_from_response (char *answer, int lfpos) { -+ int lfpositions[10]; -+ int i, k, lfcounter, start, end, resultlen; - -- newline = memchr (ptr, '\n', left); -- if (!newline) { -- fprintf (stderr, "no newline (1)\n"); -- return total; -- } -+ char *result; - -- *newline = 0; -+#ifdef DEBUG -+ fprintf (stderr, "DEBUG: got string: %s\n", answer); -+#endif - -- if (strcmp (ptr, "OK")) { -- fprintf (stderr, "handshake failed\n"); -- return total; -+ /* marking the string */ -+ i = 0; -+ lfcounter = 0; -+ while (answer[i] != '\0') { -+ if (answer[i] == '\n' && lfcounter < 10) { -+ lfpositions[lfcounter] = i; -+ lfcounter++; -+#ifdef DEBUG -+ fprintf (stderr, "DEBUG: got LF location: %d\n", i); -+#endif - } -+ i++; -+ } -+ /* getting the actual line */ -+ /* getting the size of it */ - -- len = newline - ptr + 1; -+ start = lfpos - 1; -+ end = lfpos; -+#ifdef DEBUG -+ if (start >= 0) { -+ fprintf (stderr, "DEBUG: requested line starts at char no. %d and ends at %d.\n", lfpositions[start], lfpositions[end]); -+ } else { -+ fprintf (stderr, "DEBUG: requested line starts at the start of string and ends at char no. %d.\n", lfpositions[end]); -+ } -+#endif - -- left -= len; -- ptr += len; -+ if (start >= 0) { -+ resultlen = lfpositions[end] - lfpositions[start] + 1; -+ } else { -+ resultlen = lfpositions[end] + 1; -+ } -+#ifdef DEBUG -+ fprintf (stderr, "DEBUG: requested line will need %d bytes.\n", resultlen); -+#endif -+ result = malloc(resultlen); -+ bzero(result, resultlen); - -- newline = memchr (ptr, '\n', left); -- if (!newline) { -- fprintf (stderr, "no newline (1)\n"); -- return total; -+ /* bytecopying the line */ -+#ifdef DEBUG -+ if (start >= 0) { -+ fprintf (stderr, "DEBUG: copying the string from char no. %d to %d.\n", lfpositions[start], lfpositions[end]); -+ } else { -+ fprintf (stderr, "DEBUG: copying the string from the beginning to char no. %d.\n", lfpositions[end]); -+ } -+#endif -+ k = 0; -+ if (start >= 0) { -+ i = lfpositions[start]; -+ } else { -+ i = 0; -+ } -+ while (i < lfpositions[end]) { -+ /* don't copy LF themselves */ -+ if (answer[i] != '\n') { -+ result[k] = answer[i]; -+ k++; - } -+ i++; -+ } - -- *newline = 0; -- -- len = newline - ptr + 1; -+#ifdef DEBUG -+ fprintf (stderr, "DEBUG: returning string: %s\n", result); -+#endif -+ return(result); -+} - -- if (len > 255) { -- fprintf (stderr, "session ID is too long (%i characters)\n", len); -- return total; -- } -+static size_t -+handle_handshake_reponse (void *rawptr, size_t size, size_t nmemb, -+ void *data) -+{ -+ Server *server; -+ size_t total, left; -+ char *ptr, *status, *sessionid, *np_url, *subm_url; - -- strcpy (server->session_id, ptr); -+ server = data; -+ ptr = rawptr; -+ total = size * nmemb; -+ left = total; - -- left -= len; -- ptr += len; -+#ifdef DEBUG -+ fprintf (stderr, "DEBUG: got string \"%s\".\n", rawptr); -+#endif - -- /* now playing URL */ -- newline = memchr (ptr, '\n', left); -- if (!newline) { -- fprintf (stderr, "no newline (2)\n"); -- return total; -+ status = get_line_from_response(rawptr, 0); -+ -+ if (strcmp(status, "OK") != 0) { -+ fprintf (stderr, "WARNING: handshake failed: %s.\n", status); -+ return(total); - } - -- *newline = 0; -- -- len = newline - ptr + 1; -- -- if (len > 255) { -- fprintf (stderr, "now_playing URL is too long " -- "(%i characters)\n", len); -- return total; -+ sessionid = get_line_from_response(rawptr, 3); -+ if (strlen(sessionid) > 255) { -+ fprintf (stderr, "ERROR: session ID is too long (%ld characters).\n", strlen(sessionid)); -+ return(total); - } -+ strcpy (server->session_id, sessionid); - -- strcpy (server->np_url, ptr); -- -- left -= len; -- ptr += len; -- -- /* submission URL */ -- newline = memchr (ptr, '\n', left); -- if (!newline) { -- printf("no newline (3)\n"); -- return total; -+ np_url = get_line_from_response(rawptr, 6); -+ if (strlen(np_url) > 255) { -+ fprintf (stderr, "ERROR: nowplaying URL is too long (%ld characters).\n", strlen(np_url)); -+ return(total); - } -+ strcpy (server->np_url, np_url); - -- *newline = 0; -- -- len = newline - ptr + 1; -- -- if (len > 255) { -- fprintf (stderr, "submission URL is too long " -- "(%i characters)\n", len); -- return total; -+ subm_url = get_line_from_response(rawptr, 9); -+ if (strlen(sessionid) > 255) { -+ fprintf (stderr, "ERROR: submission URL is too long (%ld characters).\n", strlen(subm_url)); -+ return(total); - } -- -- strcpy (server->subm_url, ptr); -+ strcpy (server->subm_url, subm_url); - - fprintf (stderr, "got:\n'%s' '%s' '%s'\n", - server->session_id, server->np_url, server->subm_url); |