Files
mars-flaim/flaim/src/fdir.h
dsandersoremutah c55dab446f Renamed version4 to flaim and version5 to xflaim
git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@7 0109f412-320b-0410-ab79-c3e0c5ffbbe6
2006-01-27 21:06:39 +00:00

187 lines
4.8 KiB
C++

//-------------------------------------------------------------------------
// Desc: File system directory class - definitions.
// Tabs: 3
//
// Copyright (c) 1998-2006 Novell, Inc. All Rights Reserved.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of version 2 of the GNU General Public
// License as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, contact Novell, Inc.
//
// To contact Novell about this file by physical or electronic mail,
// you may find current contact information at www.novell.com
//
// $Id: fdir.h 12329 2006-01-20 17:49:30 -0700 (Fri, 20 Jan 2006) ahodgkinson $
//-------------------------------------------------------------------------
#ifndef FDIR_H
#define FDIR_H
#include "fpackon.h"
// IMPORTANT NOTE: No other include files should follow this one except
// for fpackoff.h
class F_DirHdl; // Forward Reference
typedef F_DirHdl * F_DirHdl_p;
#if defined( FLM_WIN)
typedef struct
{
HANDLE findHandle;
WIN32_FIND_DATA findBuffer;
char szSearchPath[ F_PATH_MAX_SIZE];
FLMUINT uiSearchAttrib;
} F_IO_FIND_DATA;
#define F_IO_FA_NORMAL FILE_ATTRIBUTE_NORMAL /* Normal file */
#define F_IO_FA_RDONLY FILE_ATTRIBUTE_READONLY /* Read only attribute */
#define F_IO_FA_HIDDEN FILE_ATTRIBUTE_HIDDEN /* Hidden file */
#define F_IO_FA_SYSTEM FILE_ATTRIBUTE_SYSTEM /* System file */
#define F_IO_FA_VOLUME FILE_ATTRIBUTE_VOLUME /* Volume label */
#define F_IO_FA_DIRECTORY FILE_ATTRIBUTE_DIRECTORY /* Directory */
#define F_IO_FA_ARCHIVE FILE_ATTRIBUTE_ARCHIVE /* Archive */
#elif defined( FLM_UNIX)
typedef struct _DirInfo
{
mode_t mode_flag;
struct stat FileStat;
char name[ F_PATH_MAX_SIZE+1];
char search_path[ F_PATH_MAX_SIZE+1];
char full_path[ F_PATH_MAX_SIZE];
char pattern_str[ F_PATH_MAX_SIZE];
char dirpath[ F_PATH_MAX_SIZE];
glob_t globbuf;
} F_IO_FIND_DATA;
#define F_IO_FA_NORMAL 0x01 /* Normal file, no attributes */
#define F_IO_FA_RDONLY 0x02 /* Read only attribute */
#define F_IO_FA_HIDDEN 0x04 /* Hidden file */
#define F_IO_FA_SYSTEM 0x08 /* System file */
#define F_IO_FA_VOLUME 0x10 /* Volume label */
#define F_IO_FA_DIRECTORY 0x20 /* Directory */
#define F_IO_FA_ARCHIVE 0x40 /* Archive */
#elif !defined( FLM_NLM)
#error Platform not supported
#endif
#if defined( FLM_WIN) || defined( FLM_UNIX)
RCODE f_fileFindFirst(
const char * pszSearchPath,
FLMUINT uiSearchAttrib,
F_IO_FIND_DATA * find_data,
char * pszFoundPath,
FLMUINT * puiFoundAttrib);
RCODE f_fileFindNext(
F_IO_FIND_DATA * pFindData,
char * pszFoundPath,
FLMUINT * puiFoundAttrib);
void f_fileFindClose(
F_IO_FIND_DATA * pFindData);
#endif
/****************************************************************************
Desc: Implementation of the F_Directory interface for Win and Unix
****************************************************************************/
class F_DirHdlImp : public F_DirHdl
{
public:
F_DirHdlImp()
{
m_rc = FERR_OK;
m_bFirstTime = TRUE;
m_bFindOpen = FALSE;
m_uiAttrib = 0;
m_ucPattern[ 0] = '\0';
#ifdef FLM_NLM
m_lVolumeNumber = 0;
m_lCurrentEntryNumber = 0xFFFFFFFFL;
#endif
}
virtual ~F_DirHdlImp()
{
#ifndef FLM_NLM
if( m_bFindOpen)
{
f_fileFindClose( &m_FindData);
}
#endif
}
virtual RCODE Next( void);
const char * CurrentItemName( void);
FLMUINT CurrentItemSize( void);
FLMBOOL CurrentItemIsDir( void);
FINLINE void CurrentItemPath(
char * pszPath)
{
if( RC_OK( m_rc))
{
f_strcpy( pszPath, m_DirectoryPath);
#ifdef FLM_NLM
f_pathAppend( pszPath, CurrentItemName());
#else
f_pathAppend( pszPath, m_szFileName);
#endif
}
}
RCODE OpenDir(
const char * pszPath,
const char * pszPattern);
RCODE CreateDir(
const char * pszDirPath);
RCODE RemoveDir(
const char * pszDirPath);
private:
RCODE _CreateDir(
const char * pszDirPath);
char m_DirectoryPath[ F_PATH_MAX_SIZE];
char m_ucPattern[ F_PATH_MAX_SIZE];
RCODE m_rc;
FLMBOOL m_bFirstTime;
FLMBOOL m_bFindOpen;
FLMBOOL m_EOF;
char m_szFileName[ F_PATH_MAX_SIZE];
FLMUINT m_uiAttrib;
#ifndef FLM_NLM
F_IO_FIND_DATA m_FindData;
#else
LONG m_lVolumeNumber;
LONG m_lDirectoryNumber;
LONG m_lCurrentEntryNumber;
struct DirectoryStructure * m_pCurrentItem;
char m_ucTempBuffer[ F_FILENAME_SIZE];
#endif
};
#include "fpackoff.h"
#endif