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

Skip to content

Commit a3d78fb

Browse files
committed
* posixmodule.c: added set{uid,gid}.
* {tuple,list,mapping,array}object.c: call printobject with 0 for flags * compile.c (parsestr): use quote instead of '\'' at one crucial point * arraymodule.c (array_getattr): Added __members__ attribute
1 parent b2e358d commit a3d78fb

7 files changed

Lines changed: 51 additions & 9 deletions

File tree

Modules/arraymodule.c

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -993,6 +993,18 @@ array_getattr(a, name)
993993
if (strcmp(name, "itemsize") == 0) {
994994
return newintobject((long)a->ob_descr->itemsize);
995995
}
996+
if (strcmp(name, "__members__") == 0) {
997+
object *list = newlistobject(2);
998+
if (list) {
999+
setlistitem(list, 0, newstringobject("typecode"));
1000+
setlistitem(list, 1, newstringobject("itemsize"));
1001+
if (err_occurred()) {
1002+
DECREF(list);
1003+
list = NULL;
1004+
}
1005+
}
1006+
return list;
1007+
}
9961008
return findmethod(array_methods, (object *)a, name);
9971009
}
9981010

@@ -1013,7 +1025,7 @@ array_print(a, fp, flags)
10131025
if (a->ob_descr->typecode == 'c') {
10141026
fprintf(fp, "array('c', ");
10151027
v = array_tostring(a, (object *)NULL);
1016-
ok = printobject(v, fp, flags);
1028+
ok = printobject(v, fp, 0);
10171029
XDECREF(v);
10181030
fprintf(fp, ")");
10191031
return ok;
@@ -1023,7 +1035,7 @@ array_print(a, fp, flags)
10231035
if (i > 0)
10241036
fprintf(fp, ", ");
10251037
v = (a->ob_descr->getitem)(a, i);
1026-
ok = printobject(v, fp, flags);
1038+
ok = printobject(v, fp, 0);
10271039
XDECREF(v);
10281040
}
10291041
fprintf(fp, "])");

Modules/posixmodule.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -865,6 +865,34 @@ posix_popen(self, args)
865865
return newopenfileobject(fp, name, mode, pclose);
866866
}
867867

868+
static object *
869+
posix_setuid(self, args)
870+
object *self;
871+
object *args;
872+
{
873+
int uid;
874+
if (!getargs(args, "i", &uid))
875+
return NULL;
876+
if (setuid(uid) < 0)
877+
return posix_error();
878+
INCREF(None);
879+
return None;
880+
}
881+
882+
static object *
883+
posix_setgid(self, args)
884+
object *self;
885+
object *args;
886+
{
887+
int gid;
888+
if (!getargs(args, "i", &gid))
889+
return NULL;
890+
if (setgid(gid) < 0)
891+
return posix_error();
892+
INCREF(None);
893+
return None;
894+
}
895+
868896
static object *
869897
posix_waitpid(self, args)
870898
object *self;
@@ -1288,6 +1316,8 @@ static struct methodlist posix_methods[] = {
12881316
{"getuid", posix_getuid},
12891317
{"kill", posix_kill},
12901318
{"popen", posix_popen},
1319+
{"setuid", posix_setuid},
1320+
{"setgid", posix_setgid},
12911321
{"setpgrp", posix_setpgrp},
12921322
{"wait", posix_wait},
12931323
{"waitpid", posix_waitpid},

Objects/dictobject.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,10 @@ mapping_print(mp, fp, flags)
395395
if (ep->me_value != NULL) {
396396
if (any++ > 0)
397397
fprintf(fp, ", ");
398-
if (printobject((object *)ep->me_key, fp, flags) != 0)
398+
if (printobject((object *)ep->me_key, fp, 0) != 0)
399399
return -1;
400400
fprintf(fp, ": ");
401-
if (printobject(ep->me_value, fp, flags) != 0)
401+
if (printobject(ep->me_value, fp, 0) != 0)
402402
return -1;
403403
}
404404
}

Objects/listobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ list_print(op, fp, flags)
200200
for (i = 0; i < op->ob_size; i++) {
201201
if (i > 0)
202202
fprintf(fp, ", ");
203-
if (printobject(op->ob_item[i], fp, flags) != 0)
203+
if (printobject(op->ob_item[i], fp, 0) != 0)
204204
return -1;
205205
}
206206
fprintf(fp, "]");

Objects/mappingobject.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,10 +395,10 @@ mapping_print(mp, fp, flags)
395395
if (ep->me_value != NULL) {
396396
if (any++ > 0)
397397
fprintf(fp, ", ");
398-
if (printobject((object *)ep->me_key, fp, flags) != 0)
398+
if (printobject((object *)ep->me_key, fp, 0) != 0)
399399
return -1;
400400
fprintf(fp, ": ");
401-
if (printobject(ep->me_value, fp, flags) != 0)
401+
if (printobject(ep->me_value, fp, 0) != 0)
402402
return -1;
403403
}
404404
}

Objects/tupleobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ tupleprint(op, fp, flags)
167167
for (i = 0; i < op->ob_size; i++) {
168168
if (i > 0)
169169
fprintf(fp, ", ");
170-
if (printobject(op->ob_item[i], fp, flags) != 0)
170+
if (printobject(op->ob_item[i], fp, 0) != 0)
171171
return -1;
172172
}
173173
if (op->ob_size == 1)

Python/compile.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,7 @@ parsestr(s)
529529
return newsizedstringobject(s, len);
530530
v = newsizedstringobject((char *)NULL, len);
531531
p = buf = getstringvalue(v);
532-
while (*s != '\0' && *s != '\'') {
532+
while (*s != '\0' && *s != quote) {
533533
if (*s != '\\') {
534534
*p++ = *s++;
535535
continue;

0 commit comments

Comments
 (0)