+ * Networking/Socket stuff
+ */
+
+/* This should really be part of the newlib _reent structure */
+int h_errno;
+
+char *inet_ntoa(struct in_addr in) {
+ static char buf[18];
+ const unsigned char *p = (void*) ∈
+ snprintf(buf,sizeof(buf),"%u.%u.%u.%u",p[0],p[1],p[2],p[3]);
+ return buf;
+}
+
+struct servent *getservbyname(const char *name,const char *proto) {
+ return NULL;
+}
+
+static const char *h_errlist[] = { "No Error","Unknown host", "Host name lookup failure","Unknown server error","No address associated with name" };
+
+const char *hstrerror(int err) {
+ if(err < 0 || err > 4) return "Unknown Error";
+ return h_errlist[err];
+}
+
+void herror(const char *string) {
+ fprintf(stderr,"%s: %s\n",string,hstrerror(h_errno));
+}
+
+extern int _resolve_hostname(const char *, char *buf, size_t *size);
+
+struct hostent *gethostbyname(const char *hostname) {
+#define MAX_ADDRS 256
+ static struct hostent hostent;
+ static char saved_hostname[128];
+ static char *addr_list[MAX_ADDRS+1];
+ static char addr_list_buf[MAX_ADDRS*sizeof(struct in_addr)];
+ static char *aliases[1];
+
+ unsigned char buf[MAX_ADDRS*sizeof(struct in_addr)];
+ size_t size = sizeof(buf);
+ int err,i,n=0;
+
+ err = _resolve_hostname(hostname,buf,&size);
+ if(err != 0) { h_errno = err; return NULL; }
+
+ memcpy(addr_list_buf,buf,size);
+ for(i=0;i<size;i += sizeof(struct in_addr)) addr_list[n++] = &addr_list_buf[i];
+ addr_list[n] = NULL;
+ strncpy(saved_hostname,hostname,sizeof(saved_hostname));
+ aliases[0] = NULL;
+
+ hostent.h_name = saved_hostname;
+ hostent.h_aliases = aliases;
+ hostent.h_addrtype = AF_INET;
+ hostent.h_length = sizeof(struct in_addr);
+ hostent.h_addr_list = addr_list;
+
+ return &hostent;
+}
+
+/*