blob: 4adaae165d6ae0e7773a75bc63e2ac3609a30699 [file] [log] [blame]
Alice Wang0547e862023-04-18 09:32:26 +00001// Copyright 2023, The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15//! Functions to process files.
16
17use binder::{self, ExceptionCode, ParcelFileDescriptor, Status};
18use std::fs::File;
19
20/// Converts a `&ParcelFileDescriptor` to a `File` by cloning the file.
21pub fn clone_file(fd: &ParcelFileDescriptor) -> binder::Result<File> {
22 fd.as_ref().try_clone().map_err(|e| {
23 Status::new_exception_str(
24 ExceptionCode::BAD_PARCELABLE,
25 Some(format!("Failed to clone File from ParcelFileDescriptor: {:?}", e)),
26 )
27 })
28}