Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 25 May 2019 15:31:20 +0000 (UTC)
From:      Eugene Grosbein <eugen@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r502579 - in head/audio/xmms2-scrobbler: . files
Message-ID:  <201905251531.x4PFVKMu010403@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: eugen
Date: Sat May 25 15:31:19 2019
New Revision: 502579
URL: https://svnweb.freebsd.org/changeset/ports/502579

Log:
  audio/xmms2-scrobbler: re-apply fix correctly
  
  Wrong APIFIX_EXTRA_PATCHES_ON changed to right APIFIX_EXTRA_PATCHES
  Thanks to tobik for reporting this. Bump PORTREVISION.
  
  PR:		220992
  Submitted by:	Eugene Zheganin
  Reported by:	tobik

Added:
  head/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c
     - copied unchanged from r502577, head/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c
Modified:
  head/audio/xmms2-scrobbler/Makefile

Modified: head/audio/xmms2-scrobbler/Makefile
==============================================================================
--- head/audio/xmms2-scrobbler/Makefile	Sat May 25 15:12:07 2019	(r502578)
+++ head/audio/xmms2-scrobbler/Makefile	Sat May 25 15:31:19 2019	(r502579)
@@ -3,7 +3,7 @@
 
 PORTNAME=	xmms2-scrobbler
 PORTVERSION=	0.4.0
-PORTREVISION=	4
+PORTREVISION=	5
 CATEGORIES=	audio
 MASTER_SITES=	ftp://ftp.code-monkey.de/pub/${PORTNAME}/
 
@@ -24,7 +24,11 @@ PORTDOCS=	README
 
 SUB_FILES=	pkg-message
 
-OPTIONS_DEFINE=		DOCS
+OPTIONS_DEFINE=		APIFIX DOCS
+OPTIONS_DEFAULT=	APIFIX
+
+APIFIX_DESC=	Apply fix for Last.fm API 1.x
+APIFIX_EXTRA_PATCHES=	${FILESDIR}/extra-patch-xmms2-scrobbler.c
 
 post-install:
 	@${STRIP_CMD} ${STAGEDIR}${PREFIX}/bin/xmms2-scrobbler

Copied: head/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c (from r502577, head/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c	Sat May 25 15:31:19 2019	(r502579, copy of r502577, head/audio/xmms2-scrobbler/files/extra-patch-xmms2-scrobbler.c)
@@ -0,0 +1,196 @@
+--- 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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201905251531.x4PFVKMu010403>