/**************************************************************************** Desc: Creates a new 64-bit "file" ****************************************************************************/ RCODE F_MultiFileHdl::createFile( const char * pszPath) { RCODE rc = NE_FLM_OK; FLMBOOL bCreatedDir = FALSE; IF_FileSystem * pFileSystem = f_getFileSysPtr(); if( m_bOpen) { rc = RC_SET_AND_ASSERT( NE_FLM_FAILURE); goto Exit; } if( RC_BAD( rc = pFileSystem->createDir( pszPath))) { goto Exit; } f_strcpy( m_szPath, pszPath); bCreatedDir = TRUE; // Create the lock file if( RC_BAD( rc = createLockFile( m_szPath))) { goto Exit; } // Initialize the EOF to 0 and set the state to open m_ui64EOF = 0; m_bOpen = TRUE; Exit: // Release the lock file if( RC_BAD( rc)) { (void)releaseLockFile( m_szPath, TRUE); if( bCreatedDir) { (void)pFileSystem->removeDir( m_szPath); } } return( rc); }
/**************************************************************************** Desc: Creates a new 64-bit file with a unique, generated name ****************************************************************************/ RCODE F_MultiFileHdl::createUniqueFile( const char * pszPath, // Directory where the file is to be created const char * pszFileExtension) // Extension to be used on the new file. { RCODE rc = NE_FLM_OK; FLMUINT uiCount; FLMBOOL bModext = TRUE; FLMBOOL bCreatedDir = FALSE; FLMUINT uiBaseTime = 0; FLMBYTE ucHighByte = 0; char szDirName[ F_FILENAME_SIZE]; char szTmpPath[ F_PATH_MAX_SIZE]; char szBasePath[ F_PATH_MAX_SIZE]; IF_FileSystem * pFileSystem = f_getFileSysPtr(); if( m_bOpen) { rc = RC_SET_AND_ASSERT( NE_FLM_FAILURE); goto Exit; } if( !pszPath || pszPath[ 0] == '\0') { #if defined( FLM_UNIX) f_strcpy( szBasePath, "./"); #elif defined( FLM_NLM) f_strcpy( szBasePath, "SYS:_NETWARE"); #else szBasePath[ 0] = '\0'; #endif } else { f_strcpy( szBasePath, pszPath); } if ((pszFileExtension) && (f_strlen( pszFileExtension) >= 3)) { bModext = FALSE; } uiCount = 0; szDirName[ 0] = '\0'; do { pFileSystem->pathCreateUniqueName( &uiBaseTime, szDirName, pszFileExtension, &ucHighByte, bModext); f_strcpy( szTmpPath, szBasePath); pFileSystem->pathAppend( szTmpPath, szDirName); rc = pFileSystem->createDir( szTmpPath); } while ((rc != NE_FLM_OK) && (uiCount++ < 20)); if( RC_BAD( rc)) { goto Exit; } f_strcpy( m_szPath, szTmpPath); bCreatedDir = TRUE; // Create the lock file if( RC_BAD( rc = createLockFile( m_szPath))) { goto Exit; } // Initialize the EOF to 0 and set the state to open m_ui64EOF = 0; m_bOpen = TRUE; Exit: // Release the lock file if( RC_BAD( rc)) { releaseLockFile( m_szPath, TRUE); if( bCreatedDir) { (void)pFileSystem->removeDir( m_szPath); } } return( rc); }