Commit 339293a3 authored by Hirokazu Yamamoto's avatar Hirokazu Yamamoto

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.
........
parent c6610151
...@@ -616,6 +616,8 @@ Library ...@@ -616,6 +616,8 @@ Library
Extension Modules Extension Modules
----------------- -----------------
- Issue #6317: Now winsound.PlaySound can accept non ascii filename.
- Issue #9054: Fix a crash occurring when using the pyexpat module - Issue #9054: Fix a crash occurring when using the pyexpat module
with expat version 2.0.1. with expat version 2.0.1.
......
...@@ -72,30 +72,52 @@ PyDoc_STRVAR(sound_module_doc, ...@@ -72,30 +72,52 @@ PyDoc_STRVAR(sound_module_doc,
static PyObject * static PyObject *
sound_playsound(PyObject *s, PyObject *args) sound_playsound(PyObject *s, PyObject *args)
{ {
Py_UNICODE *wsound;
PyObject *osound;
const char *sound; const char *sound;
int flags; int flags;
int length;
int ok; int ok;
if (!PyArg_ParseTuple(args, "z#i:PlaySound", &sound, &length, &flags)) { if (PyArg_ParseTuple(args, "Zi:PlaySound", &wsound, &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");
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) { if (flags & SND_ASYNC && flags & SND_MEMORY) {
/* Sidestep reference counting headache; unfortunately this also /* Sidestep reference counting headache; unfortunately this also
prevent SND_LOOP from memory. */ prevent SND_LOOP from memory. */
PyErr_SetString(PyExc_RuntimeError, "Cannot play asynchronously from memory"); PyErr_SetString(PyExc_RuntimeError, "Cannot play asynchronously from memory");
Py_DECREF(osound);
return NULL; return NULL;
} }
sound = PyBytes_AsString(osound);
Py_BEGIN_ALLOW_THREADS Py_BEGIN_ALLOW_THREADS
ok = PlaySound(sound, NULL, flags); ok = PlaySoundA(sound, NULL, flags);
Py_END_ALLOW_THREADS Py_END_ALLOW_THREADS
if (!ok) { if (!ok) {
PyErr_SetString(PyExc_RuntimeError, "Failed to play sound"); PyErr_SetString(PyExc_RuntimeError, "Failed to play sound");
Py_DECREF(osound);
return NULL; return NULL;
} }
Py_DECREF(osound);
Py_INCREF(Py_None); Py_INCREF(Py_None);
return Py_None; return Py_None;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment