tdeio/tdeio
tdelficon.cpp
00001 #include "config.h"
00002 #include "tdelficon.h"
00003
00004 #ifdef HAVE_ALLOCA_H
00005 #include <alloca.h>
00006 #endif
00007 #include <cstring>
00008
00009
00010
00011
00012 int get_iconlist(libr_file *file_handle, iconlist *icons)
00013 {
00014 if(icons == NULL)
00015 {
00016
00017 return false;
00018 }
00019
00020 icons->buffer = libr_malloc(file_handle, ICON_SECTION, &(icons->size));
00021 if(icons->buffer == NULL)
00022 return false;
00023 return true;
00024 }
00025
00026
00027
00028
00029 iconentry *get_nexticon(iconlist *icons, iconentry *last_entry)
00030 {
00031 size_t i;
00032
00033
00034 if(icons == NULL)
00035 return NULL;
00036
00037 if(last_entry == NULL)
00038 icons->entry.offset = sizeof(uint32_t)+sizeof(UUID);
00039 else
00040 icons->entry.offset += icons->entry.entry_size;
00041
00042 if(icons->entry.offset >= icons->size)
00043 return NULL;
00044 i = icons->entry.offset;
00045 memcpy(&(icons->entry.entry_size), &(icons->buffer[i]), sizeof(uint32_t));
00046 i += sizeof(uint32_t);
00047 icons->entry.type = (libr_icontype_t)icons->buffer[i];
00048 i += sizeof(unsigned char);
00049 switch(icons->entry.type)
00050 {
00051 case LIBR_SVG:
00052 icons->entry.icon_size = 0;
00053 icons->entry.name = &(icons->buffer[i]);
00054 break;
00055 case LIBR_PNG:
00056 memcpy(&(icons->entry.icon_size), &(icons->buffer[i]), sizeof(uint32_t));
00057 i += sizeof(uint32_t);
00058 icons->entry.name = &(icons->buffer[i]);
00059 break;
00060 default:
00061
00062 return NULL;
00063 }
00064 return &(icons->entry);
00065 }
00066
00067 TQString elf_get_resource(libr_file *handle, char *section_name)
00068 {
00069 size_t buffer_size = 0;
00070 char *buffer = NULL;
00071 TQString result;
00072
00073
00074 if(!libr_size(handle, section_name, &buffer_size))
00075 {
00076
00077 return result;
00078 }
00079
00080 buffer = (char *) malloc(buffer_size+1);
00081 buffer[buffer_size] = 0;
00082 if(!libr_read(handle, section_name, buffer))
00083 {
00084
00085 goto fail;
00086 }
00087 result = buffer;
00088
00089 fail:
00090 free(buffer);
00091
00092 return result;
00093 }