1069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project/*---------------------------------------------------------------------------* 2069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * PFileWrapUNIX_OS_Specific.c * 3069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * * 4069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Copyright 2007, 2008 Nuance Communciations, Inc. * 5069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * * 6069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the 'License'); * 7069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * you may not use this file except in compliance with the License. * 8069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * * 9069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * You may obtain a copy of the License at * 10069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 * 11069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * * 12069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * Unless required by applicable law or agreed to in writing, software * 13069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * distributed under the License is distributed on an 'AS IS' BASIS, * 14069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * 15069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * See the License for the specific language governing permissions and * 16069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * limitations under the License. * 17069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project * * 18069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project *---------------------------------------------------------------------------*/ 19069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 20069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include <sys/types.h> 21069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include <sys/stat.h> 22069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 23069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "errno.h" 24069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "PFileSystemImpl.h" 25069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "PANSIFileSystem.h" 26069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "PANSIFileSystemImpl.h" 27069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "phashtable.h" 28069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "LCHAR.h" 29069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project#include "plog.h" 30069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 31069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source ProjectESR_ReturnCode pf_make_dir ( const LCHAR* path ) 32069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 33069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ESR_ReturnCode rc; 34069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 35069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project passert(path!=NULL); 36069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 37069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if ( mkdir ( path, S_IRWXU|S_IRWXG|S_IRWXO ) == 0) 38069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 39069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_SUCCESS; 40069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 41069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project else 42069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 43069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project switch (errno) 44069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 45069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project case EEXIST: 46069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_IDENTIFIER_COLLISION; 47069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project break; 48069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 49d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath case ENOENT: 50d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath rc = ESR_NO_MATCH_ERROR; 51d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath break; 52d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath 53069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project default: 54d42abb2fd917184764daf22f5f299e848b8701d7Narayan Kamath PLogError ( L("ESR_INVALID_STATE") ); 55069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_INVALID_STATE; 56069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project break; 57069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 58069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 59069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return ( rc ); 60069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 61069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 62069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 63069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 64069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source ProjectESR_ReturnCode pf_get_cwd ( LCHAR* path, size_t *len ) 65069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 66069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ESR_ReturnCode rc; 67069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 68069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if ( path != NULL ) 69069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 70069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if ( getcwd ( path, *len ) != NULL) 71069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 72069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_SUCCESS; 73069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 74069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project else 75069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 76069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project switch ( errno ) 77069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 78069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project case ERANGE: 79069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_BUFFER_OVERFLOW; 80069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project break; 81069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 82069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project case ENOMEM: 83069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_OUT_OF_MEMORY; 84069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project break; 85069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 86069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project default: 87069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project PLogError(L("ESR_INVALID_STATE")); 88069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_INVALID_STATE; 89069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project break; 90069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 91069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 92069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 93069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project else 94069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 95069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_INVALID_ARGUMENT; 96069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project PLogError(ESR_rc2str(rc)); 97069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 98069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 99069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return ( rc ); 100069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 101069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 102069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 103069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 104069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source ProjectESR_ReturnCode pf_change_dir ( const LCHAR* path ) 105069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project { 106069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project ESR_ReturnCode rc; 107069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 108069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project passert ( path != NULL ); 109069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project passert ( *path != '\0' ); 110069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project 111069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project if ( chdir ( path ) == 0 ) 112069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_SUCCESS; 113069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project else 114069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project rc = ESR_NO_MATCH_ERROR; 115069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project return ( rc ); 116069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project } 117069490a5ca2fd1988d29daf45d892f47ad665115The Android Open Source Project