parent
4fed04e9d2
commit
512da0e58d
@ -0,0 +1,12 @@
|
|||||||
|
#################################################
|
||||||
|
#
|
||||||
|
# (C) 2012 Timothy Pearson
|
||||||
|
# kb9vqf (AT) pearsoncomputing.net
|
||||||
|
#
|
||||||
|
# Improvements and feedback are welcome
|
||||||
|
#
|
||||||
|
# This file is released under GPL >= 2
|
||||||
|
#
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
tde_conditional_add_subdirectory( HAVE_ELFICON elf )
|
@ -0,0 +1,42 @@
|
|||||||
|
#################################################
|
||||||
|
#
|
||||||
|
# (C) 2012 Timothy Pearson
|
||||||
|
# kb9vqf (AT) pearsoncomputing.net
|
||||||
|
#
|
||||||
|
# Improvements and feedback are welcome
|
||||||
|
#
|
||||||
|
# This file is released under GPL >= 2
|
||||||
|
#
|
||||||
|
#################################################
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
${TDE_INCLUDE_DIR}
|
||||||
|
${TQT_INCLUDE_DIRS}
|
||||||
|
${CMAKE_SOURCE_DIR}/tdecore
|
||||||
|
${CMAKE_BINARY_DIR}/tdecore
|
||||||
|
${CMAKE_SOURCE_DIR}/tdeui
|
||||||
|
${CMAKE_BINARY_DIR}/tdeui
|
||||||
|
${CMAKE_SOURCE_DIR}/kio/kio
|
||||||
|
${LIBR_INCLUDEDIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
link_directories(
|
||||||
|
${TQT_LIBRARY_DIRS}
|
||||||
|
${LIBR_LIBDIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
#### other data #################################
|
||||||
|
|
||||||
|
install( FILES kfile_elf.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
|
||||||
|
|
||||||
|
|
||||||
|
#### kfile_elf (module) #########################
|
||||||
|
|
||||||
|
tde_add_kpart( kfile_elf AUTOMOC
|
||||||
|
SOURCES kfile_elf.cpp
|
||||||
|
EMBED tdelficon-static
|
||||||
|
LINK kio-shared ${LIBR_LIBRARIES}
|
||||||
|
DESTINATION ${PLUGIN_INSTALL_DIR}
|
||||||
|
)
|
@ -0,0 +1,159 @@
|
|||||||
|
/* This file is part of the KDE project
|
||||||
|
* Copyright (C) 2012 Timothy Pearson <kb9vqf@pearsoncomputing.net>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.
|
||||||
|
*
|
||||||
|
* 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; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
* Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
#include "kfile_elf.h"
|
||||||
|
|
||||||
|
#include <kprocess.h>
|
||||||
|
#include <klocale.h>
|
||||||
|
#include <kgenericfactory.h>
|
||||||
|
#include <kstringvalidator.h>
|
||||||
|
#include <kdebug.h>
|
||||||
|
|
||||||
|
#include <tqdict.h>
|
||||||
|
#include <tqvalidator.h>
|
||||||
|
#include <tqcstring.h>
|
||||||
|
#include <tqfile.h>
|
||||||
|
#include <tqdatetime.h>
|
||||||
|
|
||||||
|
#include "tdelficon.h"
|
||||||
|
|
||||||
|
#if !defined(__osf__)
|
||||||
|
#include <inttypes.h>
|
||||||
|
#else
|
||||||
|
typedef unsigned long uint32_t;
|
||||||
|
typedef unsigned short uint16_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
TQString elf_get_resource(libr_file *handle, char *section_name)
|
||||||
|
{
|
||||||
|
size_t buffer_size = 0;
|
||||||
|
char *buffer = NULL;
|
||||||
|
TQString result = TQString("<i>") + i18n("not set") + TQString("</i>");
|
||||||
|
|
||||||
|
/* Get the resource from the ELF binary */
|
||||||
|
if(!libr_size(handle, section_name, &buffer_size))
|
||||||
|
{
|
||||||
|
kdWarning() << "failed to obtain ELF resource size: " << libr_errmsg() << endl;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
/* Get the resource from the ELF file */
|
||||||
|
buffer = (char *) malloc(buffer_size);
|
||||||
|
if(!libr_read(handle, section_name, buffer))
|
||||||
|
{
|
||||||
|
kdWarning() << "failed to obtain ELF resource: " << libr_errmsg() << endl;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
result = buffer;
|
||||||
|
|
||||||
|
fail:
|
||||||
|
free(buffer);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef KGenericFactory<KElfPlugin> ElfFactory;
|
||||||
|
|
||||||
|
K_EXPORT_COMPONENT_FACTORY(kfile_elf, ElfFactory( "kfile_elf" ))
|
||||||
|
|
||||||
|
KElfPlugin::KElfPlugin(TQObject *parent, const char *name,
|
||||||
|
const TQStringList &args)
|
||||||
|
|
||||||
|
: KFilePlugin(parent, name, args)
|
||||||
|
{
|
||||||
|
KFileMimeTypeInfo* info = addMimeTypeInfo( "application/x-executable" );
|
||||||
|
|
||||||
|
KFileMimeTypeInfo::GroupInfo* group = 0L;
|
||||||
|
KFileMimeTypeInfo::GroupInfo* group2 = 0L;
|
||||||
|
|
||||||
|
group = addGroupInfo(info, "Technical", i18n("Embedded Metadata"));
|
||||||
|
group2 = addGroupInfo(info, "Icon", i18n("Embedded Icon(s)"));
|
||||||
|
|
||||||
|
KFileMimeTypeInfo::ItemInfo* item;
|
||||||
|
|
||||||
|
item = addItemInfo(group, "Name", i18n("Internal Name"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "Description", i18n("Description"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "License", i18n("License"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "Copyright", i18n("Copyright"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "Authors", i18n("Author(s)"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "Product", i18n("Product"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "Organization", i18n("Organization"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "Version", i18n("Version"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "DateTime", i18n("Creation Date/Time"), TQVariant::String);
|
||||||
|
item = addItemInfo(group, "Notes", i18n("Comments"), TQVariant::String);
|
||||||
|
|
||||||
|
item = addItemInfo(group2, "EmbeddedIcon", i18n("Icon Name(s)"), TQVariant::String);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool KElfPlugin::readInfo( KFileMetaInfo& info, uint what)
|
||||||
|
{
|
||||||
|
libr_icon *icon = NULL;
|
||||||
|
libr_file *handle = NULL;
|
||||||
|
libr_access_t access = LIBR_READ;
|
||||||
|
|
||||||
|
if((handle = libr_open(const_cast<char*>(info.path().ascii()), access)) == NULL)
|
||||||
|
{
|
||||||
|
kdWarning() << "failed to open file" << info.path() << endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
KFileMetaInfoGroup group = appendGroup(info, "Technical");
|
||||||
|
KFileMetaInfoGroup group2 = appendGroup(info, "Icon");
|
||||||
|
|
||||||
|
appendItem(group, "Name", elf_get_resource(handle, ".metadata_name"));
|
||||||
|
appendItem(group, "Description", elf_get_resource(handle, ".metadata_description"));
|
||||||
|
appendItem(group, "License", elf_get_resource(handle, ".metadata_license"));
|
||||||
|
appendItem(group, "Copyright", elf_get_resource(handle, ".metadata_copyright"));
|
||||||
|
appendItem(group, "Authors", elf_get_resource(handle, ".metadata_authors"));
|
||||||
|
appendItem(group, "Product", elf_get_resource(handle, ".metadata_product"));
|
||||||
|
appendItem(group, "Organization", elf_get_resource(handle, ".metadata_organization"));
|
||||||
|
appendItem(group, "Version", elf_get_resource(handle, ".metadata_version"));
|
||||||
|
appendItem(group, "DateTime", elf_get_resource(handle, ".metadata_datetime"));
|
||||||
|
appendItem(group, "Notes", elf_get_resource(handle, ".metadata_notes"));
|
||||||
|
|
||||||
|
TQString iconListing;
|
||||||
|
|
||||||
|
iconentry *entry = NULL;
|
||||||
|
iconlist icons;
|
||||||
|
if(!get_iconlist(handle, &icons))
|
||||||
|
{
|
||||||
|
// Failed to obtain a list of ELF icons
|
||||||
|
}
|
||||||
|
while((entry = get_nexticon(&icons, entry)) != NULL)
|
||||||
|
{
|
||||||
|
if (iconListing.isEmpty()) {
|
||||||
|
iconListing = entry->name;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
iconListing = iconListing.append("<p>").append(entry->name);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (iconListing.isEmpty()) {
|
||||||
|
iconListing = TQString("<i>") + i18n("not set") + TQString("</i>");
|
||||||
|
}
|
||||||
|
|
||||||
|
appendItem(group2, "EmbeddedIcon", iconListing);
|
||||||
|
|
||||||
|
libr_close(handle);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "kfile_elf.moc"
|
@ -0,0 +1,50 @@
|
|||||||
|
/* This file is part of the KDE project
|
||||||
|
* Copyright (C) 2002 Shane Wright <me@shanewright.co.uk>
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public
|
||||||
|
* License as published by the Free Software Foundation version 2.
|
||||||
|
*
|
||||||
|
* 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; see the file COPYING. If not, write to
|
||||||
|
* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
|
||||||
|
* Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __KFILE_BMP_H__
|
||||||
|
#define __KFILE_BMP_H__
|
||||||
|
|
||||||
|
#include <kfilemetainfo.h>
|
||||||
|
|
||||||
|
// Elven things
|
||||||
|
extern "C" {
|
||||||
|
#include <libr.h>
|
||||||
|
#include <libr-icons.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
class TQStringList;
|
||||||
|
|
||||||
|
class KElfPlugin: public KFilePlugin
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
TQ_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
KElfPlugin( TQObject *parent, const char *name, const TQStringList& args );
|
||||||
|
|
||||||
|
virtual bool readInfo( KFileMetaInfo& info, uint what);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in new issue