[Python-checkins] CVS: python/dist/src/Modules grpmodule.c,2.16,2.17 pwdmodule.c,1.26,1.27
Martin v. L?wis
loewis@users.sourceforge.net
Fri, 01 Mar 2002 02:38:47 -0800
Update of /cvsroot/python/python/dist/src/Modules
In directory usw-pr-cvs1:/tmp/cvs-serv28176/Modules
Modified Files:
grpmodule.c pwdmodule.c
Log Message:
Patch #523268, #522027: return enhanced tuples.
Index: grpmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/grpmodule.c,v
retrieving revision 2.16
retrieving revision 2.17
diff -C2 -d -r2.16 -r2.17
*** grpmodule.c 1 Feb 2002 15:46:29 -0000 2.16
--- grpmodule.c 1 Mar 2002 10:38:44 -0000 2.17
***************
*** 3,17 ****
#include "Python.h"
#include <sys/types.h>
#include <grp.h>
static PyObject *
mkgrent(struct group *p)
{
! PyObject *v, *w;
char **member;
if ((w = PyList_New(0)) == NULL) {
return NULL;
}
--- 3,47 ----
#include "Python.h"
+ #include "structseq.h"
#include <sys/types.h>
#include <grp.h>
+ static PyStructSequence_Field struct_group_type_fields[] = {
+ {"gr_name", "group name"},
+ {"gr_passwd", "password"},
+ {"gr_gid", "group id"},
+ {"gr_mem", "group memebers"},
+ {0}
+ };
+
+ static char struct_group__doc__[] =
+ "grp.struct_group: Results from getgr*() routines.\n\n\
+ This object may be accessed either as a tuple of\n\
+ (gr_name,gr_passwd,gr_gid,gr_mem)\n\
+ or via the object attributes as named in the above tuple.\n";
+
+ static PyStructSequence_Desc struct_group_type_desc = {
+ "grp.struct_group",
+ struct_group__doc__,
+ struct_group_type_fields,
+ 4,
+ };
+
+
+ static PyTypeObject StructGrpType;
static PyObject *
mkgrent(struct group *p)
{
! int setIndex = 0;
! PyObject *v = PyStructSequence_New(&StructGrpType), *w;
char **member;
+
+ if (v == NULL)
+ return NULL;
+
if ((w = PyList_New(0)) == NULL) {
+ Py_DECREF(v);
return NULL;
}
***************
*** 21,34 ****
Py_XDECREF(x);
Py_DECREF(w);
return NULL;
}
Py_DECREF(x);
}
! v = Py_BuildValue("(sslO)",
! p->gr_name,
! p->gr_passwd,
! (long)p->gr_gid,
! w);
! Py_DECREF(w);
return v;
}
--- 51,73 ----
Py_XDECREF(x);
Py_DECREF(w);
+ Py_DECREF(v);
return NULL;
}
Py_DECREF(x);
}
!
! #define SET(i,val) PyStructSequence_SET_ITEM(v, i, val)
! SET(setIndex++, PyString_FromString(p->gr_name));
! SET(setIndex++, PyString_FromString(p->gr_passwd));
! SET(setIndex++, PyInt_FromLong((long) p->gr_gid));
! SET(setIndex++, w);
! #undef SET
!
! if (PyErr_Occurred()) {
! Py_DECREF(v);
! Py_DECREF(w);
! return NULL;
! }
!
return v;
}
***************
*** 121,124 ****
initgrp(void)
{
! Py_InitModule3("grp", grp_methods, grp__doc__);
}
--- 160,167 ----
initgrp(void)
{
! PyObject *m, *d;
! m = Py_InitModule3("grp", grp_methods, grp__doc__);
! d = PyModule_GetDict(m);
! PyStructSequence_InitType(&StructGrpType, &struct_group_type_desc);
! PyDict_SetItemString(d, "struct_group", (PyObject *) &StructGrpType);
}
Index: pwdmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/pwdmodule.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** pwdmodule.c 1 Feb 2002 15:46:29 -0000 1.26
--- pwdmodule.c 1 Mar 2002 10:38:44 -0000 1.27
***************
*** 3,10 ****
--- 3,35 ----
#include "Python.h"
+ #include "structseq.h"
#include <sys/types.h>
#include <pwd.h>
+ static PyStructSequence_Field struct_pwd_type_fields[] = {
+ {"pw_name", "user name"},
+ {"pw_passwd", "password"},
+ {"pw_uid", "user id"},
+ {"pw_gid", "group id"},
+ {"pw_gecos", "real name"},
+ {"pw_dir", "home directory"},
+ {"pw_shell", "shell program"},
+ {0}
+ };
+
+ static char struct_passwd__doc__[] =
+ "pwd.struct_passwd: Results from getpw*() routines.\n\n\
+ This object may be accessed either as a tuple of\n\
+ (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\
+ or via the object attributes as named in the above tuple.\n";
+
+ static PyStructSequence_Desc struct_pwd_type_desc = {
+ "pwd.struct_passwd",
+ struct_passwd__doc__,
+ struct_pwd_type_fields,
+ 7,
+ };
+
static char pwd__doc__ [] = "\
This module provides access to the Unix password database.\n\
***************
*** 18,37 ****
static PyObject *
mkpwent(struct passwd *p)
{
! return Py_BuildValue(
! "(ssllsss)",
! p->pw_name,
! p->pw_passwd,
! (long)p->pw_uid,
! (long)p->pw_gid,
! p->pw_gecos,
! p->pw_dir,
! p->pw_shell);
}
static char pwd_getpwuid__doc__[] = "\
! getpwuid(uid) -> entry\n\
Return the password database entry for the given numeric user ID.\n\
See pwd.__doc__ for more on password database entries.";
--- 43,80 ----
+ static PyTypeObject StructPwdType;
+
static PyObject *
mkpwent(struct passwd *p)
{
! int setIndex = 0;
! PyObject *v = PyStructSequence_New(&StructPwdType);
! if (v == NULL)
! return NULL;
!
! #define SETI(i,val) PyStructSequence_SET_ITEM(v, i, PyInt_FromLong((long) val))
! #define SETS(i,val) PyStructSequence_SET_ITEM(v, i, PyString_FromString(val))
!
! SETS(setIndex++, p->pw_name);
! SETS(setIndex++, p->pw_passwd);
! SETI(setIndex++, p->pw_uid);
! SETI(setIndex++, p->pw_gid);
! SETS(setIndex++, p->pw_gecos);
! SETS(setIndex++, p->pw_dir);
! SETS(setIndex++, p->pw_shell);
!
! #undef SETS
! #undef SETI
!
! if (PyErr_Occurred()) {
! Py_XDECREF(v);
! return NULL;
! }
!
! return v;
}
static char pwd_getpwuid__doc__[] = "\
! getpwuid(uid) -> (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\
Return the password database entry for the given numeric user ID.\n\
See pwd.__doc__ for more on password database entries.";
***************
*** 52,56 ****
static char pwd_getpwnam__doc__[] = "\
! getpwnam(name) -> entry\n\
Return the password database entry for the given user name.\n\
See pwd.__doc__ for more on password database entries.";
--- 95,99 ----
static char pwd_getpwnam__doc__[] = "\
! getpwnam(name) -> (pw_name,pw_passwd,pw_uid,pw_gid,pw_gecos,pw_dir,pw_shell)\n\
Return the password database entry for the given user name.\n\
See pwd.__doc__ for more on password database entries.";
***************
*** 113,117 ****
initpwd(void)
{
! Py_InitModule4("pwd", pwd_methods, pwd__doc__,
(PyObject *)NULL, PYTHON_API_VERSION);
}
--- 156,164 ----
initpwd(void)
{
! PyObject *m, *d;
! m = Py_InitModule4("pwd", pwd_methods, pwd__doc__,
(PyObject *)NULL, PYTHON_API_VERSION);
+ d = PyModule_GetDict(m);
+ PyStructSequence_InitType(&StructPwdType, &struct_pwd_type_desc);
+ PyDict_SetItemString(d, "struct_pwent", (PyObject *) &StructPwdType);
}