/** * @file */ /* * Copyright (c) 2016 Gedare Bloom. * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.org/license/LICENSE. */ #if HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include int shm_unlink( const char *name ) { Objects_Get_by_name_error obj_err; int err = 0; POSIX_Shm_Control *shm; shm = _POSIX_Shm_Get_by_name( name, 0, &obj_err ); switch ( obj_err ) { case OBJECTS_GET_BY_NAME_INVALID_NAME: err = ENOENT; break; case OBJECTS_GET_BY_NAME_NAME_TOO_LONG: err = ENAMETOOLONG; break; case OBJECTS_GET_BY_NAME_NO_OBJECT: default: _Objects_Close( &_POSIX_Shm_Information, &shm->Object ); if ( shm->reference_count == 0 ) { /* TODO: need to make sure this counts mmaps too! */ /* only remove the shm object if no references exist to it. */ _POSIX_Shm_Free( shm ); } break; } if ( err != 0 ) rtems_set_errno_and_return_minus_one( err ); return 0; }