/* ======================================================================== * Copyright 1988-2006 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * * ======================================================================== */ /* * Program: Free storage management routines * * Author: Mark Crispin * Networks and Distributed Computing * Computing & Communications * University of Washington * Administration Building, AG-44 * Seattle, WA 98195 * Internet: MRC@CAC.Washington.EDU * * Date: 1 August 1988 * Last Edited: 30 August 2006 */ /* Get a block of free storage * Accepts: size of desired block * Returns: free storage block */ void *fs_get (size_t size) { blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL); void *data = (*bn) (BLOCK_SENSITIVE,NIL); void *block = malloc (size ? size : (size_t) 1); if (!block) fatal ("Out of memory"); (*bn) (BLOCK_NONSENSITIVE,data); return (block); } /* Resize a block of free storage * Accepts: ** pointer to current block * new size */ void fs_resize (void **block,size_t size) { blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL); void *data = (*bn) (BLOCK_SENSITIVE,NIL); if (!(*block = realloc (*block,size ? size : (size_t) 1))) fatal ("Can't resize memory"); (*bn) (BLOCK_NONSENSITIVE,data); } /* Return a block of free storage * Accepts: ** pointer to free storage block */ void fs_give (void **block) { blocknotify_t bn = (blocknotify_t) mail_parameters (NIL,GET_BLOCKNOTIFY,NIL); void *data = (*bn) (BLOCK_SENSITIVE,NIL); free (*block); *block = NIL; (*bn) (BLOCK_NONSENSITIVE,data); }