Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c89705d

Browse files
committed
* 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)
1 parent df9320f commit c89705d

4 files changed

Lines changed: 152 additions & 1 deletion

File tree

Modules/config.c.in

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,9 @@ extern void initamoeba();
136136
#ifdef USE_AUDIO
137137
extern void initaudio();
138138
#endif
139+
#ifdef USE_AUDIOOP
140+
extern void initaudioop();
141+
#endif
139142
#ifdef USE_CD
140143
extern void initcd();
141144
#endif
@@ -242,6 +245,10 @@ struct {
242245
{"audio", initaudio},
243246
#endif
244247

248+
#ifdef USE_AUDIOOP
249+
{"audioop", initaudioop},
250+
#endif
251+
245252
#ifdef USE_CD
246253
{"cd", initcd},
247254
#endif

Modules/socketmodule.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ Socket methods:
5757
- s.getsockopt(level, optname) --> flag
5858
- s.bind(sockaddr) --> None
5959
- s.connect(sockaddr) --> None
60+
- s.getsockname() --> sockaddr
61+
- s.getpeername() --> sockaddr
6062
- s.listen(n) --> None
6163
- s.makefile(mode) --> file object
6264
- s.recv(nbytes) --> string
@@ -564,6 +566,50 @@ sock_fileno(s, args)
564566
}
565567

566568

569+
/* s.getsockname() method */
570+
571+
static object *
572+
sock_getsockname(s, args)
573+
sockobject *s;
574+
object *args;
575+
{
576+
char addrbuf[256];
577+
int addrlen, res;
578+
if (!getnoarg(args))
579+
return NULL;
580+
if (!getsockaddrlen(s, &addrlen))
581+
return NULL;
582+
BGN_SAVE
583+
res = getsockname(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
584+
END_SAVE
585+
if (res < 0)
586+
return socket_error();
587+
return makesockaddr((struct sockaddr *) addrbuf, addrlen);
588+
}
589+
590+
591+
/* s.getpeername() method */
592+
593+
static object *
594+
sock_getpeername(s, args)
595+
sockobject *s;
596+
object *args;
597+
{
598+
char addrbuf[256];
599+
int addrlen, res;
600+
if (!getnoarg(args))
601+
return NULL;
602+
if (!getsockaddrlen(s, &addrlen))
603+
return NULL;
604+
BGN_SAVE
605+
res = getpeername(s->sock_fd, (struct sockaddr *) addrbuf, &addrlen);
606+
END_SAVE
607+
if (res < 0)
608+
return socket_error();
609+
return makesockaddr((struct sockaddr *) addrbuf, addrlen);
610+
}
611+
612+
567613
/* s.listen(n) method */
568614

569615
static object *
@@ -753,6 +799,8 @@ static struct methodlist sock_methods[] = {
753799
{"close", sock_close},
754800
{"connect", sock_connect},
755801
{"fileno", sock_fileno},
802+
{"getsockname", sock_getsockname},
803+
{"getpeername", sock_getpeername},
756804
{"listen", sock_listen},
757805
{"makefile", sock_makefile},
758806
{"recv", sock_recv},

Modules/stropmodule.c

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,70 @@ strop_splitfields(self, args)
112112
}
113113

114114

115+
static object *
116+
strop_joinfields(self, args)
117+
object *self; /* Not used */
118+
object *args;
119+
{
120+
object *seq, *item, *res;
121+
object * (*getitem) FPROTO((object *, int));
122+
char *sep, *p;
123+
int seplen, seqlen, reslen, itemlen, i;
124+
125+
if (!getargs(args, "(Os#)", &seq, &sep, &seplen))
126+
return NULL;
127+
if (is_listobject(seq)) {
128+
getitem = getlistitem;
129+
seqlen = getlistsize(seq);
130+
}
131+
else if (is_tupleobject(seq)) {
132+
getitem = gettupleitem;
133+
seqlen = gettuplesize(seq);
134+
}
135+
else {
136+
err_setstr(TypeError, "first argument must be list/tuple");
137+
return NULL;
138+
}
139+
reslen = 0;
140+
for (i = 0; i < seqlen; i++) {
141+
item = getitem(seq, i);
142+
if (!is_stringobject(item)) {
143+
err_setstr(TypeError,
144+
"first argument must be list/tuple of strings");
145+
return NULL;
146+
}
147+
if (i > 0)
148+
reslen = reslen + seplen;
149+
reslen = reslen + getstringsize(item);
150+
}
151+
if (seqlen == 1) {
152+
/* Optimization if there's only one item */
153+
item = getitem(seq, 0);
154+
INCREF(item);
155+
return item;
156+
}
157+
res = newsizedstringobject((char *)NULL, reslen);
158+
if (res == NULL)
159+
return NULL;
160+
p = getstringvalue(res);
161+
for (i = 0; i < seqlen; i++) {
162+
item = getitem(seq, i);
163+
if (i > 0) {
164+
memcpy(p, sep, seplen);
165+
p += seplen;
166+
}
167+
itemlen = getstringsize(item);
168+
memcpy(p, getstringvalue(item), itemlen);
169+
p += itemlen;
170+
}
171+
if (p != getstringvalue(res) + reslen) {
172+
err_setstr(SystemError, "strop.joinfields: assertion failed");
173+
return NULL;
174+
}
175+
return res;
176+
}
177+
178+
115179
static object *
116180
strop_index(self, args)
117181
object *self; /* Not used */
@@ -290,6 +354,7 @@ strop_swapcase(self, args)
290354

291355
static struct methodlist strop_methods[] = {
292356
{"index", strop_index},
357+
{"joinfields", strop_joinfields},
293358
{"lower", strop_lower},
294359
{"split", strop_split},
295360
{"splitfields", strop_splitfields},

Python/bltinmodule.c

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,13 +601,42 @@ builtin_reload(self, v)
601601
return reload_module(v);
602602
}
603603

604+
static object *
605+
builtin_repr(self, v)
606+
object *self;
607+
object *v;
608+
{
609+
if (v == NULL) {
610+
err_badarg();
611+
return NULL;
612+
}
613+
return reprobject(v);
614+
}
615+
616+
static object *
617+
builtin_str(self, v)
618+
object *self;
619+
object *v;
620+
{
621+
if (v == NULL) {
622+
err_badarg();
623+
return NULL;
624+
}
625+
if (is_stringobject(v)) {
626+
INCREF(v);
627+
return v;
628+
}
629+
else
630+
return reprobject(v);
631+
}
632+
604633
static object *
605634
builtin_type(self, v)
606635
object *self;
607636
object *v;
608637
{
609638
if (v == NULL) {
610-
err_setstr(TypeError, "type() requres an argument");
639+
err_setstr(TypeError, "type() requires an argument");
611640
return NULL;
612641
}
613642
v = (object *)v->ob_type;
@@ -642,7 +671,9 @@ static struct methodlist builtin_methods[] = {
642671
{"range", builtin_range},
643672
{"raw_input", builtin_raw_input},
644673
{"reload", builtin_reload},
674+
{"repr", builtin_repr},
645675
{"setattr", builtin_setattr},
676+
{"str", builtin_str},
646677
{"type", builtin_type},
647678
{NULL, NULL},
648679
};

0 commit comments

Comments
 (0)