home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Fresh Fish 8
/
FreshFishVol8-CD1.bin
/
useful
/
comm
/
tcp
/
amitcp
/
src
/
netlib
/
_allocufb.c
next >
Wrap
C/C++ Source or Header
|
1994-03-30
|
1KB
|
64 lines
RCS_ID_C="$Id: _allocufb.c,v 1.2 1994/03/30 07:39:20 jraja Exp $";
/*
* _allocufb.c --- get a free ufb
*
* Author: jraja <Jarno.Rajahalme@hut.fi>
*
* This file is part of the AmiTCP/IP Network Support Library.
*
* Copyright © 1994 AmiTCP/IP Group, <amitcp-group@hut.fi>
* Helsinki University of Technology, Finland.
* All rights reserved.
*
* Created : Tue Mar 22 03:57:55 1994 jraja
* Last modified: Wed Mar 30 10:32:40 1994 jraja
*
*/
#include <ios1.h>
#include <stdlib.h>
#include <errno.h>
/*
* Allocate new ufb, which is returned as return value. The corresponding fd
* is returned via fdp.
*/
struct UFB *
__allocufb(int *fdp)
{
struct UFB *ufb, *last_ufb;
int last_fd = 0;
/*
* find first free ufb
*/
last_ufb = ufb = __ufbs;
while (ufb != NULL && ufb->ufbflg != 0) {
last_ufb = ufb;
last_fd++;
ufb = last_ufb->ufbnxt;
}
/*
* Check if need to create one
*/
if (ufb == NULL) {
if ((ufb = malloc(sizeof(*ufb))) == NULL) {
errno = ENOMEM;
return NULL;
}
ufb->ufbnxt = NULL;
ufb->ufbflg = 0; /* => unused ufb */
if (last_ufb == NULL)
__ufbs = ufb;
else
last_ufb->ufbnxt = ufb;
*fdp = __nufbs++;
}
else
*fdp = last_fd;
return ufb;
}