LCOV - code coverage report
Current view: directory - src/trusted/service_runtime - nacl_desc_postmessage.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 40 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                 :  * Subclass of NaClDesc which passes write output data to the browser
       9                 :  * using the reverse channel, to (eventually) show up as PostMessage
      10                 :  * data.
      11                 :  *
      12                 :  * A NaClDescPostMessage object pretends to be a character device, so
      13                 :  * that I/O packages that fstat to determine buffering strategy will
      14                 :  * work correctly.  The only other syscall that it implements is
      15                 :  * write, and the data is sent through the reverse channel interface
      16                 :  * to the browser's JavaScript environment.
      17                 :  */
      18                 : 
      19                 : #include <string.h>
      20                 : 
      21                 : #include "native_client/src/trusted/service_runtime/nacl_desc_postmessage.h"
      22                 : 
      23                 : #include "native_client/src/shared/platform/nacl_check.h"
      24                 : #include "native_client/src/shared/platform/nacl_sync.h"
      25                 : #include "native_client/src/shared/platform/nacl_sync_checked.h"
      26                 : #include "native_client/src/trusted/reverse_service/reverse_control_rpc.h"
      27                 : #include "native_client/src/trusted/service_runtime/include/sys/errno.h"
      28                 : #include "native_client/src/trusted/service_runtime/include/sys/stat.h"
      29                 : #include "native_client/src/trusted/service_runtime/nacl_runtime_host_interface.h"
      30                 : #include "native_client/src/trusted/service_runtime/sel_ldr.h"
      31                 : 
      32                 : 
      33                 : static struct NaClDescVtbl const kNaClDescPostMessageVtbl;  /* fwd */
      34                 : 
      35               0 : int NaClDescPostMessageCtor(struct NaClDescPostMessage      *self,
      36               0 :                             struct NaClRuntimeHostInterface *runtime_host) {
      37               0 :   NaClLog(4, "Entered NaClDescPostMessageCtor\n");
      38               0 :   NACL_VTBL(NaClRefCount, self) = (struct NaClRefCountVtbl const *) NULL;
      39               0 :   if (!NaClDescCtor(&self->base)) {
      40               0 :     NaClLog(4, "Leaving NaClDescPostMessageCtor: failed\n");
      41               0 :     return 0;
      42                 :   }
      43                 :   self->runtime_host = (struct NaClRuntimeHostInterface *)
      44               0 :       NaClRefCountRef((struct NaClRefCount *) runtime_host);
      45               0 :   NACL_VTBL(NaClRefCount, self) =
      46                 :       (struct NaClRefCountVtbl const *) &kNaClDescPostMessageVtbl;
      47               0 :   NaClLog(4, " Write vfptr = %"NACL_PRIxPTR"\n",
      48                 :           (uintptr_t) NACL_VTBL(NaClDesc, self)->Write);
      49               0 :   NaClLog(4, "Leaving NaClDescPostMessageCtor: success\n");
      50               0 :   return 1;
      51               0 : }
      52                 : 
      53               0 : static void NaClDescPostMessageDtor(struct NaClRefCount *vself) {
      54               0 :   struct NaClDescPostMessage  *self = (struct NaClDescPostMessage *) vself;
      55                 : 
      56               0 :   NaClLog(4, "Entered NaClDescPostMessageDtor\n");
      57                 : 
      58               0 :   NaClRefCountUnref((struct NaClRefCount *) self->runtime_host);
      59                 : 
      60               0 :   NACL_VTBL(NaClRefCount, vself) =
      61                 :       (struct NaClRefCountVtbl const *) &kNaClDescVtbl;
      62               0 :   (*NACL_VTBL(NaClRefCount, vself)->Dtor)(vself);
      63               0 :   NaClLog(4, "Leaving NaClDescPostMessageDtor\n");
      64               0 : }
      65                 : 
      66               0 : static ssize_t NaClDescPostMessageWrite(struct NaClDesc *vself,
      67               0 :                                         void const      *buf,
      68               0 :                                         size_t          len) {
      69               0 :   struct NaClDescPostMessage  *self = (struct NaClDescPostMessage *) vself;
      70               0 :   ssize_t                     num_written = 0;
      71                 : 
      72               0 :   NaClLog(4, "Entered NaClDescPostMessageWrite(..., %"NACL_PRIuS")\n", len);
      73               0 :   num_written = (*NACL_VTBL(NaClRuntimeHostInterface, self->runtime_host)->
      74                 :                  PostMessage)(self->runtime_host, buf, len);
      75               0 :   NaClLog(4, "Leaving NaClDescPostMessageWrite:"
      76                 :           " num_written %"NACL_PRIuS"\n", (size_t) num_written);
      77               0 :   return num_written;
      78                 : }
      79                 : 
      80               0 : static int NaClDescPostMessageFstat(struct NaClDesc       *vself,
      81               0 :                                     struct nacl_abi_stat  *statbuf) {
      82               0 :   UNREFERENCED_PARAMETER(vself);
      83                 : 
      84               0 :   memset(statbuf, 0, sizeof *statbuf);
      85               0 :   statbuf->nacl_abi_st_ino = NACL_FAKE_INODE_NUM;
      86               0 :   statbuf->nacl_abi_st_mode = (NACL_ABI_S_IFCHR | NACL_ABI_S_IWUSR);
      87               0 :   statbuf->nacl_abi_st_nlink = 1;
      88               0 :   statbuf->nacl_abi_st_uid = -1;
      89               0 :   statbuf->nacl_abi_st_gid = -1;
      90               0 :   return 0;
      91                 : }
      92                 : 
      93                 : static struct NaClDescVtbl const kNaClDescPostMessageVtbl = {
      94                 :   {
      95                 :     NaClDescPostMessageDtor,
      96                 :   },
      97                 :   NaClDescMapNotImplemented,
      98                 :   NACL_DESC_UNMAP_NOT_IMPLEMENTED
      99                 :   NaClDescReadNotImplemented,
     100                 :   NaClDescPostMessageWrite,
     101                 :   NaClDescSeekNotImplemented,
     102                 :   NaClDescPReadNotImplemented,
     103                 :   NaClDescPWriteNotImplemented,
     104                 :   NaClDescPostMessageFstat,
     105                 :   NaClDescGetdentsNotImplemented,
     106                 :   NaClDescExternalizeSizeNotImplemented,
     107                 :   NaClDescExternalizeNotImplemented,
     108                 :   NaClDescLockNotImplemented,
     109                 :   NaClDescTryLockNotImplemented,
     110                 :   NaClDescUnlockNotImplemented,
     111                 :   NaClDescWaitNotImplemented,
     112                 :   NaClDescTimedWaitAbsNotImplemented,
     113                 :   NaClDescSignalNotImplemented,
     114                 :   NaClDescBroadcastNotImplemented,
     115                 :   NaClDescSendMsgNotImplemented,
     116                 :   NaClDescRecvMsgNotImplemented,
     117                 :   NaClDescLowLevelSendMsgNotImplemented,
     118                 :   NaClDescLowLevelRecvMsgNotImplemented,
     119                 :   NaClDescConnectAddrNotImplemented,
     120                 :   NaClDescAcceptConnNotImplemented,
     121                 :   NaClDescPostNotImplemented,
     122                 :   NaClDescSemWaitNotImplemented,
     123                 :   NaClDescGetValueNotImplemented,
     124                 :   NaClDescSetMetadata,
     125                 :   NaClDescGetMetadata,
     126                 :   NaClDescSetFlags,
     127                 :   NaClDescGetFlags,
     128                 :   NaClDescIsattyNotImplemented,
     129                 :   NACL_DESC_DEVICE_POSTMESSAGE,
     130                 : };

Generated by: LCOV version 1.7