diff options
-rw-r--r-- | Modules/linuxaudiodev.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/Modules/linuxaudiodev.c b/Modules/linuxaudiodev.c index 74cfdee..5aac51a 100644 --- a/Modules/linuxaudiodev.c +++ b/Modules/linuxaudiodev.c @@ -79,11 +79,21 @@ newladobject(PyObject *arg) { lad_t *xp; int fd, afmts, imode; - char *mode; - char *basedev; + char *basedev = NULL; + char *mode = NULL; + + /* Two ways to call linuxaudiodev.open(): + open(device, mode) (for consistency with builtin open()) + open(mode) (for backwards compatibility) + because the *first* argument is optional, parsing args is + a wee bit tricky. */ + if (!PyArg_ParseTuple(arg, "s|s:open", &basedev, &mode)) + return NULL; + if (mode == NULL) { /* only one arg supplied */ + mode = basedev; + basedev = NULL; + } - /* Check arg for r/w/rw */ - if (!PyArg_ParseTuple(arg, "s:open", &mode)) return NULL; if (strcmp(mode, "r") == 0) imode = O_RDONLY; else if (strcmp(mode, "w") == 0) @@ -102,9 +112,11 @@ newladobject(PyObject *arg) * latter uses 8-bit unsigned encoding. */ - basedev = getenv("AUDIODEV"); - if (!basedev) - basedev = "/dev/dsp"; + if (basedev == NULL) { /* called with one arg */ + basedev = getenv("AUDIODEV"); + if (basedev == NULL) /* $AUDIODEV not set */ + basedev = "/dev/dsp"; + } if ((fd = open(basedev, imode)) == -1) { PyErr_SetFromErrnoWithFilename(LinuxAudioError, basedev); |