4 #include "bsdsocket_intern.h"
5 #include "bsdsocket_util.h"
7 void SetError(int error
, struct TaskBase
*libPtr
)
9 switch (libPtr
->errnoSize
)
12 *(UQUAD
*)libPtr
->errnoPtr
= (UQUAD
)error
;
16 *(ULONG
*)libPtr
->errnoPtr
= (ULONG
)error
;
20 *(UWORD
*)libPtr
->errnoPtr
= (UWORD
)error
;
24 *(UBYTE
*)libPtr
->errnoPtr
= (UBYTE
)error
;
28 D(bug("[SetErrno] Bogus errno size %u for TaskBase 0x%p\n", libPtr
->errnoSize
, libPtr
));
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
)
45 table
= AllocPooled(taskBase
->pool
, newsize
);
50 memset(table
, 0, newsize
);
53 CopyMem(old
, table
, oldsize
);
55 taskBase
->dTable
= table
;
56 taskBase
->dTableSize
= size
;
59 FreePooled(taskBase
->pool
, old
, oldsize
);
64 int GetFreeFD(struct TaskBase
*taskBase
)
68 for (i
= 0; i
< taskBase
->dTableSize
; i
++)
70 if (!taskBase
->dTable
[i
])
74 SetError(EMFILE
, taskBase
);
78 struct Socket
*GetSocket(int s
, struct TaskBase
*taskBase
)
82 if (s
>= taskBase
->dTableSize
)
84 SetError(ENOTSOCK
, taskBase
);
88 sd
= taskBase
->dTable
[s
];
90 SetError(ENOTSOCK
, taskBase
);
95 struct WSsockaddr
*MakeSockAddr(const struct sockaddr
*src
, int len
, struct TaskBase
*taskBase
)
97 struct WSsockaddr
*sa
= AllocPooled(taskBase
->pool
, len
);
101 CopyMem(src
, sa
, len
);
102 sa
->sa_family
= src
->sa_family
;
105 SetError(ENOMEM
, taskBase
);