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
static int num_fds;
10
static __FSEXT_Function **func_list;
11
static int tmp_ext=0xF000;
12
 
13
static void
14
init(void)
15
{
16
  static int init_count = -1;
17
  if (init_count == __bss_count)
18
    return;
19
  init_count = __bss_count;
20
  num_fds = 0;
21
  func_list = 0;
22
}
23
 
24
int __FSEXT_alloc_fd(__FSEXT_Function *_function)
25
{
26
 int fd;
27
 init();
28
 fd=tmp_ext++;
29
 __FSEXT_set_function(fd, _function);
30
 return fd;
31
}
32
 
33
int
34
__FSEXT_set_function(int _fd, __FSEXT_Function *_function)
35
{
36
  init();
37
 
38
  if (_fd < 0)
39
    return 1;
40
 
41
  if (num_fds <= _fd)
42
  {
43
    int old_fds = num_fds, i;
44
    num_fds = (_fd+256) & ~255;
45
    func_list = (__FSEXT_Function **)realloc(func_list, num_fds * sizeof(__FSEXT_Function *));
46
    if (func_list == 0)
47
      return 1;
48
    for (i=old_fds; i
49
      func_list[i] = 0;
50
  }
51
  func_list[_fd] = _function;
52
  return 0;
53
}
54
 
55
__FSEXT_Function *
56
__FSEXT_get_function(int _fd)
57
{
58
  init();
59
  if (_fd < 0 || _fd >= num_fds)
60
    return 0;
61
  return func_list[_fd];
62
}