<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[135547] trunk/dports/audio/pulseaudio</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="https://trac.macports.org/changeset/135547">135547</a></dd>
<dt>Author</dt> <dd>ionic@macports.org</dd>
<dt>Date</dt> <dd>2015-04-25 17:20:52 -0700 (Sat, 25 Apr 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>pulseaudio: add patches fixing crashes and startup issues on OS X. Revbump</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkdportsaudiopulseaudioPortfile">trunk/dports/audio/pulseaudio/Portfile</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilesi386patch">trunk/dports/audio/pulseaudio/files/i386.patch</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilespatchmanMakefileamdiff">trunk/dports/audio/pulseaudio/files/patch-man-Makefile.am.diff</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkdportsaudiopulseaudiofilespatchconfigureacaddHAVE_COREAUDIOdiff">trunk/dports/audio/pulseaudio/files/patch-configure.ac-add-HAVE_COREAUDIO.diff</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilespatchsrc_daemon_defaultpainloadmodulecoreaudiodetectdiff">trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-load-module-coreaudio-detect.diff</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilespatchsrc_daemon_defaultpainskipconsolekitandsystemdlogindiff">trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-skip-consolekit-and-systemdlogin.diff</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilespatchsrc_daemon_systempainloadmodulecoreaudiodetectdiff">trunk/dports/audio/pulseaudio/files/patch-src_daemon_system.pa.in-load-module-coreaudio-detect.diff</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilespatchsrc_modules_macosx_module_coreaudio_devicecfixchannelsdiff">trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-channels.diff</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilespatchsrc_modules_macosx_module_coreaudio_devicecfixdevicenamesdiff">trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-device-names.diff</a></li>
<li><a href="#trunkdportsaudiopulseaudiofilespatchsrc_modules_macosx_module_coreaudio_devicecrespectPA_NAME_MAXdiff">trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-respect-PA_NAME_MAX.diff</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkdportsaudiopulseaudioPortfile"></a>
<div class="modfile"><h4>Modified: trunk/dports/audio/pulseaudio/Portfile (135546 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/Portfile        2015-04-26 00:04:35 UTC (rev 135546)
+++ trunk/dports/audio/pulseaudio/Portfile        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -8,7 +8,7 @@
</span><span class="cx"> 
</span><span class="cx"> name                pulseaudio
</span><span class="cx"> version             6.0
</span><del>-revision            1
</del><ins>+revision            2
</ins><span class="cx"> license             LGPL-2.1
</span><span class="cx"> categories          audio
</span><span class="cx"> maintainers         ionic openmaintainer
</span><span class="lines">@@ -61,7 +61,20 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-patchfiles          patch-man-Makefile.am.diff i386.patch
</del><ins>+# The last three patches make PulseAudio startup correctly.
+# Will hopefully be merged upstream soon.
+# All work has been sent upstream.
+# C.f. https://bugs.freedesktop.org/show_bug.cgi?id=62987
+# and posts on the mailing list.
+patchfiles          patch-man-Makefile.am.diff \
+                    i386.patch \
+                    patch-configure.ac-add-HAVE_COREAUDIO.diff \
+                    patch-src_daemon_default.pa.in-load-module-coreaudio-detect.diff \
+                    patch-src_daemon_system.pa.in-load-module-coreaudio-detect.diff \
+                    patch-src_daemon_default.pa.in-skip-consolekit-and-systemdlogin.diff \
+                    patch-src_modules_macosx_module_coreaudio_device.c-fix-device-names.diff \
+                    patch-src_modules_macosx_module_coreaudio_device.c-fix-channels.diff \
+                    patch-src_modules_macosx_module_coreaudio_device.c-respect-PA_NAME_MAX.diff
</ins><span class="cx"> 
</span><span class="cx"> # reconfigure using upstream autogen.sh for intltool 0.51 compatibility
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilesi386patch"></a>
<div class="modfile"><h4>Modified: trunk/dports/audio/pulseaudio/files/i386.patch (135546 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/i386.patch        2015-04-26 00:04:35 UTC (rev 135546)
+++ trunk/dports/audio/pulseaudio/files/i386.patch        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><del>---- src/pulsecore/svolume_mmx.c.orig        2015-02-12 06:10:35.000000000 -0800
-+++ src/pulsecore/svolume_mmx.c        2015-04-25 12:49:12.000000000 -0700
</del><ins>+--- src/pulsecore/svolume_mmx.c.old        2015-04-17 00:47:29.000000000 +0200
++++ src/pulsecore/svolume_mmx.c        2015-04-17 00:53:16.000000000 +0200
</ins><span class="cx"> @@ -32,7 +32,7 @@
</span><span class="cx">  
</span><span class="cx">  #include &quot;sample-util.h&quot;
</span><span class="lines">@@ -9,17 +9,27 @@
</span><span class="cx">  /* in s: 2 int16_t samples
</span><span class="cx">   * in v: 2 int32_t volumes, fixed point 16:16
</span><span class="cx">   * out s: contains scaled and clamped int16_t samples.
</span><del>-@@ -241,7 +241,7 @@
- #endif /* (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
</del><ins>+@@ -238,15 +238,15 @@ static void pa_volume_s16re_mmx(int16_t 
+     );
+ }
</ins><span class="cx">  
</span><ins>+-#endif /* (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
++#endif /* (!defined(__APPLE__) &amp;&amp; !defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */

</ins><span class="cx">  void pa_volume_func_init_mmx(pa_cpu_x86_flag_t flags) {
</span><span class="cx"> -#if (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__)
</span><span class="cx"> +#if (!defined(__APPLE__) &amp;&amp; !defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__)
</span><span class="cx">      if ((flags &amp; PA_CPU_X86_MMX) &amp;&amp; (flags &amp; PA_CPU_X86_CMOV)) {
</span><span class="cx">          pa_log_info(&quot;Initialising MMX optimized volume functions.&quot;);
</span><span class="cx">  
</span><del>---- src/pulsecore/svolume_sse.c.orig        2015-02-12 06:10:35.000000000 -0800
-+++ src/pulsecore/svolume_sse.c        2015-04-25 12:50:10.000000000 -0700
</del><ins>+         pa_set_volume_func(PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_mmx);
+         pa_set_volume_func(PA_SAMPLE_S16RE, (pa_do_volume_func_t) pa_volume_s16re_mmx);
+     }
+-#endif /* (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
++#endif /* (!defined(__APPLE__) &amp;&amp; !defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
+ }
+--- src/pulsecore/svolume_sse.c.old        2015-04-17 00:47:32.000000000 +0200
++++ src/pulsecore/svolume_sse.c        2015-04-17 00:54:13.000000000 +0200
</ins><span class="cx"> @@ -32,7 +32,7 @@
</span><span class="cx">  
</span><span class="cx">  #include &quot;sample-util.h&quot;
</span><span class="lines">@@ -29,12 +39,22 @@
</span><span class="cx">  
</span><span class="cx">  #define VOLUME_32x16(s,v)                  /* .. |   vh  |   vl  | */                   \
</span><span class="cx">        &quot; pxor %%xmm4, %%xmm4          \n\t&quot; /* .. |    0  |    0  | */                   \
</span><del>-@@ -252,7 +252,7 @@
- #endif /* (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
</del><ins>+@@ -249,15 +249,15 @@ static void pa_volume_s16re_sse2(int16_t
+     );
+ }
</ins><span class="cx">  
</span><ins>+-#endif /* (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
++#endif /* (!defined(__APPLE__) &amp;&amp; !defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */

</ins><span class="cx">  void pa_volume_func_init_sse(pa_cpu_x86_flag_t flags) {
</span><span class="cx"> -#if (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__)
</span><span class="cx"> +#if (!defined(__APPLE__) &amp;&amp; !defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__)
</span><span class="cx">      if (flags &amp; PA_CPU_X86_SSE2) {
</span><span class="cx">          pa_log_info(&quot;Initialising SSE2 optimized volume functions.&quot;);
</span><span class="cx">  
</span><ins>+         pa_set_volume_func(PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_sse2);
+         pa_set_volume_func(PA_SAMPLE_S16RE, (pa_do_volume_func_t) pa_volume_s16re_sse2);
+     }
+-#endif /* (!defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
++#endif /* (!defined(__APPLE__) &amp;&amp; !defined(__FreeBSD__) &amp;&amp; !defined(__FreeBSD_kernel__) &amp;&amp; defined (__i386__)) || defined (__amd64__) */
+ }
</ins></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchconfigureacaddHAVE_COREAUDIOdiff"></a>
<div class="addfile"><h4>Added: trunk/dports/audio/pulseaudio/files/patch-configure.ac-add-HAVE_COREAUDIO.diff (0 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-configure.ac-add-HAVE_COREAUDIO.diff                                (rev 0)
+++ trunk/dports/audio/pulseaudio/files/patch-configure.ac-add-HAVE_COREAUDIO.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -0,0 +1,14 @@
</span><ins>+--- configure.ac.orig        2014-02-15 03:33:32.000000000 -0500
++++ configure.ac        2014-11-23 22:05:59.000000000 -0500
+@@ -767,8 +794,11 @@
+ AS_IF([test &quot;x$enable_coreaudio_output&quot; = &quot;xyes&quot; &amp;&amp; test &quot;x$HAVE_COREAUDIO&quot; = &quot;x0&quot;],
+     [AC_MSG_ERROR([*** CoreAudio output support not found])])

++AC_SUBST(HAVE_COREAUDIO)
+ AM_CONDITIONAL([HAVE_COREAUDIO], [test &quot;x$HAVE_COREAUDIO&quot; = &quot;x1&quot; &amp;&amp; test &quot;x$enable_coreaudio_output&quot; != &quot;xno&quot;])

++AS_IF([test &quot;x$HAVE_COREAUDIO&quot; = &quot;x1&quot;], AC_DEFINE([HAVE_COREAUDIO], 1, [Have CoreAudio?]))
++
+ #### ALSA support (optional) ####

+ AC_ARG_ENABLE([alsa],
</ins></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchmanMakefileamdiff"></a>
<div class="modfile"><h4>Modified: trunk/dports/audio/pulseaudio/files/patch-man-Makefile.am.diff (135546 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-man-Makefile.am.diff        2015-04-26 00:04:35 UTC (rev 135546)
+++ trunk/dports/audio/pulseaudio/files/patch-man-Makefile.am.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -1,6 +1,6 @@
</span><del>---- man/Makefile.am.orig        2014-03-03 12:23:46.000000000 -0800
-+++ man/Makefile.am        2014-03-03 12:24:32.000000000 -0800
-@@ -63,7 +63,7 @@
</del><ins>+--- man/Makefile.am.old        2015-04-17 00:22:04.000000000 +0200
++++ man/Makefile.am        2015-04-17 00:23:14.000000000 +0200
+@@ -59,7 +59,7 @@
</ins><span class="cx">          $(dist_man_MANS)
</span><span class="cx">  
</span><span class="cx">  %: %.xml Makefile
</span></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchsrc_daemon_defaultpainloadmodulecoreaudiodetectdiff"></a>
<div class="addfile"><h4>Added: trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-load-module-coreaudio-detect.diff (0 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-load-module-coreaudio-detect.diff                                (rev 0)
+++ trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-load-module-coreaudio-detect.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+--- src/daemon/default.pa.in.orig        2014-01-23 13:57:55.000000000 -0500
++++ src/daemon/default.pa.in        2014-11-23 22:03:02.000000000 -0500
+@@ -71,6 +71,10 @@
+ .ifexists module-udev-detect@PA_SOEXT@
+ load-module module-udev-detect
+ .else
++], @HAVE_COREAUDIO@, 1, [dnl
++.ifexists module-coreaudio-detect@PA_SOEXT@
++load-module module-coreaudio-detect
++.else
+ ], [dnl
+ .ifexists module-detect@PA_SOEXT@
+ ])dnl
</ins></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchsrc_daemon_defaultpainskipconsolekitandsystemdlogindiff"></a>
<div class="addfile"><h4>Added: trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-skip-consolekit-and-systemdlogin.diff (0 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-skip-consolekit-and-systemdlogin.diff                                (rev 0)
+++ trunk/dports/audio/pulseaudio/files/patch-src_daemon_default.pa.in-skip-consolekit-and-systemdlogin.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+--- src/daemon/default.pa.in.old        2015-04-20 06:24:03.000000000 +0200
++++ src/daemon/default.pa.in        2015-04-21 05:49:35.000000000 +0200
+@@ -153,12 +153,14 @@ load-module module-suspend-on-idle

+ ### If autoexit on idle is enabled we want to make sure we only quit
+ ### when no local session needs us anymore.
++ifelse(@HAVE_COREAUDIO@, 1, [], [dnl
+ .ifexists module-console-kit@PA_SOEXT@
+ load-module module-console-kit
+ .endif
+ .ifexists module-systemd-login@PA_SOEXT@
+ load-module module-systemd-login
+ .endif
++])dnl

+ ### Enable positioned event sounds
+ load-module module-position-event-sounds
</ins></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchsrc_daemon_systempainloadmodulecoreaudiodetectdiff"></a>
<div class="addfile"><h4>Added: trunk/dports/audio/pulseaudio/files/patch-src_daemon_system.pa.in-load-module-coreaudio-detect.diff (0 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-src_daemon_system.pa.in-load-module-coreaudio-detect.diff                                (rev 0)
+++ trunk/dports/audio/pulseaudio/files/patch-src_daemon_system.pa.in-load-module-coreaudio-detect.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+--- src/daemon/system.pa.in.orig        2014-01-23 13:57:55.000000000 -0500
++++ src/daemon/system.pa.in        2014-11-23 22:04:15.000000000 -0500
+@@ -29,6 +29,10 @@
+ .ifexists module-hal-detect@PA_SOEXT@
+ load-module module-hal-detect
+ .else
++], @HAVE_COREAUDIO@, 1, [dnl
++.ifexists module-coreaudio-detect@PA_SOEXT@
++load-module module-coreaudio-detect
++.else
+ ], [dnl
+ .ifexists module-detect@PA_SOEXT@
+ ])dnl
</ins></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchsrc_modules_macosx_module_coreaudio_devicecfixchannelsdiff"></a>
<div class="addfile"><h4>Added: trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-channels.diff (0 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-channels.diff                                (rev 0)
+++ trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-channels.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -0,0 +1,86 @@
</span><ins>+--- src/modules/macosx/module-coreaudio-device.c.old        2015-04-19 07:45:52.000000000 +0200
++++ src/modules/macosx/module-coreaudio-device.c        2015-04-19 07:59:17.000000000 +0200
+@@ -415,21 +415,28 @@ static int ca_device_create_sink(pa_modu
+     pa_sink_flags_t flags = PA_SINK_LATENCY | PA_SINK_HARDWARE;
+     coreaudio_sink *ca_sink;
+     pa_sink *sink;
+-    unsigned int i;
++    unsigned int i, channels;
+     char tmp[255];
+     pa_strbuf *strbuf;
+     AudioObjectPropertyAddress property_address;
+     CFStringRef tmp_cfstr;

+     ca_sink = pa_xnew0(coreaudio_sink, 1);
+-    ca_sink-&gt;map.channels = buf-&gt;mNumberChannels;
+-    ca_sink-&gt;ss.channels = buf-&gt;mNumberChannels;
++
++    /* Clamp to PA_CHANNELS_MAX. */
++    channels = buf-&gt;mNumberChannels;
++    if (channels &gt; PA_CHANNELS_MAX) {
++        channels = PA_CHANNELS_MAX;
++    }
++
++    ca_sink-&gt;map.channels = channels;
++    ca_sink-&gt;ss.channels = channels;
+     ca_sink-&gt;channel_idx = channel_idx;

+     /* build a name for this stream */
+     strbuf = pa_strbuf_new();

+-    for (i = 0; i &lt; buf-&gt;mNumberChannels; i++) {
++    for (i = 0; i &lt; channels; i++) {
+         property_address.mSelector = kAudioObjectPropertyElementName;
+         property_address.mScope = kAudioDevicePropertyScopeOutput;
+         property_address.mElement = channel_idx + i + 1;
+@@ -456,7 +463,7 @@ static int ca_device_create_sink(pa_modu
+     for (i = 0; i &lt; ca_sink-&gt;map.channels; i++)
+         ca_sink-&gt;map.map[i] = PA_CHANNEL_POSITION_MONO;

+-    if (buf-&gt;mNumberChannels == 2) {
++    if (channels == 2) {
+         ca_sink-&gt;map.map[0] = PA_CHANNEL_POSITION_LEFT;
+         ca_sink-&gt;map.map[1] = PA_CHANNEL_POSITION_RIGHT;
+     }
+@@ -538,21 +545,28 @@ static int ca_device_create_source(pa_mo
+     pa_source_flags_t flags = PA_SOURCE_LATENCY | PA_SOURCE_HARDWARE;
+     coreaudio_source *ca_source;
+     pa_source *source;
+-    unsigned int i;
++    unsigned int i, channels;
+     char tmp[255];
+     pa_strbuf *strbuf;
+     AudioObjectPropertyAddress property_address;
+     CFStringRef tmp_cfstr;

+     ca_source = pa_xnew0(coreaudio_source, 1);
+-    ca_source-&gt;map.channels = buf-&gt;mNumberChannels;
+-    ca_source-&gt;ss.channels = buf-&gt;mNumberChannels;
++
++    /* Clamp to PA_CHANNELS_MAX. */
++    channels = buf-&gt;mNumberChannels;
++    if (channels &gt; PA_CHANNELS_MAX) {
++        channels = PA_CHANNELS_MAX;
++    }
++
++    ca_source-&gt;map.channels = channels;
++    ca_source-&gt;ss.channels = channels;
+     ca_source-&gt;channel_idx = channel_idx;

+     /* build a name for this stream */
+     strbuf = pa_strbuf_new();

+-    for (i = 0; i &lt; buf-&gt;mNumberChannels; i++) {
++    for (i = 0; i &lt; channels; i++) {
+         property_address.mSelector = kAudioObjectPropertyElementName;
+         property_address.mScope = kAudioDevicePropertyScopeInput;
+         property_address.mElement = channel_idx + i + 1;
+@@ -579,7 +593,7 @@ static int ca_device_create_source(pa_mo
+     for (i = 0; i &lt; ca_source-&gt;map.channels; i++)
+         ca_source-&gt;map.map[i] = PA_CHANNEL_POSITION_MONO;

+-    if (buf-&gt;mNumberChannels == 2) {
++    if (channels == 2) {
+         ca_source-&gt;map.map[0] = PA_CHANNEL_POSITION_LEFT;
+         ca_source-&gt;map.map[1] = PA_CHANNEL_POSITION_RIGHT;
+     }
</ins></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchsrc_modules_macosx_module_coreaudio_devicecfixdevicenamesdiff"></a>
<div class="addfile"><h4>Added: trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-device-names.diff (0 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-device-names.diff                                (rev 0)
+++ trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-fix-device-names.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -0,0 +1,84 @@
</span><ins>+--- src/modules/macosx/module-coreaudio-device.c.old        2015-04-19 07:39:23.000000000 +0200
++++ src/modules/macosx/module-coreaudio-device.c        2015-04-19 07:40:13.000000000 +0200
+@@ -374,6 +374,39 @@ static int ca_sink_set_state(pa_sink *s,
+     return 0;
+ }

++/* Caveat: this function frees the CFString if conversion succeeded. */
++static int CFString_to_cstr_n(CFStringRef cfstr, char *buf, long n) {
++    int ret;
++
++    assert (buf);
++
++    ret = 0;
++
++    if (cfstr != NULL) {
++        const char *tmp = CFStringGetCStringPtr(cfstr, kCFStringEncodingUTF8);
++
++        if (tmp == NULL) {
++            if (CFStringGetCString(cfstr, buf, n, kCFStringEncodingUTF8))
++                ret = 1;
++        }
++        else {
++            strncpy(buf, tmp, n);
++            buf[n - 1] = 0;
++            ret = 1;
++        }
++    }
++
++    /*
++     * A true value for ret implies cfstr != NULL, but let's still do the check
++     * for safety reasons (i.e., should this code ever be re-organized...)
++     */
++    if (ret &amp;&amp; cfstr != NULL) {
++        CFRelease(cfstr);
++    }
++
++    return ret;
++}
++
+ static int ca_device_create_sink(pa_module *m, AudioBuffer *buf, int channel_idx) {
+     OSStatus err;
+     UInt32 size;
+@@ -386,6 +419,7 @@ static int ca_device_create_sink(pa_modu
+     char tmp[255];
+     pa_strbuf *strbuf;
+     AudioObjectPropertyAddress property_address;
++    CFStringRef tmp_cfstr;

+     ca_sink = pa_xnew0(coreaudio_sink, 1);
+     ca_sink-&gt;map.channels = buf-&gt;mNumberChannels;
+@@ -400,7 +434,11 @@ static int ca_device_create_sink(pa_modu
+         property_address.mScope = kAudioDevicePropertyScopeOutput;
+         property_address.mElement = channel_idx + i + 1;
+         size = sizeof(tmp);
+-        err = AudioObjectGetPropertyData(u-&gt;object_id, &amp;property_address, 0, NULL, &amp;size, tmp);
++        err = AudioObjectGetPropertyData(u-&gt;object_id, &amp;property_address, 0, NULL, &amp;size, &amp;tmp_cfstr);
++        if (err == 0) {
++            err = !(CFString_to_cstr_n(tmp_cfstr, tmp, sizeof(tmp)));
++        }
++
+         if (err || !strlen(tmp))
+             snprintf(tmp, sizeof(tmp), &quot;Channel %d&quot;, (int) property_address.mElement);

+@@ -504,6 +542,7 @@ static int ca_device_create_source(pa_mo
+     char tmp[255];
+     pa_strbuf *strbuf;
+     AudioObjectPropertyAddress property_address;
++    CFStringRef tmp_cfstr;

+     ca_source = pa_xnew0(coreaudio_source, 1);
+     ca_source-&gt;map.channels = buf-&gt;mNumberChannels;
+@@ -518,7 +557,11 @@ static int ca_device_create_source(pa_mo
+         property_address.mScope = kAudioDevicePropertyScopeInput;
+         property_address.mElement = channel_idx + i + 1;
+         size = sizeof(tmp);
+-        err = AudioObjectGetPropertyData(u-&gt;object_id, &amp;property_address, 0, NULL, &amp;size, tmp);
++        err = AudioObjectGetPropertyData(u-&gt;object_id, &amp;property_address, 0, NULL, &amp;size, &amp;tmp_cfstr);
++        if (err == 0) {
++            err = !(CFString_to_cstr_n(tmp_cfstr, tmp, sizeof(tmp)));
++        }
++
+         if (err || !strlen(tmp))
+             snprintf(tmp, sizeof(tmp), &quot;Channel %d&quot;, (int) property_address.mElement);

</ins></span></pre></div>
<a id="trunkdportsaudiopulseaudiofilespatchsrc_modules_macosx_module_coreaudio_devicecrespectPA_NAME_MAXdiff"></a>
<div class="addfile"><h4>Added: trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-respect-PA_NAME_MAX.diff (0 => 135547)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-respect-PA_NAME_MAX.diff                                (rev 0)
+++ trunk/dports/audio/pulseaudio/files/patch-src_modules_macosx_module_coreaudio_device.c-respect-PA_NAME_MAX.diff        2015-04-26 00:20:52 UTC (rev 135547)
</span><span class="lines">@@ -0,0 +1,60 @@
</span><ins>+--- src/modules/macosx/module-coreaudio-device.c.old        2015-04-20 01:41:14.000000000 +0200
++++ src/modules/macosx/module-coreaudio-device.c        2015-04-20 01:43:58.000000000 +0200
+@@ -43,6 +43,7 @@
+ #include &lt;pulsecore/thread.h&gt;
+ #include &lt;pulsecore/thread-mq.h&gt;
+ #include &lt;pulsecore/i18n.h&gt;
++#include &lt;pulsecore/namereg.h&gt;

+ #include &lt;CoreAudio/CoreAudio.h&gt;
+ #include &lt;CoreAudio/CoreAudioTypes.h&gt;
+@@ -416,7 +417,7 @@ static int ca_device_create_sink(pa_modu
+     coreaudio_sink *ca_sink;
+     pa_sink *sink;
+     unsigned int i, channels;
+-    char tmp[255];
++    char tmp[255], *tmp_clamp;
+     pa_strbuf *strbuf;
+     AudioObjectPropertyAddress property_address;
+     CFStringRef tmp_cfstr;
+@@ -455,7 +456,14 @@ static int ca_device_create_sink(pa_modu
+         pa_strbuf_puts(strbuf, tmp);
+     }

+-    ca_sink-&gt;name = pa_strbuf_tostring_free(strbuf);
++    /* Clamp to PA_NAME_MAX and leave a &quot;safety margin&quot; for deduplication
++     * and other appended data. */
++    tmp_clamp = pa_strbuf_tostring_free(strbuf);
++    strncpy(tmp, tmp_clamp, PA_NAME_MAX - 20);
++    tmp[PA_NAME_MAX - 20] = 0;
++    pa_xfree(tmp_clamp);
++
++    ca_sink-&gt;name = pa_xstrndup(tmp, PA_NAME_MAX);

+     pa_log_debug(&quot;Stream name is &gt;%s&lt;&quot;, ca_sink-&gt;name);

+@@ -546,7 +554,7 @@ static int ca_device_create_source(pa_mo
+     coreaudio_source *ca_source;
+     pa_source *source;
+     unsigned int i, channels;
+-    char tmp[255];
++    char tmp[255], *tmp_clamp;
+     pa_strbuf *strbuf;
+     AudioObjectPropertyAddress property_address;
+     CFStringRef tmp_cfstr;
+@@ -585,7 +593,14 @@ static int ca_device_create_source(pa_mo
+         pa_strbuf_puts(strbuf, tmp);
+     }

+-    ca_source-&gt;name = pa_strbuf_tostring_free(strbuf);
++    /* Clamp to PA_NAME_MAX and leave a &quot;safety margin&quot; for deduplication
++     * and other appended data. */
++    tmp_clamp = pa_strbuf_tostring_free(strbuf);
++    strncpy(tmp, tmp_clamp, PA_NAME_MAX - 20);
++    tmp[PA_NAME_MAX - 20] = 0;
++    pa_xfree(tmp_clamp);
++
++    ca_source-&gt;name = pa_xstrndup(tmp, PA_NAME_MAX);

+     pa_log_debug(&quot;Stream name is &gt;%s&lt;&quot;, ca_source-&gt;name);

</ins></span></pre>
</div>
</div>

</body>
</html>