summaryrefslogtreecommitdiffstats
path: root/PC
diff options
context:
space:
mode:
authorHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>2010-11-07 11:53:57 (GMT)
committerHirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp>2010-11-07 11:53:57 (GMT)
commit339293a37251dd46822dab270387b296841d49e0 (patch)
tree067e31d55beedaf7e384267a8b709e50e716519f /PC
parentc66101514117fdcdf201aa2f9c9baf705bd9a567 (diff)
downloadcpython-339293a37251dd46822dab270387b296841d49e0.zip
cpython-339293a37251dd46822dab270387b296841d49e0.tar.gz
cpython-339293a37251dd46822dab270387b296841d49e0.tar.bz2
Merged revisions 86283 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ........ r86283 | hirokazu.yamamoto | 2010-11-07 18:23:15 +0900 | 1 line Issue #6317: Now winsound.PlaySound can accept non ascii filename. ........
Diffstat (limited to 'PC')
-rw-r--r--PC/winsound.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/PC/winsound.c b/PC/winsound.c
index 1e00e7a..d455848 100644
--- a/PC/winsound.c
+++ b/PC/winsound.c
@@ -72,30 +72,52 @@ PyDoc_STRVAR(sound_module_doc,
static PyObject *
sound_playsound(PyObject *s, PyObject *args)
{
+ Py_UNICODE *wsound;
+ PyObject *osound;
const char *sound;
int flags;
- int length;
int ok;
- if (!PyArg_ParseTuple(args, "z#i:PlaySound", &sound, &length, &flags)) {
- return NULL;
+ if (PyArg_ParseTuple(args, "Zi:PlaySound", &wsound, &flags)) {
+ if (flags & SND_ASYNC && flags & SND_MEMORY) {
+ /* Sidestep reference counting headache; unfortunately this also
+ prevent SND_LOOP from memory. */
+ PyErr_SetString(PyExc_RuntimeError, "Cannot play asynchronously from memory");
+ return NULL;
+ }
+ Py_BEGIN_ALLOW_THREADS
+ ok = PlaySoundW(wsound, NULL, flags);
+ Py_END_ALLOW_THREADS
+ if (!ok) {
+ PyErr_SetString(PyExc_RuntimeError, "Failed to play sound");
+ return NULL;
+ }
+ Py_INCREF(Py_None);
+ return Py_None;
}
-
+ /* Drop the argument parsing error as narrow strings
+ are also valid. */
+ PyErr_Clear();
+ if (!PyArg_ParseTuple(args, "O&i:PlaySound",
+ PyUnicode_FSConverter, &osound, &flags))
+ return NULL;
if (flags & SND_ASYNC && flags & SND_MEMORY) {
/* Sidestep reference counting headache; unfortunately this also
prevent SND_LOOP from memory. */
PyErr_SetString(PyExc_RuntimeError, "Cannot play asynchronously from memory");
+ Py_DECREF(osound);
return NULL;
}
-
+ sound = PyBytes_AsString(osound);
Py_BEGIN_ALLOW_THREADS
- ok = PlaySound(sound, NULL, flags);
+ ok = PlaySoundA(sound, NULL, flags);
Py_END_ALLOW_THREADS
if (!ok) {
PyErr_SetString(PyExc_RuntimeError, "Failed to play sound");
+ Py_DECREF(osound);
return NULL;
}
-
+ Py_DECREF(osound);
Py_INCREF(Py_None);
return Py_None;
}