+++ /dev/null
-Fix runtime issues with libevent-2.1.5
-
-Bug: https://bugs.gentoo.org/536922
-Index: libtransmission/peer-io.c
-===================================================================
---- libtransmission/peer-io.c (revision 14541)
-+++ libtransmission/peer-io.c (revision 14545)
-@@ -1041,6 +1041,33 @@
- ***
- **/
-
-+static inline void
-+processBuffer (tr_crypto * crypto,
-+ struct evbuffer * buffer,
-+ size_t offset,
-+ size_t size,
-+ void (* callback) (tr_crypto *, size_t, const void *, void *))
-+{
-+ struct evbuffer_ptr pos;
-+ struct evbuffer_iovec iovec;
-+
-+ evbuffer_ptr_set (buffer, &pos, offset, EVBUFFER_PTR_SET);
-+
-+ do
-+ {
-+ if (evbuffer_peek (buffer, size, &pos, &iovec, 1) <= 0)
-+ break;
-+
-+ callback (crypto, iovec.iov_len, iovec.iov_base, iovec.iov_base);
-+
-+ assert (size >= iovec.iov_len);
-+ size -= iovec.iov_len;
-+ }
-+ while (!evbuffer_ptr_set (buffer, &pos, iovec.iov_len, EVBUFFER_PTR_ADD));
-+
-+ assert (size == 0);
-+}
-+
- static void
- addDatatype (tr_peerIo * io, size_t byteCount, bool isPieceData)
- {
-@@ -1051,19 +1078,14 @@
- peer_io_push_datatype (io, d);
- }
-
--static void
--maybeEncryptBuffer (tr_peerIo * io, struct evbuffer * buf)
-+static inline void
-+maybeEncryptBuffer (tr_peerIo * io,
-+ struct evbuffer * buf,
-+ size_t offset,
-+ size_t size)
- {
- if (io->encryption_type == PEER_ENCRYPTION_RC4)
-- {
-- struct evbuffer_ptr pos;
-- struct evbuffer_iovec iovec;
-- evbuffer_ptr_set (buf, &pos, 0, EVBUFFER_PTR_SET);
-- do {
-- evbuffer_peek (buf, -1, &pos, &iovec, 1);
-- tr_cryptoEncrypt (&io->crypto, iovec.iov_len, iovec.iov_base, iovec.iov_base);
-- } while (!evbuffer_ptr_set (buf, &pos, iovec.iov_len, EVBUFFER_PTR_ADD));
-- }
-+ processBuffer (&io->crypto, buf, offset, size, &tr_cryptoEncrypt);
- }
-
- void
-@@ -1070,7 +1092,7 @@
- tr_peerIoWriteBuf (tr_peerIo * io, struct evbuffer * buf, bool isPieceData)
- {
- const size_t byteCount = evbuffer_get_length (buf);
-- maybeEncryptBuffer (io, buf);
-+ maybeEncryptBuffer (io, buf, 0, byteCount);
- evbuffer_add_buffer (io->outbuf, buf);
- addDatatype (io, byteCount, isPieceData);
- }
-@@ -1126,6 +1148,16 @@
- ****
- ***/
-
-+static inline void
-+maybeDecryptBuffer (tr_peerIo * io,
-+ struct evbuffer * buf,
-+ size_t offset,
-+ size_t size)
-+{
-+ if (io->encryption_type == PEER_ENCRYPTION_RC4)
-+ processBuffer (&io->crypto, buf, offset, size, &tr_cryptoDecrypt);
-+}
-+
- void
- tr_peerIoReadBytesToBuf (tr_peerIo * io, struct evbuffer * inbuf, struct evbuffer * outbuf, size_t byteCount)
- {
-@@ -1141,17 +1173,7 @@
- evbuffer_add_buffer (outbuf, tmp);
- evbuffer_free (tmp);
-
-- /* decrypt if needed */
-- if (io->encryption_type == PEER_ENCRYPTION_RC4) {
-- struct evbuffer_ptr pos;
-- struct evbuffer_iovec iovec;
-- evbuffer_ptr_set (outbuf, &pos, old_length, EVBUFFER_PTR_SET);
-- do {
-- evbuffer_peek (outbuf, byteCount, &pos, &iovec, 1);
-- tr_cryptoDecrypt (&io->crypto, iovec.iov_len, iovec.iov_base, iovec.iov_base);
-- byteCount -= iovec.iov_len;
-- } while (!evbuffer_ptr_set (outbuf, &pos, iovec.iov_len, EVBUFFER_PTR_ADD));
-- }
-+ maybeDecryptBuffer (io, outbuf, old_length, byteCount);
- }
-
- void
+++ /dev/null
-https://bugs.gentoo.org/562020
-
-Index: libtransmission/upnp.c
-===================================================================
---- libtransmission/upnp.c (revision 14564)
-+++ libtransmission/upnp.c (revision 14565)
-@@ -88,7 +88,11 @@
-
- #if (MINIUPNPC_API_VERSION >= 8) /* adds ipv6 and error args */
- int err = UPNPDISCOVER_SUCCESS;
-+ #if (MINIUPNPC_API_VERSION >= 14) /* adds ttl */
-+ ret = upnpDiscover (msec, NULL, NULL, 0, 0, 2, &err);
-+ #else
- ret = upnpDiscover (msec, NULL, NULL, 0, 0, &err);
-+ #endif
- have_err = err != UPNPDISCOVER_SUCCESS;
- #else
- ret = upnpDiscover (msec, NULL, NULL, 0);
+++ /dev/null
-Index: libtransmission/list.c
-===================================================================
---- libtransmission/list.c (revision 14318)
-+++ libtransmission/list.c (revision 14319)
-@@ -30,20 +30,24 @@
- static tr_list*
- node_alloc (void)
- {
-- tr_list * ret;
-+ tr_list * ret = NULL;
-+ tr_lock * lock = getRecycledNodesLock ();
-
-- if (recycled_nodes == NULL)
-+ tr_lockLock (lock);
-+
-+ if (recycled_nodes != NULL)
- {
-- ret = tr_new (tr_list, 1);
-- }
-- else
-- {
-- tr_lockLock (getRecycledNodesLock ());
- ret = recycled_nodes;
- recycled_nodes = recycled_nodes->next;
-- tr_lockUnlock (getRecycledNodesLock ());
- }
-
-+ tr_lockUnlock (lock);
-+
-+ if (ret == NULL)
-+ {
-+ ret = tr_new (tr_list, 1);
-+ }
-+
- *ret = TR_LIST_CLEAR;
- return ret;
- }
-@@ -51,13 +55,15 @@
- static void
- node_free (tr_list* node)
- {
-+ tr_lock * lock = getRecycledNodesLock ();
-+
- if (node != NULL)
- {
- *node = TR_LIST_CLEAR;
-- tr_lockLock (getRecycledNodesLock ());
-+ tr_lockLock (lock);
- node->next = recycled_nodes;
- recycled_nodes = node;
-- tr_lockUnlock (getRecycledNodesLock ());
-+ tr_lockUnlock (lock);
- }
- }
-
+++ /dev/null
-#!/sbin/openrc-run
-# Copyright 1999-2013 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-
-extra_started_commands="reload"
-description="Transmission is a fast, easy and free bittorrent client"
-description_start="Start transmission-daemon server and web interface"
-description_stop="Stop transmission-daemon server and web interface"
-description_reload="Reload transmission-daemon settings"
-
-rundir=${rundir:-/var/run/transmission}
-pidfile=${pidfile:-${rundir}/transmission.pid}
-config_dir=${config_dir:-/var/lib/transmission/config}
-download_dir=${download_dir:-/var/lib/transmission/downloads}
-logfile=${logfile:-/var/log/transmission/transmission.log}
-runas_user=${runas_user:-transmission:transmission}
-
-SSD_OPTIONS=""
-
-depend() {
- need net
-}
-
-check_config() {
- if [ ! -d "${rundir}" ]; then
- mkdir "${rundir}"
- if [ -n "${runas_user}" ]; then
- chown -R ${runas_user} "${rundir}"
- fi
- fi
-
- # In case no config directory option passed use default
- if ! $(echo ${TRANSMISSION_OPTIONS} | grep -q -e '\B-g' -e '\B--config-dir'); then
- TRANSMISSION_OPTIONS="${TRANSMISSION_OPTIONS} --config-dir ${config_dir}"
- # put download dir location on first run (and take it from config later)
- if [ ! -f ${config_dir}/settings.json ]; then
- TRANSMISSION_OPTIONS="${TRANSMISSION_OPTIONS} --download-dir ${download_dir}"
- fi
- fi
-
- if [ -n "${runas_user}" ]; then
- if [ -f /etc/init.d/sysfs ]; then
- SSD_OPTIONS="${SSD_OPTIONS} --user ${runas_user}"
- else
- SSD_OPTIONS="${SSD_OPTIONS} --chuid ${runas_user}"
- fi
- fi
-}
-
-start() {
- check_config
-
- ebegin "Starting transmission daemon"
- start-stop-daemon --start --quiet --pidfile ${pidfile} ${SSD_OPTIONS} \
- --exec /usr/bin/transmission-daemon -- --pid-file ${pidfile} \
- $(test ${logfile} != "syslog" && echo --logfile ${logfile}) \
- ${TRANSMISSION_OPTIONS}
- eend $?
-}
-
-stop() {
- ebegin "Stopping transmission daemon"
- start-stop-daemon --stop --quiet --retry TERM/45/QUIT/15 --pidfile ${pidfile}
- eend $?
-}
-
-reload() {
- ebegin "Reloading transmission configuration"
- start-stop-daemon --signal HUP --pidfile ${pidfile}
- eend $?
-}
-