Kaydet (Commit) 51b6bc55 authored tarafından Fred Drake's avatar Fred Drake

ANSI-fication of the sources, convert to 4-space indents.

Use PyArg_ParseTuple() to get better error messages.
Add docstrings all around.
üst 4cbc9f76
...@@ -15,8 +15,9 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. ...@@ -15,8 +15,9 @@ redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES.
#include <sys/types.h> #include <sys/types.h>
#include <grp.h> #include <grp.h>
static PyObject *mkgrent(p)
struct group *p; static PyObject *
mkgrent(struct group *p)
{ {
PyObject *v, *w; PyObject *v, *w;
char **member; char **member;
...@@ -47,12 +48,12 @@ static PyObject *mkgrent(p) ...@@ -47,12 +48,12 @@ static PyObject *mkgrent(p)
return v; return v;
} }
static PyObject *grp_getgrgid(self, args) static PyObject *
PyObject *self, *args; grp_getgrgid(PyObject *self, PyObject *args)
{ {
int gid; int gid;
struct group *p; struct group *p;
if (!PyArg_Parse((args),"i",(&gid))) if (!PyArg_ParseTuple(args, "i:getgrgid", &gid))
return NULL; return NULL;
if ((p = getgrgid(gid)) == NULL) { if ((p = getgrgid(gid)) == NULL) {
PyErr_SetString(PyExc_KeyError, "getgrgid(): gid not found"); PyErr_SetString(PyExc_KeyError, "getgrgid(): gid not found");
...@@ -61,12 +62,12 @@ static PyObject *grp_getgrgid(self, args) ...@@ -61,12 +62,12 @@ static PyObject *grp_getgrgid(self, args)
return mkgrent(p); return mkgrent(p);
} }
static PyObject *grp_getgrnam(self, args) static PyObject *
PyObject *self, *args; grp_getgrnam(PyObject *self, PyObject *args)
{ {
char *name; char *name;
struct group *p; struct group *p;
if (!PyArg_Parse((args),"s",(&name))) if (!PyArg_ParseTuple(args, "s:getgrnam", &name))
return NULL; return NULL;
if ((p = getgrnam(name)) == NULL) { if ((p = getgrnam(name)) == NULL) {
PyErr_SetString(PyExc_KeyError, "getgrnam(): name not found"); PyErr_SetString(PyExc_KeyError, "getgrnam(): name not found");
...@@ -75,12 +76,13 @@ static PyObject *grp_getgrnam(self, args) ...@@ -75,12 +76,13 @@ static PyObject *grp_getgrnam(self, args)
return mkgrent(p); return mkgrent(p);
} }
static PyObject *grp_getgrall(self, args) static PyObject *
PyObject *self, *args; grp_getgrall(PyObject *self, PyObject *args)
{ {
PyObject *d; PyObject *d;
struct group *p; struct group *p;
if (!PyArg_NoArgs(args))
if (!PyArg_ParseTuple(args, ":getgrall"))
return NULL; return NULL;
if ((d = PyList_New(0)) == NULL) if ((d = PyList_New(0)) == NULL)
return NULL; return NULL;
...@@ -98,14 +100,39 @@ static PyObject *grp_getgrall(self, args) ...@@ -98,14 +100,39 @@ static PyObject *grp_getgrall(self, args)
} }
static PyMethodDef grp_methods[] = { static PyMethodDef grp_methods[] = {
{"getgrgid", grp_getgrgid}, {"getgrgid", grp_getgrgid, METH_VARARGS,
{"getgrnam", grp_getgrnam}, "getgrgid(id) -> tuple\n\
{"getgrall", grp_getgrall}, Return the group database entry for the given numeric group ID. If\n\
id is not valid, raise KeyError."},
{"getgrnam", grp_getgrnam, METH_VARARGS,
"getgrnam(name) -> tuple\n\
Return the group database entry for the given group name. If\n\
name is not valid, raise KeyError."},
{"getgrall", grp_getgrall, METH_VARARGS,
"getgrall() -> list of tuples\n\
Return a list of all available group entries, in arbitrary order."},
{NULL, NULL} /* sentinel */ {NULL, NULL} /* sentinel */
}; };
static char grp__doc__[] =
"Access to the Unix group database.\n\
\n\
Group entries are reported as 4-tuples containing the following fields\n\
from the group database, in order:\n\
\n\
name - name of the group\n\
passwd - group password (encrypted); often empty\n\
gid - numeric ID of the group\n\
mem - list of members\n\
\n\
The gid is an integer, name and password are strings. (Note that most\n\
users are not explicitly listed as members of the groups they are in\n\
according to the password database. Check both databases to get\n\
complete membership information.)";
DL_EXPORT(void) DL_EXPORT(void)
initgrp() initgrp()
{ {
Py_InitModule("grp", grp_methods); Py_InitModule3("grp", grp_methods, grp__doc__);
} }
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