diff options
author | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2010-11-07 11:53:57 (GMT) |
---|---|---|
committer | Hirokazu Yamamoto <ocean-city@m2.ccsnet.ne.jp> | 2010-11-07 11:53:57 (GMT) |
commit | 339293a37251dd46822dab270387b296841d49e0 (patch) | |
tree | 067e31d55beedaf7e384267a8b709e50e716519f /PC | |
parent | c66101514117fdcdf201aa2f9c9baf705bd9a567 (diff) | |
download | cpython-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.c | 36 |
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; } |