/*************************************************************************** * Copyright 1995, Technion, Israel Institute of Technology * Electrical Eng, Software Lab. * Author: Michael Veksler. *************************************************************************** * File: shm_fragment.h * Purpose: Data fragments and free list items. Allocate and free blocks. *************************************************************************** */ #ifndef __WINE_SHM_FRAGMENT_H #define __WINE_SHM_FRAGMENT_H #ifdef CONFIG_IPC #include "shm_block.h" #define NIL ((int) 0) /* memory fragment: used or free (when free - it's an item of "free list", * when allocated it contains the data, and it's size) */ struct shm_fragment { int size; /* fragment's size */ /* The type of info depends on fragment's status (free/allocated) */ union info { int next; /* next free fragment */ char data[1]; /* the data */ } info; }; /* setup first item in the free list */ void shm_FragmentInit(struct shm_block *block,REL_PTR first,int size); /* allocate shm fragment. return: offset to data in fragment, or NULL */ REL_PTR shm_FragmentAlloc(struct shm_block *block, int size); /* like shm_FragmentAlloc, returns pointer instead of offset */ char *shm_FragPtrAlloc(struct shm_block *block, int size); /* free shm fragment - according to offset */ void shm_FragmentFree(struct shm_block *block, int ofs); /* free shm fragment - according to pointer */ void shm_FragPtrFree(struct shm_block *block, void *ptr); /* This is used for debugging only */ void shm_print_free_list(struct shm_block *block); #endif /* CONFIG_IPC */ #endif /* __WINE_SHM_FRAGMENT_H */