struct servent* getservent_r(struct res_static* rs) { constchar* p; constchar* q; int namelen; int nn,count; int total = 0; int port; char* p2;
p = rs->servent_ptr; if (p == NULL)
p = _services; elseif (p[0] == 0) return NULL;
/* first compute the total size */
namelen = p[0];
total += namelen + 1;
q = p + 1 + namelen + 3; /* skip name + port + proto */
count = q[0]; /* get aliascount */
q += 1;
total += (count+1)*sizeof(char*); for (nn = 0; nn < count; nn++) { int len2 = q[0];
total += 1 + len2;
q += 1 + len2;
}
/* reallocate the thread-specific servent struct */
p2 = realloc( (char*)rs->servent.s_aliases, total ); if (p2 == NULL) return NULL;
/* now write to it */
rs->servent.s_aliases = (char**) p2;
p2 += (count+1)*sizeof(char*);
rs->servent.s_name = p2;
p2 += namelen + 1;
rs->servent.s_proto = p2;
/* copy name + port + setup protocol */
memcpy( rs->servent.s_name, p+1, namelen );
rs->servent.s_name[namelen] = 0;
p += 1 + namelen;
/* s_port must be in network byte order */
port = ((((unsignedchar*)p)[0] << 8) |
((unsignedchar*)p)[1]);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.