/* * * Copyright (c) 2008-2010 Erich Hoover * * libr-icons - Handle icon resources in ELF binaries * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * 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; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * To provide feedback, report bugs, or otherwise contact me: * ehoover at mines dot edu * */ #ifndef __LIBR_ICONS_H #define __LIBR_ICONS_H #include "libr.h" typedef enum { LIBR_SVG = 0, LIBR_PNG = 1 } libr_icontype_t; #define UUIDSTR_LENGTH 37 #define GUIDSTR_LENGTH UUIDSTR_LENGTH #ifdef __LIBR_BUILD__ typedef struct { char *buffer; size_t buffer_size; libr_icontype_t type; unsigned int icon_size; } libr_icon; #else typedef void libr_icon; #endif /************************************************************************* * libr Icon API *************************************************************************/ /** * @page libr_icon_close Release an icon resource handle. * @section SYNOPSIS * \#include * * int libr_icon_close(libr_icon *icon); * * @section DESCRIPTION * Release the icon resource allocated by a call to * libr_icon_geticon_byid(3), libr_icon_geticon_byname(3), * libr_icon_geticon_bysize(3), libr_icon_newicon_byfile(3), * or libr_icon_newicon_frombuffer(3). * * @param icon The icon handle to release. * @return Returns 1 on success, 0 on failure. * * @section SA SEE ALSO * libr_icon_geticon_byid(3), libr_icon_geticon_byname(3), * libr_icon_geticon_bysize(3), libr_icon_newicon_byfile(3), * libr_icon_newicon_frombuffer(3) * * @section AUTHOR * Erich Hoover */ int libr_icon_close(libr_icon *icon); /* libr_icon *libr_icon_geticon_byid(libr_file *handle, unsigned int iconid); */ /** * @page libr_icon_geticon_byname Retrieve an icon resource from an ELF * binary (by the icon resource's name). * @section SYNOPSIS * \#include * * libr_icon *libr_icon_geticon_byname(libr_file *handle, char *iconname); * * @section DESCRIPTION * Return a resource handle to an icon stored in a libr-compatible ELF * binary. When this handle is no-longer needed it must be unallocated * using libr_icon_close(3). * * @param handle A handle returned by libr_open(3). * @param iconname The exact name of the resource to return. * @return Returns a handle on success, NULL on failure. * * @section SA SEE ALSO * libr_open(3), libr_icon_close(3) * * @section AUTHOR * Erich Hoover */ libr_icon *libr_icon_geticon_byname(libr_file *handle, char *iconname); /** * @page libr_icon_geticon_bysize Retrieve an icon resource from an ELF * binary (by the desired icon size). * @section SYNOPSIS * \#include * * libr_icon *libr_icon_geticon_bysize(libr_file *handle, unsigned int iconsize); * * @section DESCRIPTION * Return a resource handle to the closest requested size icon stored * in a libr-compatible ELF binary. When this handle is no-longer * needed it must be unallocated using libr_icon_close(3). * * @param handle A handle returned by libr_open(3). * @param iconsize The size of the resource to return, use 0 * to request an SVG icon. * @return Returns a handle on success, NULL on failure. * * @section SA SEE ALSO * libr_open(3), libr_icon_close(3) * * @section AUTHOR * Erich Hoover */ libr_icon *libr_icon_geticon_bysize(libr_file *handle, unsigned int iconsize); /** * @page libr_icon_getuuid Retrieve the UUID of an application. * @section SYNOPSIS * \#include * * int libr_icon_getuuid(libr_file *handle, char *uuid); * * @section DESCRIPTION * Returns the icon UUID corresponding to the ELF binary in hex notation * (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), which requires a 37 character * buffer (36 data characters and a NULL terminator). * * @param handle A handle returned by libr_open(3). * @param uuid A buffer to store the UUID of the application. * @return Returns 1 on success, 0 on failure. * * @section SA SEE ALSO * libr_open(3), libr_icon_close(3), * libr_icon_setuuid(3) * * @section AUTHOR * Erich Hoover */ int libr_icon_getuuid(libr_file *handle, char *uuid); DEPRECATED_FN int libr_icon_getguid(libr_file *handle, char *uuid); char *libr_icon_malloc(libr_icon *icon, size_t *size); /* libr_icon *libr_icon_newicon_frombuffer(libr_icontype_t type, int iconsize, char *buffer, size_t size); */ libr_icon *libr_icon_newicon_byfile(libr_icontype_t type, unsigned int iconsize, char *iconfile); /* unsigned int libr_icon_num(libr_file *handle); */ int libr_icon_read(libr_icon *icon, char *buffer); int libr_icon_size(libr_icon *icon, size_t *size); int libr_icon_save(libr_icon *icon, char *filename); /** * @page libr_icon_setuuid Write a UUID into an application binary. * @section SYNOPSIS * \#include * * int libr_icon_setuuid(libr_file *handle, char *uuid); * * @section DESCRIPTION * Sets the icon UUID corresponding to the ELF binary in hex notation * (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX), which requires a 37 character * buffer (36 data characters and a NULL terminator). * * @param handle A handle returned by libr_open(3). * @param uuid A UUID to set for the application, can be generated by * the terminal program "uuid". * @return Returns 1 on success, 0 on failure. * * @section SA SEE ALSO * libr_open(3), libr_icon_close(3), * libr_icon_getuuid(3) * * @section AUTHOR * Erich Hoover */ int libr_icon_setuuid(libr_file *handle, char *uuid); DEPRECATED_FN int libr_icon_setguid(libr_file *handle, char *guid); int libr_icon_write(libr_file *handle, libr_icon *icon, char *iconname, libr_overwrite_t overwrite); #endif /* __LIBR_ICONS_H */