LCOV - code coverage report
Current view: directory - src/trusted/desc - nacl_desc_sync_socket.c (source / functions) Found Hit Coverage
Test: coverage.lcov Lines: 58 0 0.0 %
Date: 2012-02-16 Functions: 0 0 -

       1                 : /*
       2                 :  * Copyright (c) 2009 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.  I/O Descriptor / Handle abstraction.
       9                 :  */
      10                 : 
      11                 : #include <stdlib.h>
      12                 : #include <string.h>
      13                 : #include <errno.h>
      14                 : 
      15                 : #include "native_client/src/include/portability.h"
      16                 : 
      17                 : #include "native_client/src/trusted/desc/nacl_desc_base.h"
      18                 : #include "native_client/src/trusted/desc/nacl_desc_sync_socket.h"
      19                 : #include "native_client/src/trusted/desc/nacl_desc_imc.h"
      20                 : 
      21                 : #include "native_client/src/shared/platform/nacl_log.h"
      22                 : #include "native_client/src/shared/platform/nacl_sync.h"
      23                 : #include "native_client/src/shared/platform/nacl_sync_checked.h"
      24                 : 
      25                 : #if NACL_WINDOWS
      26                 : # include "native_client/src/shared/platform/win/xlate_system_error.h"
      27                 : #endif
      28                 : 
      29                 : #include "native_client/src/trusted/service_runtime/include/sys/errno.h"
      30                 : #include "native_client/src/trusted/service_runtime/include/sys/stat.h"
      31                 : 
      32                 : /*
      33                 :  * This file contains the implementation of the NaClDescSyncSocket
      34                 :  * subclass of NaClDesc.
      35                 :  *
      36                 :  * NaClDescSyncSocket is the subclass that wraps base::SyncSocket descriptors.
      37                 :  */
      38                 : 
      39                 : static struct NaClDescVtbl const kNaClDescSyncSocketVtbl;  /* fwd */
      40                 : 
      41                 : int NaClDescSyncSocketCtor(struct NaClDescSyncSocket  *self,
      42               0 :                            NaClHandle                 h) {
      43                 :   int retval;
      44               0 :   retval = NaClDescCtor(&self->base);
      45               0 :   if (!retval) {
      46               0 :     return 0;
      47                 :   }
      48                 : 
      49               0 :   self->h = h;
      50               0 :   self->base.base.vtbl =
      51                 :       (struct NaClRefCountVtbl const *) &kNaClDescSyncSocketVtbl;
      52                 : 
      53               0 :   return retval;
      54                 : }
      55                 : 
      56               0 : static void NaClDescSyncSocketDtor(struct NaClRefCount *vself) {
      57               0 :   struct NaClDescSyncSocket  *self = ((struct NaClDescSyncSocket *) vself);
      58                 : 
      59               0 :   (void) NaClClose(self->h);
      60               0 :   self->h = NACL_INVALID_HANDLE;
      61               0 :   vself->vtbl = (struct NaClRefCountVtbl const *) &kNaClDescVtbl;
      62               0 :   (*vself->vtbl->Dtor)(vself);
      63               0 : }
      64                 : 
      65                 : static int NaClDescSyncSocketFstat(struct NaClDesc          *vself,
      66               0 :                                    struct nacl_abi_stat     *statbuf) {
      67                 :   UNREFERENCED_PARAMETER(vself);
      68                 : 
      69               0 :   memset(statbuf, 0, sizeof *statbuf);
      70               0 :   statbuf->nacl_abi_st_mode = NACL_ABI_S_IFDSOCK;
      71               0 :   return 0;
      72                 : }
      73                 : 
      74                 : static ssize_t NaClDescSyncSocketRead(struct NaClDesc          *vself,
      75                 :                                       void                     *buf,
      76               0 :                                       size_t                   len) {
      77               0 :   struct NaClDescSyncSocket *self = (struct NaClDescSyncSocket *) vself;
      78                 : 
      79               0 :   return NaClDescReadFromHandle(self->h, buf, len);
      80                 : }
      81                 : 
      82                 : static ssize_t NaClDescSyncSocketWrite(struct NaClDesc         *vself,
      83                 :                                        void const              *buf,
      84               0 :                                        size_t                  len) {
      85               0 :   struct NaClDescSyncSocket *self = (struct NaClDescSyncSocket *) vself;
      86                 : 
      87               0 :   return NaClDescWriteToHandle(self->h, buf, len);
      88                 : }
      89                 : 
      90                 : 
      91                 : static int NaClDescSyncSocketExternalizeSize(struct NaClDesc  *vself,
      92                 :                                              size_t           *nbytes,
      93               0 :                                              size_t           *nhandles) {
      94                 :   UNREFERENCED_PARAMETER(vself);
      95               0 :   NaClLog(4, "Entered NaClDescSyncSocketExternalizeSize\n");
      96               0 :   *nbytes = 0;
      97               0 :   *nhandles = 1;
      98                 : 
      99               0 :   return 0;
     100                 : }
     101                 : 
     102                 : static int NaClDescSyncSocketExternalize(struct NaClDesc          *vself,
     103               0 :                                          struct NaClDescXferState *xfer) {
     104               0 :   struct NaClDescSyncSocket *self = ((struct NaClDescSyncSocket *) vself);
     105                 : 
     106               0 :   NaClLog(4, "Entered NaClDescSyncSocketExternalize\n");
     107               0 :   *xfer->next_handle++ = self->h;
     108               0 :   return 0;
     109                 : }
     110                 : 
     111                 : 
     112                 : static struct NaClDescVtbl const kNaClDescSyncSocketVtbl = {
     113                 :   {
     114                 :     NaClDescSyncSocketDtor,
     115                 :   },
     116                 :   NaClDescMapNotImplemented,
     117                 :   NaClDescUnmapUnsafeNotImplemented,
     118                 :   NaClDescUnmapNotImplemented,
     119                 :   NaClDescSyncSocketRead,
     120                 :   NaClDescSyncSocketWrite,
     121                 :   NaClDescSeekNotImplemented,
     122                 :   NaClDescIoctlNotImplemented,
     123                 :   NaClDescSyncSocketFstat,
     124                 :   NaClDescGetdentsNotImplemented,
     125                 :   NACL_DESC_SYNC_SOCKET,
     126                 :   NaClDescSyncSocketExternalizeSize,
     127                 :   NaClDescSyncSocketExternalize,
     128                 :   NaClDescLockNotImplemented,
     129                 :   NaClDescTryLockNotImplemented,
     130                 :   NaClDescUnlockNotImplemented,
     131                 :   NaClDescWaitNotImplemented,
     132                 :   NaClDescTimedWaitAbsNotImplemented,
     133                 :   NaClDescSignalNotImplemented,
     134                 :   NaClDescBroadcastNotImplemented,
     135                 :   NaClDescSendMsgNotImplemented,
     136                 :   NaClDescRecvMsgNotImplemented,
     137                 :   NaClDescConnectAddrNotImplemented,
     138                 :   NaClDescAcceptConnNotImplemented,
     139                 :   NaClDescPostNotImplemented,
     140                 :   NaClDescSemWaitNotImplemented,
     141                 :   NaClDescGetValueNotImplemented,
     142                 : };
     143                 : 
     144                 : 
     145                 : int NaClDescSyncSocketInternalize(
     146                 :     struct NaClDesc               **out_desc,
     147                 :     struct NaClDescXferState      *xfer,
     148               0 :     struct NaClDescQuotaInterface *quota_interface) {
     149                 :   int                       rv;
     150                 :   struct NaClDescSyncSocket *ndssp;
     151                 : 
     152                 :   UNREFERENCED_PARAMETER(quota_interface);
     153               0 :   NaClLog(4, "Entered NaClDescSyncSocketInternalize\n");
     154               0 :   rv = -NACL_ABI_EIO;
     155               0 :   ndssp = NULL;
     156                 : 
     157               0 :   if (xfer->next_handle == xfer->handle_buffer_end) {
     158               0 :     NaClLog(LOG_ERROR,
     159                 :             ("NaClSyncSocketInternalize: no descriptor"
     160                 :              " left in xfer state\n"));
     161               0 :     rv = -NACL_ABI_EIO;
     162               0 :     goto cleanup;
     163                 :   }
     164               0 :   ndssp = malloc(sizeof *ndssp);
     165               0 :   if (NULL == ndssp) {
     166               0 :     NaClLog(LOG_ERROR,
     167                 :             "NaClSyncSocketInternalize: no memory\n");
     168               0 :     rv = -NACL_ABI_ENOMEM;
     169               0 :     goto cleanup;
     170                 :   }
     171               0 :   if (!NaClDescSyncSocketCtor(ndssp, *xfer->next_handle)) {
     172               0 :     NaClLog(LOG_ERROR,
     173                 :             "NaClSyncSocketInternalize: descriptor ctor error\n");
     174               0 :     rv = -NACL_ABI_EIO;
     175               0 :     goto cleanup;
     176                 :   }
     177               0 :   *xfer->next_handle++ = NACL_INVALID_HANDLE;
     178               0 :   *out_desc = (struct NaClDesc *) ndssp;
     179               0 :   rv = 0;
     180                 : 
     181               0 : cleanup:
     182               0 :   if (rv < 0) {
     183               0 :     free(ndssp);
     184                 :   }
     185               0 :   return rv;
     186                 : }

Generated by: LCOV version 1.7