mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-23 18:32:53 +00:00
ark: do not use static buffer in KArchiveInterface::permissionsString()
make it protected so that it is reusable and implement permissions for LibArchiveInterface via it while at it Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
9949a8a353
commit
c3e740dc21
5 changed files with 63 additions and 61 deletions
|
@ -88,6 +88,63 @@ bool ReadOnlyArchiveInterface::doResume()
|
|||
return false;
|
||||
}
|
||||
|
||||
// Borrowed and adapted from KFileItemPrivate::parsePermissions.
|
||||
QString ReadOnlyArchiveInterface::permissionsString(mode_t perm)
|
||||
{
|
||||
char buffer[ 12 ];
|
||||
|
||||
char uxbit,gxbit,oxbit;
|
||||
|
||||
if ( (perm & (S_IXUSR|S_ISUID)) == (S_IXUSR|S_ISUID) )
|
||||
uxbit = 's';
|
||||
else if ( (perm & (S_IXUSR|S_ISUID)) == S_ISUID )
|
||||
uxbit = 'S';
|
||||
else if ( (perm & (S_IXUSR|S_ISUID)) == S_IXUSR )
|
||||
uxbit = 'x';
|
||||
else
|
||||
uxbit = '-';
|
||||
|
||||
if ( (perm & (S_IXGRP|S_ISGID)) == (S_IXGRP|S_ISGID) )
|
||||
gxbit = 's';
|
||||
else if ( (perm & (S_IXGRP|S_ISGID)) == S_ISGID )
|
||||
gxbit = 'S';
|
||||
else if ( (perm & (S_IXGRP|S_ISGID)) == S_IXGRP )
|
||||
gxbit = 'x';
|
||||
else
|
||||
gxbit = '-';
|
||||
|
||||
if ( (perm & (S_IXOTH|S_ISVTX)) == (S_IXOTH|S_ISVTX) )
|
||||
oxbit = 't';
|
||||
else if ( (perm & (S_IXOTH|S_ISVTX)) == S_ISVTX )
|
||||
oxbit = 'T';
|
||||
else if ( (perm & (S_IXOTH|S_ISVTX)) == S_IXOTH )
|
||||
oxbit = 'x';
|
||||
else
|
||||
oxbit = '-';
|
||||
|
||||
// Include the type in the first char like kde3 did; people are more used to seeing it,
|
||||
// even though it's not really part of the permissions per se.
|
||||
if (S_ISDIR(perm))
|
||||
buffer[0] = 'd';
|
||||
else if (S_ISLNK(perm))
|
||||
buffer[0] = 'l';
|
||||
else
|
||||
buffer[0] = '-';
|
||||
|
||||
buffer[1] = ((( perm & S_IRUSR ) == S_IRUSR ) ? 'r' : '-' );
|
||||
buffer[2] = ((( perm & S_IWUSR ) == S_IWUSR ) ? 'w' : '-' );
|
||||
buffer[3] = uxbit;
|
||||
buffer[4] = ((( perm & S_IRGRP ) == S_IRGRP ) ? 'r' : '-' );
|
||||
buffer[5] = ((( perm & S_IWGRP ) == S_IWGRP ) ? 'w' : '-' );
|
||||
buffer[6] = gxbit;
|
||||
buffer[7] = ((( perm & S_IROTH ) == S_IROTH ) ? 'r' : '-' );
|
||||
buffer[8] = ((( perm & S_IWOTH ) == S_IWOTH ) ? 'w' : '-' );
|
||||
buffer[9] = oxbit;
|
||||
buffer[10] = 0;
|
||||
|
||||
return QString::fromLatin1(buffer);
|
||||
}
|
||||
|
||||
ReadWriteArchiveInterface::ReadWriteArchiveInterface(QObject *parent, const QVariantList & args)
|
||||
: ReadOnlyArchiveInterface(parent, args)
|
||||
{
|
||||
|
|
|
@ -114,6 +114,8 @@ protected:
|
|||
*/
|
||||
void setWaitForFinishedSignal(bool value);
|
||||
|
||||
static QString permissionsString(mode_t perm);
|
||||
|
||||
private:
|
||||
QString m_filename;
|
||||
QString m_password;
|
||||
|
|
|
@ -204,7 +204,7 @@ void KArchiveInterface::createEntryFor(const KArchiveEntry *aentry, const QStrin
|
|||
|
||||
e[ FileName ] = fileName;
|
||||
e[ InternalID ] = e[ FileName ];
|
||||
e[ Permissions ] = permissionsString(aentry->permissions());
|
||||
e[ Permissions ] = ReadWriteArchiveInterface::permissionsString(aentry->permissions());
|
||||
e[ Owner ] = aentry->user();
|
||||
e[ Group ] = aentry->group();
|
||||
e[ IsDirectory ] = aentry->isDirectory();
|
||||
|
@ -273,61 +273,4 @@ bool KArchiveInterface::deleteFiles(const QList<QVariant> & files)
|
|||
return false;
|
||||
}
|
||||
|
||||
// Borrowed and adapted from KFileItemPrivate::parsePermissions.
|
||||
QString KArchiveInterface::permissionsString(mode_t perm)
|
||||
{
|
||||
static char buffer[ 12 ];
|
||||
|
||||
char uxbit,gxbit,oxbit;
|
||||
|
||||
if ( (perm & (S_IXUSR|S_ISUID)) == (S_IXUSR|S_ISUID) )
|
||||
uxbit = 's';
|
||||
else if ( (perm & (S_IXUSR|S_ISUID)) == S_ISUID )
|
||||
uxbit = 'S';
|
||||
else if ( (perm & (S_IXUSR|S_ISUID)) == S_IXUSR )
|
||||
uxbit = 'x';
|
||||
else
|
||||
uxbit = '-';
|
||||
|
||||
if ( (perm & (S_IXGRP|S_ISGID)) == (S_IXGRP|S_ISGID) )
|
||||
gxbit = 's';
|
||||
else if ( (perm & (S_IXGRP|S_ISGID)) == S_ISGID )
|
||||
gxbit = 'S';
|
||||
else if ( (perm & (S_IXGRP|S_ISGID)) == S_IXGRP )
|
||||
gxbit = 'x';
|
||||
else
|
||||
gxbit = '-';
|
||||
|
||||
if ( (perm & (S_IXOTH|S_ISVTX)) == (S_IXOTH|S_ISVTX) )
|
||||
oxbit = 't';
|
||||
else if ( (perm & (S_IXOTH|S_ISVTX)) == S_ISVTX )
|
||||
oxbit = 'T';
|
||||
else if ( (perm & (S_IXOTH|S_ISVTX)) == S_IXOTH )
|
||||
oxbit = 'x';
|
||||
else
|
||||
oxbit = '-';
|
||||
|
||||
// Include the type in the first char like kde3 did; people are more used to seeing it,
|
||||
// even though it's not really part of the permissions per se.
|
||||
if (S_ISDIR(perm))
|
||||
buffer[0] = 'd';
|
||||
else if (S_ISLNK(perm))
|
||||
buffer[0] = 'l';
|
||||
else
|
||||
buffer[0] = '-';
|
||||
|
||||
buffer[1] = ((( perm & S_IRUSR ) == S_IRUSR ) ? 'r' : '-' );
|
||||
buffer[2] = ((( perm & S_IWUSR ) == S_IWUSR ) ? 'w' : '-' );
|
||||
buffer[3] = uxbit;
|
||||
buffer[4] = ((( perm & S_IRGRP ) == S_IRGRP ) ? 'r' : '-' );
|
||||
buffer[5] = ((( perm & S_IWGRP ) == S_IWGRP ) ? 'w' : '-' );
|
||||
buffer[6] = gxbit;
|
||||
buffer[7] = ((( perm & S_IROTH ) == S_IROTH ) ? 'r' : '-' );
|
||||
buffer[8] = ((( perm & S_IWOTH ) == S_IWOTH ) ? 'w' : '-' );
|
||||
buffer[9] = oxbit;
|
||||
buffer[10] = 0;
|
||||
|
||||
return QString::fromLatin1(buffer);
|
||||
}
|
||||
|
||||
KERFUFFLE_EXPORT_PLUGIN(KArchiveInterface)
|
||||
|
|
|
@ -56,8 +56,6 @@ private:
|
|||
|
||||
void createEntryFor(const KArchiveEntry *aentry, const QString& prefix);
|
||||
|
||||
QString permissionsString(mode_t perm);
|
||||
|
||||
void getAllEntries(const KArchiveDirectory *dir, const QString &prefix, QList< QVariant > &list);
|
||||
|
||||
int handleFileExistsMessage(const QString &dir, const QString &fileName);
|
||||
|
|
|
@ -739,7 +739,9 @@ void LibArchiveInterface::emitEntryFromArchiveEntry(struct archive_entry *aentry
|
|||
}
|
||||
|
||||
e[Size] = (qlonglong)archive_entry_size(aentry);
|
||||
e[IsDirectory] = S_ISDIR(archive_entry_mode(aentry));
|
||||
const mode_t amode = archive_entry_mode(aentry);
|
||||
e[IsDirectory] = S_ISDIR(amode);
|
||||
e[Permissions] = ReadWriteArchiveInterface::permissionsString(amode);
|
||||
#if ARCHIVE_VERSION_NUMBER >= 3002000
|
||||
e[IsPasswordProtected] = archive_entry_is_encrypted(aentry);
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue