blob: 94b84e5bc63ffbc37a8b509913e5ad42cae5f3c4 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
// -*- c++ -*-
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
// O S C L _ F I L E _ FIND
// = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
/*! \addtogroup osclio OSCL IO
*
* @{
*/
/*! \file oscl_file_find.h
\brief The file oscl_file_find.h defines the class Oscl_FileFind
*/
#ifndef OSCL_FILE_FIND_H_INCLUDED
#define OSCL_FILE_FIND_H_INCLUDED
#ifndef OSCLCONFIG_IO_H_INCLUDED
#include "osclconfig_io.h"
#endif
#ifndef OSCL_BASE_H_INCLUDED
#include "oscl_base.h"
#endif
#ifndef OSCL_MEM_H_INCLUDED
#include "oscl_mem.h"
#endif
#ifndef OSCL_VECTOR_H_INCLUDED
#include "oscl_vector.h"
#endif
#ifndef OSCL_STRING_CONTAINERS_H_INCLUDED
#include "oscl_string_containers.h"
#endif
/**
* Oscl_FileFind class defines the generic way of finding filesystem elements that match a pattern within a directory
*/
class Oscl_FileFind
{
public:
/**
* Finds first element matching the pattern.
*
* @param directory directory to search (utf8).
* @param pattern wildcard pattern filter (utf8). passing NULL, results in a universal match.
* @param buf buffer for returned pathname (utf8).
* @param buflen size in wide characters of buf. If buf is not large enough to hold the returned string, NULL is returned, and GetLastError is set to E_BUFFER_TOO_SMALL.
*
* @return returns a pointer to buffer supplied, which contains the pathname of the next found element, or NULL otherwise.On a NULL return value, GetLastError() returns a more detailed error.
*/
OSCL_IMPORT_REF const char *FindFirst(const char *directory, const char *pattern, char *buf, uint32 buflen);
/**
* Opens a directory for reading.
*
* @param directory directory to search (utf16).
* @param pattern wildcard pattern filter (utf16). passing NULL, results in a universal match.
* @param buf buffer for returned pathname (utf16).
* @param buflen size in wide characters of buf. If buf is not large enough to hold the returned string, NULL is returned, and GetLastError is set to E_BUFFER_TOO_SMALL.
*
* @return returns a pointer to buffer supplied, which contains the pathname of the next found element, or NULL otherwise. On a NULL return value, GetLastError() returns a more detailed error.
*/
OSCL_IMPORT_REF const oscl_wchar *FindFirst(const oscl_wchar *directory, const oscl_wchar *pattern, oscl_wchar *buf, uint32 buflen);
/**
* Reads the next element in the directory.
* Note: the pointer returned by this function is not persistent and
* should be stored. Its scope is limited to the lifetime of the class.
* @param buf buffer to hold directory name(utf8)
* @param buflen size in wide characters of buf. If buf is not large enough to hold the returned string, NULL is returned, and GetLastError is set to E_BUFFER_TOO_SMALL.
* @return returns a pointer to buffer supplied, which contains the pathname of the next found element, or NULL otherwise. On a NULL return value, GetLastError() returns a more detailed error.
*/
OSCL_IMPORT_REF char *FindNext(char *buf, uint32 buflen);
/**
* Reads the next element in a directory.
* Note: the pointer returned by this function is not persistent and
* should be stored. Its scope is limited to the lifetime of the class.
* @param buf buffer to hold directory name(utf16)
* @param buflen size in wide characters of buf. If buf is not large enough to hold the returned string, NULL is returned, and GetLastError is set to E_BUFFER_TOO_SMALL.
* @return returns a pointer to buffer supplied, which contains the pathname of the next found element, or NULL otherwise. On a NULL return value, GetLastError() returns a more detailed error.
*/
OSCL_IMPORT_REF oscl_wchar *FindNext(oscl_wchar *buf, uint32 buflen);
/**
* closes the handle to directory.
* @return none
*/
OSCL_IMPORT_REF void Close();
typedef enum
{
E_OK = 0,
E_INVALID_STATE,
E_INVALID_ARG,
E_PATH_TOO_LONG,
E_PATH_NOT_FOUND,
E_NO_MATCH,
E_BUFFER_TOO_SMALL,
E_NOT_IMPLEMENTED,
E_OTHER
} error_type;
typedef enum
{
FILE_TYPE = 0, /* file */
DIR_TYPE, /* directory */
INVALID_TYPE /* no element available */
} element_type;
/**
* Returns the element type for the last element returned
* @return see enumeration above for more info.
*/
OSCL_IMPORT_REF element_type GetElementType();
/**
* Returns the error code for the last operation.
* @return see enumeration above for more info.
*/
OSCL_IMPORT_REF error_type GetLastError();
/**
* constructor.
* @return none
*/
OSCL_IMPORT_REF Oscl_FileFind();
/**
* destructor. will deallocate open handles if necessary
*
* @return none
*/
OSCL_IMPORT_REF ~Oscl_FileFind();
private:
#if (OSCL_HAS_GLOB)
glob_t hFind;
size_t count;
bool haveGlob;
#else
size_t count;
bool haveGlob;
Oscl_Vector<OSCL_HeapString<OsclMemAllocator>, OsclMemAllocator> iDirEntVec;
#endif
error_type lastError;
element_type type;
};
#endif // OSCL_FILE_FIND_H_INCLUDED
/*! @} */