14a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/*---------------------------------------------------------------------------*
24a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  PFileSystemImpl.h  *
34a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
44a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Copyright 2007, 2008 Nuance Communciations, Inc.                               *
54a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
64a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Licensed under the Apache License, Version 2.0 (the 'License');          *
74a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  you may not use this file except in compliance with the License.         *
84a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
94a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  You may obtain a copy of the License at                                  *
104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0                           *
114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  Unless required by applicable law or agreed to in writing, software      *
134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  distributed under the License is distributed on an 'AS IS' BASIS,        *
144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  See the License for the specific language governing permissions and      *
164a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *  limitations under the License.                                           *
174a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                                                                           *
184a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *---------------------------------------------------------------------------*/
194a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
204a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#ifndef __PFILESYSTEMIMPL_H
214a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#define __PFILESYSTEMIMPL_H
224a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
234a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
244a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
254a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "ESR_ReturnCode.h"
264a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PortPrefix.h"
274a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "PFileSystem.h"
284a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#include "phashtable.h"
294a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
304a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
314a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Portable file-system implementation.
324a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
334a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Projecttypedef struct PFileSystemImpl_t
344a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project{
354a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  /**
364a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   * Superinterface.
374a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project   */
384a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project  PFileSystem super;
394a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
404a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project}
414a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPFileSystemImpl;
424a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
434a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
444a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
454a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * [file path, PFileSystem*] mapping.
464a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
474a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API PHashTable* PFileSystemPathMap;
484a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
494a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
504a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Current working directory.
514a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
524a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API LCHAR PFileSystemCurrentDirectory[P_PATH_MAX];
534a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
544a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
554a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Default implementation.
564a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
574a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API ESR_ReturnCode PFileSystemDestroyImpl(PFileSystem* self);
584a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
594a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
604a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Initialize PSTDIN, PSTDOUT, PSTDERR.
614a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
624a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_OUT_OF_MEMORY if system is out of memory; ESR_INVALID_STATE if mutex could not be created or if this
634a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * function is called after the Ptrd module has been shut down.
644a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
654a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API ESR_ReturnCode PFileSystemInitializeStreamsImpl(void);
664a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
674a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Shutdown PSTDIN, PSTDOUT, PSTDERR.
684a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
694a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API ESR_ReturnCode PFileSystemShutdownStreamsImpl(void);
704a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
714a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
724a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Associates a base path with the file system.
734a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
744a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * For example, if "/dev/cdrom" is specified, then any file under that path
754a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * must make use of this file-system.
764a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
774a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param basePath Base path for files associated with this filesystem
784a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or virtualPath or realPath is null or realPath is not a valid path;
794a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * ESR_OUT_OF_MEMORY if the system is out of memory; ESR_IDENTIFIER_COLLISION if virtualPath is already mounted.
804a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
814a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API ESR_ReturnCode PFileSystemAddPathImpl(PFileSystem* self, const LCHAR* basePath);
824a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
834a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
844a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Deassociates the file-system from a base path.
854a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
864a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param self PFileSystem handle
874a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param basePath Base path for files associated with this filesystem
884a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if self or virtualPath is null or virtualPath is not mounted
894a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
904a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API ESR_ReturnCode PFileSystemRemovePathImpl(PFileSystem* self, const LCHAR* basePath);
914a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
924a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
934a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Given a path, returns the associated file-system and relative path.
944a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
954a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param path Path to look up
964a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param fileSystem [out] File-system which matches the path
974a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param relativePath [out] Relative path associated with match. Set to NULL if this value shouldn't be returned.
984a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *                           Otherwise, the buffer must be of size P_PATH_MAX.
994a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if path, fileSystem or relativePath is null; ESR_INVALID_STATE if no
1004a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * file-system handles the path
1014a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
1024a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API ESR_ReturnCode PFileSystemGetFS(const LCHAR* path, PFileSystem** fileSystem, LCHAR* relativePath);
1034a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1044a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project/**
1054a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * Indicates if the specified path refers to a directory. This function does not actually
1064a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * try resolving the path using a file-system to see if it exists. The result is based purely on the contents
1074a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * of the string.
1084a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project *
1094a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param path Path to look up
1104a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @param isDirectory [out] TRUE if path refers to a directory
1114a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project * @return ESR_INVALID_ARGUMENT if path or isDirectory is null
1124a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project */
1134a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source ProjectPORTABLE_API ESR_ReturnCode PFileSystemIsDirectoryPath(const LCHAR* path, ESR_BOOL* isDirectory);
1144a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project
1154a68b3365c8c50aa93505e99ead2565ab73dcdb0The Android Open Source Project#endif /* __PFILESYSTEMIMPL_H */
116