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

       1                 : /*
       2                 :  * Copyright (c) 2014 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                 : #include "native_client/src/trusted/desc/nacl_desc_file_info.h"
       8                 : 
       9                 : #include "native_client/src/include/portability.h"
      10                 : #include "native_client/src/public/desc_metadata_types.h"
      11                 : #include "native_client/src/public/nacl_file_info.h"
      12                 : #include "native_client/src/shared/platform/nacl_log.h"
      13                 : #include "native_client/src/trusted/desc/nacl_desc_base.h"
      14                 : #include "native_client/src/trusted/desc/nacl_desc_io.h"
      15                 : #include "native_client/src/trusted/service_runtime/include/sys/fcntl.h"
      16                 : 
      17                 : 
      18               2 : int NaClDescSetFileToken(struct NaClDesc *desc,
      19               2 :                          struct NaClFileToken const *token) {
      20               2 :   int error = (*NACL_VTBL(NaClDesc, desc)->
      21                 :                SetMetadata)(desc,
      22                 :                             NACL_DESC_METADATA_FILE_TOKEN_TYPE,
      23                 :                             sizeof *token, (uint8_t const *) token);
      24               2 :   if (0 != error) {
      25               0 :     NaClLog(4, "NaClDescSetFileToken: failed, errno %d\n", -error);
      26               0 :     return 0;
      27                 :   }
      28               2 :   return 1;
      29               2 : }
      30                 : 
      31             270 : int NaClDescGetFileToken(struct NaClDesc *desc,
      32             270 :                          struct NaClFileToken *out_token) {
      33             270 :   int32_t metadata_type;
      34             270 :   uint32_t metadata_bytes;
      35                 : 
      36             270 :   metadata_bytes = (uint32_t) sizeof *out_token;
      37             270 :   metadata_type = (*NACL_VTBL(NaClDesc, desc)->
      38                 :                    GetMetadata)(desc, &metadata_bytes,
      39                 :                                 (uint8_t *) out_token);
      40             270 :   if (NACL_DESC_METADATA_NONE_TYPE == metadata_type) {
      41             268 :     NaClLog(4, "NaClDescGetFileToken: no meta data, cannot map\n");
      42             268 :     return 0;
      43               2 :   } else if (NACL_DESC_METADATA_FILE_TOKEN_TYPE != metadata_type) {
      44               0 :     return 0;
      45               2 :   } else if (metadata_bytes != (uint32_t) sizeof *out_token) {
      46                 :     /* there is supposed to be a file token, but wrong size? */
      47               0 :     NaClLog(LOG_WARNING,
      48                 :             "NaClDescGetFileToken: purported file token present,"
      49                 :             " but token size is incorrect.\n");
      50               0 :     return 0;
      51                 :   }
      52               2 :   NaClLog(4,
      53                 :           "NaClDescGetFileToken: got token 0x%"NACL_PRIx64":%"NACL_PRIx64"\n",
      54                 :           out_token->hi, out_token->lo);
      55               2 :   return 1;
      56             270 : }
      57                 : 
      58               4 : struct NaClDesc *NaClDescIoFromFileInfo(struct NaClFileInfo info,
      59               4 :                                         int mode) {
      60               4 :   struct NaClDesc *desc = NaClDescIoDescFromDescAllocCtor(
      61                 :       info.desc, mode);
      62               4 :   if (NULL == desc) {
      63               0 :     return NULL;
      64                 :   }
      65               4 :   if (NaClFileTokenIsValid(&info.file_token)) {
      66               2 :     if (!NaClDescSetFileToken(desc, &info.file_token)) {
      67               0 :       NaClDescSafeUnref(desc);
      68               0 :       return NULL;
      69                 :     }
      70               2 :   }
      71               4 :   return desc;
      72               4 : }

Generated by: LCOV version 1.7