LCOV - code coverage report
Current view: directory - src/trusted/desc - nacl_desc_semaphore.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 36 0 0.0 %
Date: 2014-06-18 Functions: 0 0 -

       1                 : /*
       2                 :  * Copyright (c) 2012 The Native Client Authors. All rights reserved.
       3                 :  * Use of this source code is governed by a BSD-style license that can be
       4                 :  * found in the LICENSE file.
       5                 :  */
       6                 : 
       7                 : /*
       8                 :  * NaCl Service Runtime.  Semaphore Descriptor / Handle abstraction.
       9                 :  */
      10                 : 
      11                 : #include "native_client/src/include/portability.h"
      12                 : 
      13                 : #include <stdlib.h>
      14                 : #include <string.h>
      15                 : 
      16                 : #include "native_client/src/shared/imc/nacl_imc_c.h"
      17                 : 
      18                 : #include "native_client/src/shared/platform/nacl_host_desc.h"
      19                 : #include "native_client/src/shared/platform/nacl_log.h"
      20                 : #include "native_client/src/shared/platform/nacl_semaphore.h"
      21                 : 
      22                 : #include "native_client/src/trusted/desc/nacl_desc_base.h"
      23                 : #include "native_client/src/trusted/desc/nacl_desc_semaphore.h"
      24                 : 
      25                 : #include "native_client/src/trusted/service_runtime/internal_errno.h"
      26                 : #include "native_client/src/trusted/service_runtime/nacl_config.h"
      27                 : #include "native_client/src/trusted/service_runtime/include/bits/mman.h"
      28                 : #include "native_client/src/trusted/service_runtime/include/sys/errno.h"
      29                 : #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
      30                 : #include "native_client/src/trusted/service_runtime/include/sys/stat.h"
      31                 : 
      32                 : 
      33                 : /*
      34                 :  * This file contains the implementation for the NaClDescSemaphore subclass
      35                 :  * of NaClDesc.
      36                 :  *
      37                 :  * NaClDescSemaphore is the subclass that wraps host-OS semaphore abstractions
      38                 :  */
      39                 : 
      40                 : static struct NaClDescVtbl const kNaClDescSemaphoreVtbl;  /* fwd */
      41                 : 
      42               0 : int NaClDescSemaphoreCtor(struct NaClDescSemaphore  *self, int value) {
      43               0 :   struct NaClDesc *basep = (struct NaClDesc *) self;
      44                 : 
      45               0 :   basep->base.vtbl = (struct NaClRefCountVtbl const *) NULL;
      46               0 :   if (!NaClDescCtor(basep)) {
      47               0 :     return 0;
      48                 :   }
      49               0 :   if (!NaClSemCtor(&self->sem, value)) {
      50               0 :     (*basep->base.vtbl->Dtor)(&basep->base);
      51               0 :     return 0;
      52                 :   }
      53                 : 
      54               0 :   basep->base.vtbl = (struct NaClRefCountVtbl const *) &kNaClDescSemaphoreVtbl;
      55               0 :   return 1;
      56               0 : }
      57                 : 
      58               0 : void NaClDescSemaphoreDtor(struct NaClRefCount *vself) {
      59               0 :   struct NaClDescSemaphore *self = (struct NaClDescSemaphore *) vself;
      60                 : 
      61               0 :   NaClLog(4, "NaClDescSemaphoreDtor(0x%08"NACL_PRIxPTR").\n",
      62                 :           (uintptr_t) vself);
      63               0 :   NaClSemDtor(&self->sem);
      64               0 :   vself->vtbl = (struct NaClRefCountVtbl const *) &kNaClDescVtbl;
      65               0 :   (*vself->vtbl->Dtor)(vself);
      66               0 : }
      67                 : 
      68               0 : int NaClDescSemaphoreFstat(struct NaClDesc          *vself,
      69               0 :                            struct nacl_abi_stat     *statbuf) {
      70               0 :   UNREFERENCED_PARAMETER(vself);
      71                 : 
      72               0 :   memset(statbuf, 0, sizeof *statbuf);
      73               0 :   statbuf->nacl_abi_st_mode = NACL_ABI_S_IFSEMA;
      74               0 :   return 0;
      75                 : }
      76                 : 
      77               0 : int NaClDescSemaphorePost(struct NaClDesc         *vself) {
      78               0 :   struct NaClDescSemaphore *self = (struct NaClDescSemaphore *)vself;
      79               0 :   NaClSyncStatus status = NaClSemPost(&self->sem);
      80                 : 
      81               0 :   return -NaClXlateNaClSyncStatus(status);
      82                 : }
      83                 : 
      84               0 : int NaClDescSemaphoreSemWait(struct NaClDesc          *vself) {
      85               0 :   struct NaClDescSemaphore *self = (struct NaClDescSemaphore *)vself;
      86               0 :   NaClSyncStatus status = NaClSemWait(&self->sem);
      87                 : 
      88               0 :   return -NaClXlateNaClSyncStatus(status);
      89                 : }
      90                 : 
      91               0 : int NaClDescSemaphoreGetValue(struct NaClDesc         *vself) {
      92               0 :   UNREFERENCED_PARAMETER(vself);
      93                 : 
      94               0 :   NaClLog(LOG_ERROR, "SemGetValue is not implemented yet\n");
      95               0 :   return -NACL_ABI_EINVAL;
      96                 :   /*
      97                 :    * TODO(gregoryd): sem_getvalue is not implemented on OSX.
      98                 :    * Remove this syscall or implement it using semctl
      99                 :    */
     100                 : #if 0
     101                 :   struct NaClDescSemaphore *self = (struct NaClDescSemaphore *) vself;
     102                 :   NaClSyncStatus status = NaClSemGetValue(&self->sem);
     103                 :   return NaClXlateNaClSyncStatus(status);
     104                 : #endif
     105                 : }
     106                 : 
     107                 : 
     108                 : static struct NaClDescVtbl const kNaClDescSemaphoreVtbl = {
     109                 :   {
     110                 :     (void (*)(struct NaClRefCount *)) NaClDescSemaphoreDtor,
     111                 :   },
     112                 :   NaClDescMapNotImplemented,
     113                 :   NACL_DESC_UNMAP_NOT_IMPLEMENTED
     114                 :   NaClDescReadNotImplemented,
     115                 :   NaClDescWriteNotImplemented,
     116                 :   NaClDescSeekNotImplemented,
     117                 :   NaClDescPReadNotImplemented,
     118                 :   NaClDescPWriteNotImplemented,
     119                 :   NaClDescSemaphoreFstat,
     120                 :   NaClDescGetdentsNotImplemented,
     121                 :   NaClDescExternalizeSizeNotImplemented,
     122                 :   NaClDescExternalizeNotImplemented,
     123                 :   NaClDescLockNotImplemented,
     124                 :   NaClDescTryLockNotImplemented,
     125                 :   NaClDescUnlockNotImplemented,
     126                 :   NaClDescWaitNotImplemented,
     127                 :   NaClDescTimedWaitAbsNotImplemented,
     128                 :   NaClDescSignalNotImplemented,
     129                 :   NaClDescBroadcastNotImplemented,
     130                 :   NaClDescSendMsgNotImplemented,
     131                 :   NaClDescRecvMsgNotImplemented,
     132                 :   NaClDescLowLevelSendMsgNotImplemented,
     133                 :   NaClDescLowLevelRecvMsgNotImplemented,
     134                 :   NaClDescConnectAddrNotImplemented,
     135                 :   NaClDescAcceptConnNotImplemented,
     136                 :   NaClDescSemaphorePost,
     137                 :   NaClDescSemaphoreSemWait,
     138                 :   NaClDescSemaphoreGetValue,
     139                 :   NaClDescSetMetadata,
     140                 :   NaClDescGetMetadata,
     141                 :   NaClDescSetFlags,
     142                 :   NaClDescGetFlags,
     143                 :   NaClDescIsattyNotImplemented,
     144                 :   NACL_DESC_SEMAPHORE,
     145                 : };

Generated by: LCOV version 1.7