Follow our own style guide.
[AROS.git] / arch / all-mingw32 / bsdsocket / bsdsocket_util.c
blobb7e8850d17427c80ed84310c29293a59917b0b28
1 #include <sys/errno.h>
2 #include <string.h>
4 #include "bsdsocket_intern.h"
5 #include "bsdsocket_util.h"
7 void SetError(int error, struct TaskBase *libPtr)
9 switch (libPtr->errnoSize)
11 case 8:
12 *(UQUAD *)libPtr->errnoPtr = (UQUAD)error;
13 break;
15 case 4:
16 *(ULONG *)libPtr->errnoPtr = (ULONG)error;
17 break;
19 case 2:
20 *(UWORD *)libPtr->errnoPtr = (UWORD)error;
21 break;
23 case 1:
24 *(UBYTE *)libPtr->errnoPtr = (UBYTE)error;
25 break;
27 default:
28 D(bug("[SetErrno] Bogus errno size %u for TaskBase 0x%p\n", libPtr->errnoSize, libPtr));
29 break;
33 ULONG SetDTableSize(ULONG size, struct TaskBase *taskBase)
35 struct Socket **old = taskBase->dTable;
36 struct Socket **table;
37 ULONG oldsize = taskBase->dTableSize * sizeof(struct Socket *);
38 ULONG newsize = size * sizeof(struct Socket *);
41 /* FIXME: just a temporary measure */
42 if (size < taskBase->dTableSize)
43 return EMFILE;
45 table = AllocPooled(taskBase->pool, newsize);
47 if (!table)
48 return ENOMEM;
50 memset(table, 0, newsize);
52 if (old)
53 CopyMem(old, table, oldsize);
55 taskBase->dTable = table;
56 taskBase->dTableSize = size;
58 if (old)
59 FreePooled(taskBase->pool, old, oldsize);
61 return 0;
64 int GetFreeFD(struct TaskBase *taskBase)
66 int i;
68 for (i = 0; i < taskBase->dTableSize; i++)
70 if (!taskBase->dTable[i])
71 return i;
74 SetError(EMFILE, taskBase);
75 return -1;
78 struct Socket *GetSocket(int s, struct TaskBase *taskBase)
80 struct Socket *sd;
82 if (s >= taskBase->dTableSize)
84 SetError(ENOTSOCK, taskBase);
85 return NULL;
88 sd = taskBase->dTable[s];
89 if (!sd)
90 SetError(ENOTSOCK, taskBase);
92 return sd;
95 struct WSsockaddr *MakeSockAddr(const struct sockaddr *src, int len, struct TaskBase *taskBase)
97 struct WSsockaddr *sa = AllocPooled(taskBase->pool, len);
99 if (sa)
101 CopyMem(src, sa, len);
102 sa->sa_family = src->sa_family;
104 else
105 SetError(ENOMEM, taskBase);
107 return sa;