Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 int NaClDescSetFileToken(struct NaClDesc *desc, | |
| 19 struct NaClFileToken const *token) { | |
| 20 int error; | |
| 21 error = (*NACL_VTBL(NaClDesc, desc)-> | |
|
Mark Seaborn
2014/05/15 00:36:10
Nit: Combine with "int error"
jvoung (off chromium)
2014/05/16 18:02:05
Done.
| |
| 22 SetMetadata)(desc, | |
| 23 NACL_DESC_METADATA_FILE_TOKEN_TYPE, | |
| 24 sizeof *token, (uint8_t const *) token); | |
| 25 if (0 != error) { | |
| 26 NaClLog(4, "NaClDescSetFileToken: failed, errno %d\n", -error); | |
| 27 return 0; | |
| 28 } | |
| 29 return 1; | |
| 30 } | |
| 31 | |
| 32 int NaClDescGetFileToken(struct NaClDesc *desc, | |
| 33 struct NaClFileToken *out_token) { | |
| 34 int32_t metadata_type; | |
| 35 uint32_t metadata_bytes; | |
| 36 | |
| 37 metadata_bytes = (uint32_t) sizeof *out_token; | |
| 38 metadata_type = (*NACL_VTBL(NaClDesc, desc)-> | |
| 39 GetMetadata)(desc, &metadata_bytes, | |
| 40 (uint8_t *) out_token); | |
| 41 if (NACL_DESC_METADATA_NONE_TYPE == metadata_type) { | |
| 42 NaClLog(4, "NaClDescGetFileToken: no meta data, cannot map\n"); | |
| 43 return 0; | |
| 44 } else if (NACL_DESC_METADATA_FILE_TOKEN_TYPE != metadata_type) { | |
| 45 return 0; | |
| 46 } else if (metadata_bytes != (uint32_t) sizeof *out_token) { | |
| 47 /* there is supposed to be a file token, but wrong size? */ | |
| 48 NaClLog(LOG_WARNING, | |
| 49 "NaClDescGetFileToken: purported file token present," | |
| 50 " but token size is incorrect.\n"); | |
| 51 return 0; | |
| 52 } | |
| 53 NaClLog(4, | |
| 54 "NaClDescGetFileToken: got token 0x%"NACL_PRIx64":%"NACL_PRIx64"\n", | |
| 55 out_token->hi, out_token->lo); | |
| 56 return 1; | |
| 57 } | |
| 58 | |
| 59 struct NaClDesc *NaClDescIoFromFileInfo(struct NaClFileInfo info, | |
| 60 int mode) { | |
| 61 struct NaClDesc* desc = NaClDescIoDescFromHandleAllocCtor( | |
|
Mark Seaborn
2014/05/15 00:36:10
Nit: use " *" spacing
jvoung (off chromium)
2014/05/16 18:02:05
Done.
| |
| 62 (NaClHandle)info.desc, mode); | |
| 63 if (NULL == desc) { | |
| 64 return NULL; | |
| 65 } | |
| 66 if (NaClFileTokenIsValid(&info.file_token)) { | |
| 67 if (!NaClDescSetFileToken(desc, &info.file_token)) { | |
| 68 NaClDescSafeUnref(desc); | |
| 69 return NULL; | |
| 70 } | |
| 71 } | |
| 72 return desc; | |
| 73 } | |
| OLD | NEW |