Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4972 → Rev 4973

/programs/develop/libraries/menuetlibc/src/libc/fsext/Makefile
0,0 → 1,4
THIS_SRCS = fse_open.c fsext.c
 
include $(MENUET_LIBC_TOPDIR)/Make.rules
 
/programs/develop/libraries/menuetlibc/src/libc/fsext/fse_open.c
0,0 → 1,33
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
#include <stdlib.h>
#include <sys/fsext.h>
 
typedef struct FuncList {
struct FuncList *next;
__FSEXT_Function *function;
} FuncList;
 
static FuncList *func_list = 0;
 
int
__FSEXT_add_open_handler(__FSEXT_Function *_function)
{
FuncList *new_func_list = (FuncList *)malloc(sizeof(FuncList));
if (new_func_list == 0)
return 1;
new_func_list->next = func_list;
func_list = new_func_list;
func_list->function = _function;
return 0;
}
 
int
__FSEXT_call_open_handlers(__FSEXT_Fnumber _function_number,
int *rv, /*va_list*/void* _args)
{
FuncList *f;
for (f=func_list; f; f=f->next)
if (f->function(_function_number, rv, _args))
return 1;
return 0;
}
/programs/develop/libraries/menuetlibc/src/libc/fsext/fsext.c
0,0 → 1,62
/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/fsext.h>
#include <libc/bss.h>
#include <libc/dosio.h>
 
static int num_fds;
static __FSEXT_Function **func_list;
static int tmp_ext=0xF000;
 
static void
init(void)
{
static int init_count = -1;
if (init_count == __bss_count)
return;
init_count = __bss_count;
num_fds = 0;
func_list = 0;
}
 
int __FSEXT_alloc_fd(__FSEXT_Function *_function)
{
int fd;
init();
fd=tmp_ext++;
__FSEXT_set_function(fd, _function);
return fd;
}
 
int
__FSEXT_set_function(int _fd, __FSEXT_Function *_function)
{
init();
 
if (_fd < 0)
return 1;
 
if (num_fds <= _fd)
{
int old_fds = num_fds, i;
num_fds = (_fd+256) & ~255;
func_list = (__FSEXT_Function **)realloc(func_list, num_fds * sizeof(__FSEXT_Function *));
if (func_list == 0)
return 1;
for (i=old_fds; i<num_fds; i++)
func_list[i] = 0;
}
func_list[_fd] = _function;
return 0;
}
 
__FSEXT_Function *
__FSEXT_get_function(int _fd)
{
init();
if (_fd < 0 || _fd >= num_fds)
return 0;
return func_list[_fd];
}