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