static PyObject * dbmopen(PyObject *self, PyObject *args) { char *name; char *flags = "r"; int iflags; int mode = 0666; if ( !PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode) ) return NULL; if ( strcmp(flags, "r") == 0 ) iflags = O_RDONLY; else if ( strcmp(flags, "w") == 0 ) iflags = O_RDWR; else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */ iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "c") == 0 ) iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "n") == 0 ) iflags = O_RDWR|O_CREAT|O_TRUNC; else { PyErr_SetString(DbmError, "arg 2 to open should be 'r', 'w', 'c', or 'n'"); return NULL; } return newdbmobject(name, iflags, mode); }
static PyObject * dbmopen(PyObject *self, PyObject *args) { char *name; char *flags = "r"; int iflags; int mode = 0666; if (!PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode)) return NULL; switch (flags[0]) { case 'r': iflags = GDBM_READER; break; case 'w': iflags = GDBM_WRITER; break; case 'c': iflags = GDBM_WRCREAT; break; case 'n': iflags = GDBM_NEWDB; break; default: PyErr_SetString(DbmError, "First flag must be one of 'r', 'w', 'c' or 'n'"); return NULL; } for (flags++; *flags != '\0'; flags++) { char buf[40]; switch (*flags) { #ifdef GDBM_FAST case 'f': iflags |= GDBM_FAST; break; #endif #ifdef GDBM_SYNC case 's': iflags |= GDBM_SYNC; break; #endif #ifdef GDBM_NOLOCK case 'u': iflags |= GDBM_NOLOCK; break; #endif default: PyOS_snprintf(buf, sizeof(buf), "Flag '%c' is not supported.", *flags); PyErr_SetString(DbmError, buf); return NULL; } } return newdbmobject(name, iflags, mode); }
static PyObject * dbmopen_impl(PyModuleDef *module, const char *name, const char *flags, int mode) /*[clinic end generated code: output=365b31415c03ccd4 input=55563cd60e51984a]*/ { int iflags; switch (flags[0]) { case 'r': iflags = GDBM_READER; break; case 'w': iflags = GDBM_WRITER; break; case 'c': iflags = GDBM_WRCREAT; break; case 'n': iflags = GDBM_NEWDB; break; default: PyErr_SetString(DbmError, "First flag must be one of 'r', 'w', 'c' or 'n'"); return NULL; } for (flags++; *flags != '\0'; flags++) { char buf[40]; switch (*flags) { #ifdef GDBM_FAST case 'f': iflags |= GDBM_FAST; break; #endif #ifdef GDBM_SYNC case 's': iflags |= GDBM_SYNC; break; #endif #ifdef GDBM_NOLOCK case 'u': iflags |= GDBM_NOLOCK; break; #endif default: PyOS_snprintf(buf, sizeof(buf), "Flag '%c' is not supported.", *flags); PyErr_SetString(DbmError, buf); return NULL; } } return newdbmobject(name, iflags, mode); }
static PyObject * dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode) /*[clinic end generated code: checksum=fb265f75641553ccd963f84c143b35c11f9121fc]*/ { int iflags; if ( strcmp(flags, "r") == 0 ) iflags = O_RDONLY; else if ( strcmp(flags, "w") == 0 ) iflags = O_RDWR; else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */ iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "c") == 0 ) iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "n") == 0 ) iflags = O_RDWR|O_CREAT|O_TRUNC; else { PyErr_SetString(DbmError, "arg 2 to open should be 'r', 'w', 'c', or 'n'"); return NULL; } return newdbmobject(filename, iflags, mode); }
static PyObject * dbmopen_impl(PyObject *module, PyObject *filename, const char *flags, int mode) /*[clinic end generated code: output=9527750f5df90764 input=376a9d903a50df59]*/ { int iflags; if ( strcmp(flags, "r") == 0 ) iflags = O_RDONLY; else if ( strcmp(flags, "w") == 0 ) iflags = O_RDWR; else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */ iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "c") == 0 ) iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "n") == 0 ) iflags = O_RDWR|O_CREAT|O_TRUNC; else { PyErr_SetString(DbmError, "arg 2 to open should be 'r', 'w', 'c', or 'n'"); return NULL; } PyObject *filenamebytes = PyUnicode_EncodeFSDefault(filename); if (filenamebytes == NULL) { return NULL; } const char *name = PyBytes_AS_STRING(filenamebytes); if (strlen(name) != (size_t)PyBytes_GET_SIZE(filenamebytes)) { Py_DECREF(filenamebytes); PyErr_SetString(PyExc_ValueError, "embedded null character"); return NULL; } PyObject *self = newdbmobject(name, iflags, mode); Py_DECREF(filenamebytes); return self; }
static PyObject * dbmopen_impl(PyModuleDef *module, const char *filename, const char *flags, int mode) /*[clinic end generated code: output=e8d4b36f25c733fd input=226334bade5764e6]*/ { int iflags; if ( strcmp(flags, "r") == 0 ) iflags = O_RDONLY; else if ( strcmp(flags, "w") == 0 ) iflags = O_RDWR; else if ( strcmp(flags, "rw") == 0 ) /* B/W compat */ iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "c") == 0 ) iflags = O_RDWR|O_CREAT; else if ( strcmp(flags, "n") == 0 ) iflags = O_RDWR|O_CREAT|O_TRUNC; else { PyErr_SetString(DbmError, "arg 2 to open should be 'r', 'w', 'c', or 'n'"); return NULL; } return newdbmobject(filename, iflags, mode); }