1/* 2 * Copyright 2007, Ingo Weinhold, bonefish@cs.tu-berlin.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6#include "compatibility.h" 7 8#include <string.h> 9 10#include <OS.h> 11 12#include "fssh_errors.h" 13#include "fssh_os.h" 14 15 16static void 17copy_sem_info(fssh_sem_info* info, const sem_info* systemInfo) 18{ 19 info->sem = systemInfo->sem; 20 info->team = systemInfo->team; 21 strcpy(info->name, systemInfo->name); 22 info->count = systemInfo->count; 23 info->latest_holder = systemInfo->latest_holder; 24} 25 26 27// #pragma mark - 28 29 30fssh_sem_id 31fssh_create_sem(int32_t count, const char *name) 32{ 33 return create_sem(count, name); 34} 35 36 37fssh_status_t 38fssh_delete_sem(fssh_sem_id id) 39{ 40 return delete_sem(id); 41} 42 43 44fssh_status_t 45fssh_acquire_sem(fssh_sem_id id) 46{ 47 return acquire_sem(id); 48} 49 50 51fssh_status_t 52fssh_acquire_sem_etc(fssh_sem_id id, int32_t count, uint32_t flags, 53 fssh_bigtime_t timeout) 54{ 55 return acquire_sem_etc(id, count, flags, timeout); 56} 57 58 59fssh_status_t 60fssh_release_sem(fssh_sem_id id) 61{ 62 return release_sem(id); 63} 64 65 66fssh_status_t 67fssh_release_sem_etc(fssh_sem_id id, int32_t count, uint32_t flags) 68{ 69 return release_sem_etc(id, count, flags); 70} 71 72 73fssh_status_t 74fssh_get_sem_count(fssh_sem_id id, int32_t *threadCount) 75{ 76 return get_sem_count(id, (int32*)threadCount); 77} 78 79 80fssh_status_t 81fssh_set_sem_owner(fssh_sem_id id, fssh_team_id team) 82{ 83 // return set_sem_owner(id, team); 84 // The FS shell is the kernel and no other teams exist. 85 return FSSH_B_OK; 86} 87 88 89fssh_status_t 90_fssh_get_sem_info(fssh_sem_id id, struct fssh_sem_info *info, 91 fssh_size_t infoSize) 92{ 93 sem_info systemInfo; 94 status_t result = get_sem_info(id, &systemInfo); 95 if (result != B_OK) 96 return result; 97 98 copy_sem_info(info, &systemInfo); 99 100 return FSSH_B_OK; 101} 102 103 104fssh_status_t 105_fssh_get_next_sem_info(fssh_team_id team, int32_t *cookie, 106 struct fssh_sem_info *info, fssh_size_t infoSize) 107{ 108 sem_info systemInfo; 109 status_t result = get_next_sem_info(team, (int32*)cookie, &systemInfo); 110 if (result != B_OK) 111 return result; 112 113 copy_sem_info(info, &systemInfo); 114 115 return FSSH_B_OK; 116} 117 118