Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4973 right-hear 1
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
2
#include 
3
#include 
4
#include 
5
#include 
6
#include 
7
#include 
8
 
9
FILE *__alloc_file(void)
10
{
11
  __file_rec *fr = __file_rec_list;
12
  __file_rec **last_fr = &__file_rec_list;
13
  FILE *rv=0;
14
  int i;
15
 
16
  /* Try to find an empty slot */
17
  while (fr)
18
  {
19
    last_fr = &(fr->next);
20
 
21
    /* If one of the existing slots is available, return it */
22
    for (i=0; icount; i++)
23
      if (fr->files[i]->_flag == 0)
24
	return fr->files[i];
25
 
26
    /* If this one is full, go to the next */
27
    if (fr->count == __FILE_REC_MAX)
28
      fr = fr->next;
29
    else
30
      /* it isn't full, we can add to it */
31
      break;
32
  }
33
  if (!fr)
34
  {
35
    /* add another one to the end, make it empty */
36
    fr = *last_fr = (__file_rec *)malloc(sizeof(__file_rec));
37
    if (fr == 0)
38
      return 0;
39
    fr->next = 0;
40
    fr->count = 0;
41
  }
42
  /* fr is a pointer to a rec with empty slots in it */
43
  rv = fr->files[fr->count] = (FILE *)malloc(sizeof(FILE));
44
  if (rv == 0)
45
    return 0;
46
  memset(rv, 0, sizeof(FILE));
47
  fr->count ++;
48
  return rv;
49
}