/* This code used not to use access(...) because access follows links which maycauseperformanceproblemssee#97133.(Thatapparentlyreferencesa no-longeraccessibleHamburg-internalbug-trackingsystem.) However,contrarytowhatisstatedabovetheuseofaccesscallsis requiredonnetworkfilesystemsnotusingunixsemantics(AFS,see fdo#43095).
*/ void set_file_access_rights(const OString& file_path, oslFileStatus* pStat)
{
pStat->uValidFields |= osl_FileStatus_Mask_Attributes;
if (osl::access(file_path, W_OK) < 0)
pStat->uAttributes |= osl_File_Attribute_ReadOnly;
if (osl::access(file_path, X_OK) == 0)
pStat->uAttributes |= osl_File_Attribute_Executable;
}
/* the set_file_access_rights must be called after set_file_hidden_status(...) and
set_file_access_mask(...) because of the hack in set_file_access_rights(...) */ void set_file_attributes( const OString& file_path, conststruct stat& file_stat, const sal_uInt32 uFieldMask, oslFileStatus* pStat)
{
set_file_hidden_status(file_path, pStat);
set_file_access_mask(file_stat, pStat);
// we set the file access rights only on demand // because it's potentially expensive if (uFieldMask & osl_FileStatus_Mask_Attributes)
set_file_access_rights(file_path, pStat);
}
/* we only need to call stat or lstat if one of the
following flags is set */ bool is_stat_call_necessary(sal_uInt32 field_mask, oslFileType file_type)
{ return (
((field_mask & osl_FileStatus_Mask_Type) && (file_type == osl_File_Type_Unknown)) ||
(field_mask & osl_FileStatus_Mask_Attributes) ||
(field_mask & osl_FileStatus_Mask_CreationTime) ||
(field_mask & osl_FileStatus_Mask_AccessTime) ||
(field_mask & osl_FileStatus_Mask_ModifyTime) ||
(field_mask & osl_FileStatus_Mask_FileSize) ||
(field_mask & osl_FileStatus_Mask_LinkTargetURL) ||
(field_mask & osl_FileStatus_Mask_Validate));
}
if (bStatNeeded)
{ // we set all these attributes because it's cheap
set_file_type(file_stat, pStat);
set_file_access_time(file_stat, pStat);
set_file_modify_time(file_stat, pStat);
set_file_size(file_stat, pStat);
set_file_attributes(file_path, file_stat, uFieldMask, pStat);
#ifdef DEBUG_OSL_FILE
fprintf(stderr,"File Times are (in localtime):\n");
pTM=localtime(&aFileStat.st_ctime);
fprintf(stderr,"CreationTime is '%s'\n",asctime(pTM));
pTM=localtime(&aFileStat.st_atime);
fprintf(stderr,"AccessTime is '%s'\n",asctime(pTM));
pTM=localtime(&aFileStat.st_mtime);
fprintf(stderr,"Modification is '%s'\n",asctime(pTM));
fprintf(stderr,"File Times are (in UTC):\n");
fprintf(stderr,"CreationTime is '%s'\n",ctime(&aFileStat.st_ctime));
fprintf(stderr,"AccessTime is '%s'\n",ctime(&aTimeBuffer.actime));
fprintf(stderr,"Modification is '%s'\n",ctime(&aTimeBuffer.modtime)); #endif
#ifdef DEBUG_OSL_FILE
fprintf(stderr,"File Times are (in localtime):\n");
pTM=localtime(&aFileStat.st_ctime);
fprintf(stderr,"CreationTime now '%s'\n",asctime(pTM));
pTM=localtime(&aTimeBuffer.actime);
fprintf(stderr,"AccessTime now '%s'\n",asctime(pTM));
pTM=localtime(&aTimeBuffer.modtime);
fprintf(stderr,"Modification now '%s'\n",asctime(pTM));
fprintf(stderr,"File Times are (in UTC):\n");
fprintf(stderr,"CreationTime now '%s'\n",ctime(&aFileStat.st_ctime));
fprintf(stderr,"AccessTime now '%s'\n",ctime(&aTimeBuffer.actime));
fprintf(stderr,"Modification now '%s'\n",ctime(&aTimeBuffer.modtime)); #endif
sal_Bool
SAL_CALL osl_identicalDirectoryItem( oslDirectoryItem a, oslDirectoryItem b)
{
DirectoryItem_Impl *pA = static_cast<DirectoryItem_Impl *>(a);
DirectoryItem_Impl *pB = static_cast<DirectoryItem_Impl *>(b); if (a == b) returntrue; /* same name => same item, unless renaming / moving madness has occurred */ if (pA->m_strFilePath == pB->m_strFilePath) returntrue;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.