diff options
author | Guido van Rossum <guido@python.org> | 1992-11-26 08:54:07 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1992-11-26 08:54:07 (GMT) |
commit | c89705d6975ffb1e4a3764f4f36bab339f969e8f (patch) | |
tree | b4e565a58d410ad3a60ffbe11f94c2567b14365d /Modules | |
parent | df9320f8bcad10431fa103459fcebd4b5430599a (diff) | |
download | cpython-c89705d6975ffb1e4a3764f4f36bab339f969e8f.zip cpython-c89705d6975ffb1e4a3764f4f36bab339f969e8f.tar.gz cpython-c89705d6975ffb1e4a3764f4f36bab339f969e8f.tar.bz2 |
* config.c: Added audioop to lists.
* Makefile: change default source directory
* socketmodule.c: added getsockname and getpeername
* bltinmodule.c: corrected typo in type() error message
* Added new built-in functions str() and repr(): repr(x) == `x`;
str(x) == x if x is a string, otherwise str(x) == repr(x).
* Added joinfields to stropmodule.c (string.join calls joinfields now)
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/config.c.in | 7 | ||||
-rw-r--r-- | Modules/socketmodule.c | 48 | ||||
-rw-r--r-- | Modules/stropmodule.c | 65 |
3 files changed, 120 insertions, 0 deletions
diff --git a/Modules/config.c.in b/Modules/config.c.in index b2ca0eb..7e67961 100644 --- a/Modules/config.c.in +++ b/Modules/config.c.in @@ -136,6 +136,9 @@ extern void initamoeba(); #ifdef USE_AUDIO extern void initaudio(); #endif +#ifdef USE_AUDIOOP +extern void initaudioop(); +#endif #ifdef USE_CD extern void initcd(); #endif @@ -242,6 +245,10 @@ struct { {"audio", initaudio}, #endif +#ifdef USE_AUDIOOP + {"audioop", initaudioop}, +#endif + #ifdef USE_CD {"cd", initcd}, #endif diff --git a/Modules/socketmodule.c b/Modules/socketmodule.c index b1ab96d..bb451eb 100644 --- a/Modules/socketmodule.c +++ b/Modules/socketmodule.c @@ -57,6 +57,8 @@ Socket methods: - s.getsockopt(level, optname) --> flag - s.bind(sockaddr) --> None - s.connect(sockaddr) --> None +- s.getsockname() --> sockaddr +- s.getpeername() --> sockaddr - s.listen(n) --> None - s.makefile(mode) --> file object - s.recv(nbytes) --> string @@ -564,6 +566,50 @@ sock_fileno(s, args) } +/* s.getsockname() method */ + +static object * +sock_getsockname(s, args) + sockobject *s; + object *args; +{ + char addrbuf[256]; + int addrlen, res; + if (!getnoarg(args)) + return NULL; + if (!getsockaddrlen(s, &addrlen)) + return NULL; + BGN_SAVE + res = getsockname(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen); + END_SAVE + if (res < 0) + return socket_error(); + return makesockaddr((struct sockaddr *) addrbuf, addrlen); +} + + +/* s.getpeername() method */ + +static object * +sock_getpeername(s, args) + sockobject *s; + object *args; +{ + char addrbuf[256]; + int addrlen, res; + if (!getnoarg(args)) + return NULL; + if (!getsockaddrlen(s, &addrlen)) + return NULL; + BGN_SAVE + res = getpeername(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen); + END_SAVE + if (res < 0) + return socket_error(); + return makesockaddr((struct sockaddr *) addrbuf, addrlen); +} + + /* s.listen(n) method */ static object * @@ -753,6 +799,8 @@ static struct methodlist sock_methods[] = { {"close", sock_close}, {"connect", sock_connect}, {"fileno", sock_fileno}, + {"getsockname", sock_getsockname}, + {"getpeername", sock_getpeername}, {"listen", sock_listen}, {"makefile", sock_makefile}, {"recv", sock_recv}, diff --git a/Modules/stropmodule.c b/Modules/stropmodule.c index 835c7db..f00cfc7 100644 --- a/Modules/stropmodule.c +++ b/Modules/stropmodule.c @@ -113,6 +113,70 @@ strop_splitfields(self, args) static object * +strop_joinfields(self, args) + object *self; /* Not used */ + object *args; +{ + object *seq, *item, *res; + object * (*getitem) FPROTO((object *, int)); + char *sep, *p; + int seplen, seqlen, reslen, itemlen, i; + + if (!getargs(args, "(Os#)", &seq, &sep, &seplen)) + return NULL; + if (is_listobject(seq)) { + getitem = getlistitem; + seqlen = getlistsize(seq); + } + else if (is_tupleobject(seq)) { + getitem = gettupleitem; + seqlen = gettuplesize(seq); + } + else { + err_setstr(TypeError, "first argument must be list/tuple"); + return NULL; + } + reslen = 0; + for (i = 0; i < seqlen; i++) { + item = getitem(seq, i); + if (!is_stringobject(item)) { + err_setstr(TypeError, + "first argument must be list/tuple of strings"); + return NULL; + } + if (i > 0) + reslen = reslen + seplen; + reslen = reslen + getstringsize(item); + } + if (seqlen == 1) { + /* Optimization if there's only one item */ + item = getitem(seq, 0); + INCREF(item); + return item; + } + res = newsizedstringobject((char *)NULL, reslen); + if (res == NULL) + return NULL; + p = getstringvalue(res); + for (i = 0; i < seqlen; i++) { + item = getitem(seq, i); + if (i > 0) { + memcpy(p, sep, seplen); + p += seplen; + } + itemlen = getstringsize(item); + memcpy(p, getstringvalue(item), itemlen); + p += itemlen; + } + if (p != getstringvalue(res) + reslen) { + err_setstr(SystemError, "strop.joinfields: assertion failed"); + return NULL; + } + return res; +} + + +static object * strop_index(self, args) object *self; /* Not used */ object *args; @@ -290,6 +354,7 @@ strop_swapcase(self, args) static struct methodlist strop_methods[] = { {"index", strop_index}, + {"joinfields", strop_joinfields}, {"lower", strop_lower}, {"split", strop_split}, {"splitfields", strop_splitfields}, |