summaryrefslogtreecommitdiffstats
path: root/tdelfeditor
diff options
context:
space:
mode:
Diffstat (limited to 'tdelfeditor')
-rw-r--r--tdelfeditor/tdelfeditor.cpp62
-rw-r--r--tdelfeditor/tdelfeditor.h2
2 files changed, 61 insertions, 3 deletions
diff --git a/tdelfeditor/tdelfeditor.cpp b/tdelfeditor/tdelfeditor.cpp
index 14de9d973..0b4cdae30 100644
--- a/tdelfeditor/tdelfeditor.cpp
+++ b/tdelfeditor/tdelfeditor.cpp
@@ -62,6 +62,17 @@ typedef enum {
PARAM_ICON_SIZE = 3,
PARAM_RESOURCE_FILE = 4,
PARAM_ICON_FILE = 4,
+
+ PARAM_EXECUTABLE_NAME = 3,
+ PARAM_DESCRIPTION = 4,
+ PARAM_LICENSE = 5,
+ PARAM_COPYRIGHT = 6,
+ PARAM_AUTHORS = 7,
+ PARAM_PRODUCT = 8,
+ PARAM_ORGANIZATION = 9,
+ PARAM_VERSION = 10,
+ PARAM_DATETIME = 11,
+ PARAM_NOTES = 12,
} eParams;
typedef struct {
@@ -71,13 +82,14 @@ typedef struct {
} IconOptions;
IconOptions elficon_options = {
- "acefgrstv",
+ "acefgmrstv",
{
{"add-icon", 0, 0, 'a'},
{"clear-icons", 0, 0, 'c'},
{"set-empty-uuid", 0, 0, 'e'},
{"find-icon", 0, 0, 'f'},
{"get-uuid", 0, 0, 'g'},
+ {"write-metadata", 0, 0, 'm'},
{"retrieve-icon", 0, 0, 'r'},
{"set-uuid", 0, 0, 's'},
{"tde-autoadd-icon", 0, 0, 't'},
@@ -90,6 +102,7 @@ IconOptions elficon_options = {
N_("set an empty icon UUID for the ELF file"),
N_("find an ELF icon in the file by closest size"),
N_("get the icon UUID for the file"),
+ N_("write metadata information to the ELF file"),
N_("retrieve an icon from the ELF file"),
N_("set the icon UUID for the ELF file"),
N_("automatically add the appropriate TDE icon to the ELF file"),
@@ -135,6 +148,7 @@ typedef enum {
MODE_SET_EMPTY_UUID,
MODE_GET_UUID,
MODE_FIND_ICON,
+ MODE_SET_METADATA,
MODE_LAUNCH_GUI
} eMode;
@@ -192,6 +206,10 @@ int handle_arguments(int argc, char **argv, eMode *mode)
*mode = MODE_GET_UUID;
required_params = 3;
break;
+ case 'm':
+ *mode = MODE_SET_METADATA;
+ required_params = 13;
+ break;
case 'r':
*mode = MODE_RETRIEVE_ICON;
required_params = 5;
@@ -220,6 +238,8 @@ print_icon_usage:
fprintf(stderr, _("usage: %s [-t] elf-file-name icon-name\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("usage: %s [-c|-e|-g] elf-file-name\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("usage: %s [-s] elf-file-name uuid\n"), argv[PARAM_PROGNAME]);
+ fprintf(stderr, _("usage: %s [-s] elf-file-name uuid\n"), argv[PARAM_PROGNAME]);
+ fprintf(stderr, _("usage: %s [-m] elf-file-name \"executable name\" \"description\" \"license\" \"copyright\" \"authors\" \"product\" \"organization\" \"version\" \"datetime\" \"notes\"\n"), argv[PARAM_PROGNAME]);
fprintf(stderr, _("If -t is set the TDEDIRS environment variable must include your TDE installation prefix\n"));
fprintf(stderr, _("for example: TDEDIRS=/opt/trinity ./tdelfeditor -t ./konqueror konqueror\n"));
for(i=0;i<ELFICON_OPTIONS;i++)
@@ -286,6 +306,28 @@ done_handle:
}
/*
+ * Add a resource string to an ELF file
+ */
+int add_resource_string(libr_file *libr_handle, char *resource_name, char *input_string)
+{
+ off_t size, len;
+ int ret = FALSE;
+
+ size = strlen(input_string);
+ /* Allocate buffers for the uncompressed and compressed data */
+ /* Compress the data */
+ if(!libr_write(libr_handle, resource_name, input_string, size, LIBR_COMPRESSED, LIBR_OVERWRITE))
+ {
+ errorf(_("failed to write ELF resource: %s"), libr_errmsg());
+ goto done_buffer;
+ }
+
+ ret = TRUE;
+done_buffer:
+ return ret;
+}
+
+/*
* Get a resource stored in an ELF file
*/
void get_resource(libr_file *handle, char *section_name, char *output_file)
@@ -381,7 +423,7 @@ int main_console(int argc, char **argv)
if(mode == MODE_CLEAR_ICON || mode == MODE_CLEAR_RESOURCE
|| mode == MODE_ADD_ICON || mode == MODE_ADD_RESOURCE
|| mode == MODE_SET_UUID || mode == MODE_TDE_AUTOADD_ICON
- || mode == MODE_SET_EMPTY_UUID)
+ || mode == MODE_SET_EMPTY_UUID || mode == MODE_SET_METADATA)
{
access = LIBR_READ_WRITE;
}
@@ -433,6 +475,22 @@ int main_console(int argc, char **argv)
goto fail;
}
break;
+ case MODE_SET_METADATA:
+ {
+ // There are 10 of these
+ // The metadata sequence is:
+ // "executable name" "description" "license" "copyright" "authors" "product" "organization" "version" "datetime" "notes"
+ add_resource_string(handle, ".metadata_name", argv[PARAM_EXECUTABLE_NAME]);
+ add_resource_string(handle, ".metadata_description", argv[PARAM_DESCRIPTION]);
+ add_resource_string(handle, ".metadata_license", argv[PARAM_LICENSE]);
+ add_resource_string(handle, ".metadata_copyright", argv[PARAM_COPYRIGHT]);
+ add_resource_string(handle, ".metadata_authors", argv[PARAM_AUTHORS]);
+ add_resource_string(handle, ".metadata_product", argv[PARAM_PRODUCT]);
+ add_resource_string(handle, ".metadata_organization", argv[PARAM_ORGANIZATION]);
+ add_resource_string(handle, ".metadata_version", argv[PARAM_VERSION]);
+ add_resource_string(handle, ".metadata_datetime", argv[PARAM_DATETIME]);
+ add_resource_string(handle, ".metadata_notes", argv[PARAM_NOTES]);
+ } break;
case MODE_SET_EMPTY_UUID:
if(!libr_icon_setuuid(handle, "00000000-0000-0000-0000-000000000000"))
{
diff --git a/tdelfeditor/tdelfeditor.h b/tdelfeditor/tdelfeditor.h
index 6cfdeddfc..f94d83516 100644
--- a/tdelfeditor/tdelfeditor.h
+++ b/tdelfeditor/tdelfeditor.h
@@ -30,7 +30,7 @@ extern "C" {
#define ERROR -1
#define ERROR_BUF 1024
-#define ELFICON_OPTIONS 9
+#define ELFICON_OPTIONS 10
#define ICON_SECTION ".icon"
#define con_err(...) fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n")
#define errorf(...) con_err(__VA_ARGS__)