- Added ability to get at strings embedded in the struct

- For the mac, added ability to get at pascal-style strings
This commit is contained in:
Jack Jansen 1994-12-14 13:04:05 +00:00
parent e00637bdcf
commit 599f0d1c2c
2 changed files with 30 additions and 1 deletions

View File

@ -74,6 +74,13 @@ struct memberlist {
#define T_UINT 11
#define T_ULONG 12
/* Added by Jack: strings contained in the structure */
#define T_STRING_INPLACE 13
#ifdef macintosh
#define T_PSTRING 14 /* macintosh pascal-style counted string */
#define T_PSTRING_INPLACE 15
#endif /* macintosh */
/* Readonly flag */
#define READONLY 1
#define RO READONLY /* Shorthand */

View File

@ -108,6 +108,24 @@ getmember(addr, mlist, name)
else
v = newstringobject(*(char**)addr);
break;
case T_STRING_INPLACE:
v = newstringobject((char*)addr);
break;
#ifdef macintosh
case T_PSTRING:
if (*(char**)addr == NULL) {
INCREF(None);
v = None;
}
else
v = newsizedstringobject((*(char**)addr)+1,
**(unsigned char**)addr);
break;
case T_PSTRING_INPLACE:
v = newsizedstringobject(((char*)addr)+1,
*(unsigned char*)addr);
break;
#endif /* macintosh */
case T_CHAR:
v = newsizedstringobject((char*)addr, 1);
break;
@ -140,7 +158,11 @@ setmember(addr, mlist, name, v)
for (l = mlist; l->name != NULL; l++) {
if (strcmp(l->name, name) == 0) {
#ifdef macintosh
if (l->readonly || l->type == T_STRING || l->type == T_PSTRING) {
#else
if (l->readonly || l->type == T_STRING ) {
#endif /* macintosh */
err_setstr(TypeError, "readonly attribute");
return -1;
}