diff options
author | Christopher Wiley <wiley@google.com> | 2015-12-17 15:13:08 -0800 |
---|---|---|
committer | Christopher Wiley <wiley@google.com> | 2015-12-17 15:13:08 -0800 |
commit | 23ddfaded12f06bd859e8365f60d976c9afc46e3 (patch) | |
tree | 7d4911e210d747936057ed2837dfac4402715de8 /base | |
parent | 9b0969a8efb263bfb8012fd24191a8df9fa6a50e (diff) | |
download | libchrome-23ddfaded12f06bd859e8365f60d976c9afc46e3.tar.gz |
Remove xdg_* libraries from base/third_party
Bug: 26253162
Change-Id: I22a10863d856c60240ee8e5139bbb680bed2807e
Test: Compiles
Diffstat (limited to 'base')
27 files changed, 0 insertions, 5430 deletions
diff --git a/base/third_party/xdg_mime/BUILD.gn b/base/third_party/xdg_mime/BUILD.gn deleted file mode 100644 index 72a3038777..0000000000 --- a/base/third_party/xdg_mime/BUILD.gn +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -source_set("xdg_mime") { - visibility = [ "//base/*" ] - sources = [ - "xdgmime.c", - "xdgmime.h", - "xdgmimealias.c", - "xdgmimealias.h", - "xdgmimecache.c", - "xdgmimecache.h", - "xdgmimeglob.c", - "xdgmimeglob.h", - "xdgmimeicon.c", - "xdgmimeicon.h", - "xdgmimeint.c", - "xdgmimeint.h", - "xdgmimemagic.c", - "xdgmimemagic.h", - "xdgmimeparent.c", - "xdgmimeparent.h", - ] - - configs -= [ "//build/config/compiler:chromium_code" ] - configs += [ "//build/config/compiler:no_chromium_code" ] -} diff --git a/base/third_party/xdg_mime/LICENSE b/base/third_party/xdg_mime/LICENSE deleted file mode 100644 index 55fedcff5a..0000000000 --- a/base/third_party/xdg_mime/LICENSE +++ /dev/null @@ -1,168 +0,0 @@ -Licensed under the Academic Free License version 2.0 (below) -Or under the following terms: - -This library 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 of the License, or (at your option) any later version. - -This library 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 -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the -Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. - - --------------------------------------------------------------------------------- -Academic Free License v. 2.0 --------------------------------------------------------------------------------- - -This Academic Free License (the "License") applies to any original work of -authorship (the "Original Work") whose owner (the "Licensor") has placed the -following notice immediately following the copyright notice for the Original -Work: - -Licensed under the Academic Free License version 2.0 -1) Grant of Copyright License. Licensor hereby grants You a world-wide, -royalty-free, non-exclusive, perpetual, sublicenseable license to do the -following: - -a) to reproduce the Original Work in copies; -b) to prepare derivative works ("Derivative Works") based upon the Original - Work; -c) to distribute copies of the Original Work and Derivative Works to the - public; -d) to perform the Original Work publicly; and -e) to display the Original Work publicly. - -2) Grant of Patent License. Licensor hereby grants You a world-wide, -royalty-free, non-exclusive, perpetual, sublicenseable license, under patent -claims owned or controlled by the Licensor that are embodied in the Original -Work as furnished by the Licensor, to make, use, sell and offer for sale the -Original Work and Derivative Works. - -3) Grant of Source Code License. The term "Source Code" means the preferred -form of the Original Work for making modifications to it and all available -documentation describing how to modify the Original Work. Licensor hereby -agrees to provide a machine-readable copy of the Source Code of the Original -Work along with each copy of the Original Work that Licensor distributes. -Licensor reserves the right to satisfy this obligation by placing a -machine-readable copy of the Source Code in an information repository -reasonably calculated to permit inexpensive and convenient access by You for as -long as Licensor continues to distribute the Original Work, and by publishing -the address of that information repository in a notice immediately following -the copyright notice that applies to the Original Work. - -4) Exclusions From License Grant. Neither the names of Licensor, nor the names -of any contributors to the Original Work, nor any of their trademarks or -service marks, may be used to endorse or promote products derived from this -Original Work without express prior written permission of the Licensor. Nothing -in this License shall be deemed to grant any rights to trademarks, copyrights, -patents, trade secrets or any other intellectual property of Licensor except as -expressly stated herein. No patent license is granted to make, use, sell or -offer to sell embodiments of any patent claims other than the licensed claims -defined in Section 2. No right is granted to the trademarks of Licensor even if -such marks are included in the Original Work. Nothing in this License shall be -interpreted to prohibit Licensor from licensing under different terms from this -License any Original Work that Licensor otherwise would have a right to -license. - -5) This section intentionally omitted. - -6) Attribution Rights. You must retain, in the Source Code of any Derivative -Works that You create, all copyright, patent or trademark notices from the -Source Code of the Original Work, as well as any notices of licensing and any -descriptive text identified therein as an "Attribution Notice." You must cause -the Source Code for any Derivative Works that You create to carry a prominent -Attribution Notice reasonably calculated to inform recipients that You have -modified the Original Work. - -7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that -the copyright in and to the Original Work and the patent rights granted herein -by Licensor are owned by the Licensor or are sublicensed to You under the terms -of this License with the permission of the contributor(s) of those copyrights -and patent rights. Except as expressly stated in the immediately proceeding -sentence, the Original Work is provided under this License on an "AS IS" BASIS -and WITHOUT WARRANTY, either express or implied, including, without limitation, -the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. -This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No -license to Original Work is granted hereunder except under this disclaimer. - -8) Limitation of Liability. Under no circumstances and under no legal theory, -whether in tort (including negligence), contract, or otherwise, shall the -Licensor be liable to any person for any direct, indirect, special, incidental, -or consequential damages of any character arising as a result of this License -or the use of the Original Work including, without limitation, damages for loss -of goodwill, work stoppage, computer failure or malfunction, or any and all -other commercial damages or losses. This limitation of liability shall not -apply to liability for death or personal injury resulting from Licensor's -negligence to the extent applicable law prohibits such limitation. Some -jurisdictions do not allow the exclusion or limitation of incidental or -consequential damages, so this exclusion and limitation may not apply to You. - -9) Acceptance and Termination. If You distribute copies of the Original Work or -a Derivative Work, You must make a reasonable effort under the circumstances to -obtain the express assent of recipients to the terms of this License. Nothing -else but this License (or another written agreement between Licensor and You) -grants You permission to create Derivative Works based upon the Original Work -or to exercise any of the rights granted in Section 1 herein, and any attempt -to do so except under the terms of this License (or another written agreement -between Licensor and You) is expressly prohibited by U.S. copyright law, the -equivalent laws of other countries, and by international treaty. Therefore, by -exercising any of the rights granted to You in Section 1 herein, You indicate -Your acceptance of this License and all of its terms and conditions. - -10) Termination for Patent Action. This License shall terminate automatically -and You may no longer exercise any of the rights granted to You by this License -as of the date You commence an action, including a cross-claim or counterclaim, -for patent infringement (i) against Licensor with respect to a patent -applicable to software or (ii) against any entity with respect to a patent -applicable to the Original Work (but excluding combinations of the Original -Work with other software or hardware). - -11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this -License may be brought only in the courts of a jurisdiction wherein the -Licensor resides or in which Licensor conducts its primary business, and under -the laws of that jurisdiction excluding its conflict-of-law provisions. The -application of the United Nations Convention on Contracts for the International -Sale of Goods is expressly excluded. Any use of the Original Work outside the -scope of this License or after its termination shall be subject to the -requirements and penalties of the U.S. Copyright Act, 17 U.S.C. 101 et seq., -the equivalent laws of other countries, and international treaty. This section -shall survive the termination of this License. - -12) Attorneys Fees. In any action to enforce the terms of this License or -seeking damages relating thereto, the prevailing party shall be entitled to -recover its costs and expenses, including, without limitation, reasonable -attorneys' fees and costs incurred in connection with such action, including -any appeal of such action. This section shall survive the termination of this -License. - -13) Miscellaneous. This License represents the complete agreement concerning -the subject matter hereof. If any provision of this License is held to be -unenforceable, such provision shall be reformed only to the extent necessary to -make it enforceable. - -14) Definition of "You" in This License. "You" throughout this License, whether -in upper or lower case, means an individual or a legal entity exercising rights -under, and complying with all of the terms of, this License. For legal -entities, "You" includes any entity that controls, is controlled by, or is -under common control with you. For purposes of this definition, "control" means -(i) the power, direct or indirect, to cause the direction or management of such -entity, whether by contract or otherwise, or (ii) ownership of fifty percent -(50%) or more of the outstanding shares, or (iii) beneficial ownership of such -entity. - -15) Right to Use. You may use the Original Work in all ways not otherwise -restricted or conditioned by this License or by law, and Licensor promises not -to interfere with or be responsible for such uses by You. - -This license is Copyright (C) 2003 Lawrence E. Rosen. All rights reserved. -Permission is hereby granted to copy and distribute this license without -modification. This license may not be modified without the express written -permission of its copyright owner. diff --git a/base/third_party/xdg_mime/README b/base/third_party/xdg_mime/README deleted file mode 100644 index e7f3f6859d..0000000000 --- a/base/third_party/xdg_mime/README +++ /dev/null @@ -1,8 +0,0 @@ -This module is a simple module that parses the proposed MIME spec listed -at http://freedesktop.org/. It is currently targetted at version 0.12. -There are no formal releases planned for this module, and it is not -intended to be installed at this time. Rather, it is meant to be used -by other libraries or applications to add support for the MIME system. - -It is dual-licensed under the terms of the GNU Lesser General Public -License, and the Academic Free License, version 2.0. diff --git a/base/third_party/xdg_mime/README.chromium b/base/third_party/xdg_mime/README.chromium deleted file mode 100644 index 95f3a9658d..0000000000 --- a/base/third_party/xdg_mime/README.chromium +++ /dev/null @@ -1,13 +0,0 @@ -Name: xdg-mime -URL: http://freedesktop.org -License: Academic Free License version 2.0 or LGPL v2 - -The code in this directory is synced from: -git://anongit.freedesktop.org/xdg/xdgmime -@ 2cdd8d36d7930d5a594587286cb1949ff62f7027 on 2012/08/06. - -In addition, we have the following patch(es): - - compile.patch: small tweaks to make the code compile. - - free_pointer_later.patch: small patch that fixes potential crash in - xdg_mime_get_mime_type_for_file() - use of pointer after being freed. - - Added a LICENSE file. diff --git a/base/third_party/xdg_mime/compile.patch b/base/third_party/xdg_mime/compile.patch deleted file mode 100644 index cd055edc03..0000000000 --- a/base/third_party/xdg_mime/compile.patch +++ /dev/null @@ -1,17 +0,0 @@ ---- a/xdgmimecache.c -+++ b/xdgmimecache.c -@@ -40,6 +40,8 @@ - - #include <netinet/in.h> /* for ntohl/ntohs */ - -+#define HAVE_MMAP 1 -+ - #ifdef HAVE_MMAP - #include <sys/mman.h> - #else -@@ -1000,5 +1002,3 @@ - dump_glob_node (cache, offset + 20 * j, 0); - } - } -- -- diff --git a/base/third_party/xdg_mime/free_pointer_later.patch b/base/third_party/xdg_mime/free_pointer_later.patch deleted file mode 100644 index 76687610d5..0000000000 --- a/base/third_party/xdg_mime/free_pointer_later.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff --git a/base/third_party/xdg_mime/xdgmime.c b/base/third_party/xdg_mime/xdgmime.c -index c7b16bb..6dc58c2 100644 ---- a/base/third_party/xdg_mime/xdgmime.c -+++ b/base/third_party/xdg_mime/xdgmime.c -@@ -558,13 +558,13 @@ xdg_mime_get_mime_type_for_file (const char *file_name, - mime_type = _xdg_mime_magic_lookup_data (global_magic, data, bytes_read, NULL, - mime_types, n); - -- free (data); - fclose (file); - -- if (mime_type) -- return mime_type; -+ if (!mime_type) -+ mime_type = _xdg_binary_or_text_fallback(data, bytes_read); - -- return _xdg_binary_or_text_fallback(data, bytes_read); -+ free (data); -+ return mime_type; - } - - const char * diff --git a/base/third_party/xdg_mime/xdgmime.c b/base/third_party/xdg_mime/xdgmime.c deleted file mode 100644 index 6dc58c253f..0000000000 --- a/base/third_party/xdg_mime/xdgmime.c +++ /dev/null @@ -1,934 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmime.c: XDG Mime Spec mime resolver. Based on version 0.11 of the spec. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003,2004 Red Hat, Inc. - * Copyright (C) 2003,2004 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "xdgmime.h" -#include "xdgmimeint.h" -#include "xdgmimeglob.h" -#include "xdgmimemagic.h" -#include "xdgmimealias.h" -#include "xdgmimeicon.h" -#include "xdgmimeparent.h" -#include "xdgmimecache.h" -#include <stdio.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <sys/time.h> -#include <unistd.h> -#include <assert.h> - -typedef struct XdgDirTimeList XdgDirTimeList; -typedef struct XdgCallbackList XdgCallbackList; - -static int need_reread = TRUE; -static time_t last_stat_time = 0; - -static XdgGlobHash *global_hash = NULL; -static XdgMimeMagic *global_magic = NULL; -static XdgAliasList *alias_list = NULL; -static XdgParentList *parent_list = NULL; -static XdgDirTimeList *dir_time_list = NULL; -static XdgCallbackList *callback_list = NULL; -static XdgIconList *icon_list = NULL; -static XdgIconList *generic_icon_list = NULL; - -XdgMimeCache **_caches = NULL; -static int n_caches = 0; - -const char xdg_mime_type_unknown[] = "application/octet-stream"; -const char xdg_mime_type_empty[] = "application/x-zerosize"; -const char xdg_mime_type_textplain[] = "text/plain"; - - -enum -{ - XDG_CHECKED_UNCHECKED, - XDG_CHECKED_VALID, - XDG_CHECKED_INVALID -}; - -struct XdgDirTimeList -{ - time_t mtime; - char *directory_name; - int checked; - XdgDirTimeList *next; -}; - -struct XdgCallbackList -{ - XdgCallbackList *next; - XdgCallbackList *prev; - int callback_id; - XdgMimeCallback callback; - void *data; - XdgMimeDestroy destroy; -}; - -/* Function called by xdg_run_command_on_dirs. If it returns TRUE, further - * directories aren't looked at */ -typedef int (*XdgDirectoryFunc) (const char *directory, - void *user_data); - -static void -xdg_dir_time_list_add (char *file_name, - time_t mtime) -{ - XdgDirTimeList *list; - - for (list = dir_time_list; list; list = list->next) - { - if (strcmp (list->directory_name, file_name) == 0) - { - free (file_name); - return; - } - } - - list = calloc (1, sizeof (XdgDirTimeList)); - list->checked = XDG_CHECKED_UNCHECKED; - list->directory_name = file_name; - list->mtime = mtime; - list->next = dir_time_list; - dir_time_list = list; -} - -static void -xdg_dir_time_list_free (XdgDirTimeList *list) -{ - XdgDirTimeList *next; - - while (list) - { - next = list->next; - free (list->directory_name); - free (list); - list = next; - } -} - -static int -xdg_mime_init_from_directory (const char *directory) -{ - char *file_name; - struct stat st; - - assert (directory != NULL); - - file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache"); - if (stat (file_name, &st) == 0) - { - XdgMimeCache *cache = _xdg_mime_cache_new_from_file (file_name); - - if (cache != NULL) - { - xdg_dir_time_list_add (file_name, st.st_mtime); - - _caches = realloc (_caches, sizeof (XdgMimeCache *) * (n_caches + 2)); - _caches[n_caches] = cache; - _caches[n_caches + 1] = NULL; - n_caches++; - - return FALSE; - } - } - free (file_name); - - file_name = malloc (strlen (directory) + strlen ("/mime/globs2") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/globs2"); - if (stat (file_name, &st) == 0) - { - _xdg_mime_glob_read_from_file (global_hash, file_name, TRUE); - xdg_dir_time_list_add (file_name, st.st_mtime); - } - else - { - free (file_name); - file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/globs"); - if (stat (file_name, &st) == 0) - { - _xdg_mime_glob_read_from_file (global_hash, file_name, FALSE); - xdg_dir_time_list_add (file_name, st.st_mtime); - } - else - { - free (file_name); - } - } - - file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/magic"); - if (stat (file_name, &st) == 0) - { - _xdg_mime_magic_read_from_file (global_magic, file_name); - xdg_dir_time_list_add (file_name, st.st_mtime); - } - else - { - free (file_name); - } - - file_name = malloc (strlen (directory) + strlen ("/mime/aliases") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/aliases"); - _xdg_mime_alias_read_from_file (alias_list, file_name); - free (file_name); - - file_name = malloc (strlen (directory) + strlen ("/mime/subclasses") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/subclasses"); - _xdg_mime_parent_read_from_file (parent_list, file_name); - free (file_name); - - file_name = malloc (strlen (directory) + strlen ("/mime/icons") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/icons"); - _xdg_mime_icon_read_from_file (icon_list, file_name); - free (file_name); - - file_name = malloc (strlen (directory) + strlen ("/mime/generic-icons") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/generic-icons"); - _xdg_mime_icon_read_from_file (generic_icon_list, file_name); - free (file_name); - - return FALSE; /* Keep processing */ -} - -/* Runs a command on all the directories in the search path */ -static void -xdg_run_command_on_dirs (XdgDirectoryFunc func, - void *user_data) -{ - const char *xdg_data_home; - const char *xdg_data_dirs; - const char *ptr; - - xdg_data_home = getenv ("XDG_DATA_HOME"); - if (xdg_data_home) - { - if ((func) (xdg_data_home, user_data)) - return; - } - else - { - const char *home; - - home = getenv ("HOME"); - if (home != NULL) - { - char *guessed_xdg_home; - int stop_processing; - - guessed_xdg_home = malloc (strlen (home) + strlen ("/.local/share/") + 1); - strcpy (guessed_xdg_home, home); - strcat (guessed_xdg_home, "/.local/share/"); - stop_processing = (func) (guessed_xdg_home, user_data); - free (guessed_xdg_home); - - if (stop_processing) - return; - } - } - - xdg_data_dirs = getenv ("XDG_DATA_DIRS"); - if (xdg_data_dirs == NULL) - xdg_data_dirs = "/usr/local/share/:/usr/share/"; - - ptr = xdg_data_dirs; - - while (*ptr != '\000') - { - const char *end_ptr; - char *dir; - int len; - int stop_processing; - - end_ptr = ptr; - while (*end_ptr != ':' && *end_ptr != '\000') - end_ptr ++; - - if (end_ptr == ptr) - { - ptr++; - continue; - } - - if (*end_ptr == ':') - len = end_ptr - ptr; - else - len = end_ptr - ptr + 1; - dir = malloc (len + 1); - strncpy (dir, ptr, len); - dir[len] = '\0'; - stop_processing = (func) (dir, user_data); - free (dir); - - if (stop_processing) - return; - - ptr = end_ptr; - } -} - -/* Checks file_path to make sure it has the same mtime as last time it was - * checked. If it has a different mtime, or if the file doesn't exist, it - * returns FALSE. - * - * FIXME: This doesn't protect against permission changes. - */ -static int -xdg_check_file (const char *file_path, - int *exists) -{ - struct stat st; - - /* If the file exists */ - if (stat (file_path, &st) == 0) - { - XdgDirTimeList *list; - - if (exists) - *exists = TRUE; - - for (list = dir_time_list; list; list = list->next) - { - if (! strcmp (list->directory_name, file_path)) - { - if (st.st_mtime == list->mtime) - list->checked = XDG_CHECKED_VALID; - else - list->checked = XDG_CHECKED_INVALID; - - return (list->checked != XDG_CHECKED_VALID); - } - } - return TRUE; - } - - if (exists) - *exists = FALSE; - - return FALSE; -} - -static int -xdg_check_dir (const char *directory, - int *invalid_dir_list) -{ - int invalid, exists; - char *file_name; - - assert (directory != NULL); - - /* Check the mime.cache file */ - file_name = malloc (strlen (directory) + strlen ("/mime/mime.cache") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/mime.cache"); - invalid = xdg_check_file (file_name, &exists); - free (file_name); - if (invalid) - { - *invalid_dir_list = TRUE; - return TRUE; - } - else if (exists) - { - return FALSE; - } - - /* Check the globs file */ - file_name = malloc (strlen (directory) + strlen ("/mime/globs") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/globs"); - invalid = xdg_check_file (file_name, NULL); - free (file_name); - if (invalid) - { - *invalid_dir_list = TRUE; - return TRUE; - } - - /* Check the magic file */ - file_name = malloc (strlen (directory) + strlen ("/mime/magic") + 1); - strcpy (file_name, directory); strcat (file_name, "/mime/magic"); - invalid = xdg_check_file (file_name, NULL); - free (file_name); - if (invalid) - { - *invalid_dir_list = TRUE; - return TRUE; - } - - return FALSE; /* Keep processing */ -} - -/* Walks through all the mime files stat()ing them to see if they've changed. - * Returns TRUE if they have. */ -static int -xdg_check_dirs (void) -{ - XdgDirTimeList *list; - int invalid_dir_list = FALSE; - - for (list = dir_time_list; list; list = list->next) - list->checked = XDG_CHECKED_UNCHECKED; - - xdg_run_command_on_dirs ((XdgDirectoryFunc) xdg_check_dir, - &invalid_dir_list); - - if (invalid_dir_list) - return TRUE; - - for (list = dir_time_list; list; list = list->next) - { - if (list->checked != XDG_CHECKED_VALID) - return TRUE; - } - - return FALSE; -} - -/* We want to avoid stat()ing on every single mime call, so we only look for - * newer files every 5 seconds. This will return TRUE if we need to reread the - * mime data from disk. - */ -static int -xdg_check_time_and_dirs (void) -{ - struct timeval tv; - time_t current_time; - int retval = FALSE; - - gettimeofday (&tv, NULL); - current_time = tv.tv_sec; - - if (current_time >= last_stat_time + 5) - { - retval = xdg_check_dirs (); - last_stat_time = current_time; - } - - return retval; -} - -/* Called in every public function. It reloads the hash function if need be. - */ -static void -xdg_mime_init (void) -{ - if (xdg_check_time_and_dirs ()) - { - xdg_mime_shutdown (); - } - - if (need_reread) - { - global_hash = _xdg_glob_hash_new (); - global_magic = _xdg_mime_magic_new (); - alias_list = _xdg_mime_alias_list_new (); - parent_list = _xdg_mime_parent_list_new (); - icon_list = _xdg_mime_icon_list_new (); - generic_icon_list = _xdg_mime_icon_list_new (); - - xdg_run_command_on_dirs ((XdgDirectoryFunc) xdg_mime_init_from_directory, - NULL); - - need_reread = FALSE; - } -} - -const char * -xdg_mime_get_mime_type_for_data (const void *data, - size_t len, - int *result_prio) -{ - const char *mime_type; - - if (len == 0) - { - *result_prio = 100; - return XDG_MIME_TYPE_EMPTY; - } - - xdg_mime_init (); - - if (_caches) - mime_type = _xdg_mime_cache_get_mime_type_for_data (data, len, result_prio); - else - mime_type = _xdg_mime_magic_lookup_data (global_magic, data, len, result_prio, NULL, 0); - - if (mime_type) - return mime_type; - - return _xdg_binary_or_text_fallback(data, len); -} - -const char * -xdg_mime_get_mime_type_for_file (const char *file_name, - struct stat *statbuf) -{ - const char *mime_type; - /* currently, only a few globs occur twice, and none - * more often, so 5 seems plenty. - */ - const char *mime_types[5]; - FILE *file; - unsigned char *data; - int max_extent; - int bytes_read; - struct stat buf; - const char *base_name; - int n; - - if (file_name == NULL) - return NULL; - if (! _xdg_utf8_validate (file_name)) - return NULL; - - xdg_mime_init (); - - if (_caches) - return _xdg_mime_cache_get_mime_type_for_file (file_name, statbuf); - - base_name = _xdg_get_base_name (file_name); - n = _xdg_glob_hash_lookup_file_name (global_hash, base_name, mime_types, 5); - - if (n == 1) - return mime_types[0]; - - if (!statbuf) - { - if (stat (file_name, &buf) != 0) - return XDG_MIME_TYPE_UNKNOWN; - - statbuf = &buf; - } - - if (!S_ISREG (statbuf->st_mode)) - return XDG_MIME_TYPE_UNKNOWN; - - /* FIXME: Need to make sure that max_extent isn't totally broken. This could - * be large and need getting from a stream instead of just reading it all - * in. */ - max_extent = _xdg_mime_magic_get_buffer_extents (global_magic); - data = malloc (max_extent); - if (data == NULL) - return XDG_MIME_TYPE_UNKNOWN; - - file = fopen (file_name, "r"); - if (file == NULL) - { - free (data); - return XDG_MIME_TYPE_UNKNOWN; - } - - bytes_read = fread (data, 1, max_extent, file); - if (ferror (file)) - { - free (data); - fclose (file); - return XDG_MIME_TYPE_UNKNOWN; - } - - mime_type = _xdg_mime_magic_lookup_data (global_magic, data, bytes_read, NULL, - mime_types, n); - - fclose (file); - - if (!mime_type) - mime_type = _xdg_binary_or_text_fallback(data, bytes_read); - - free (data); - return mime_type; -} - -const char * -xdg_mime_get_mime_type_from_file_name (const char *file_name) -{ - const char *mime_type; - - xdg_mime_init (); - - if (_caches) - return _xdg_mime_cache_get_mime_type_from_file_name (file_name); - - if (_xdg_glob_hash_lookup_file_name (global_hash, file_name, &mime_type, 1)) - return mime_type; - else - return XDG_MIME_TYPE_UNKNOWN; -} - -int -xdg_mime_get_mime_types_from_file_name (const char *file_name, - const char *mime_types[], - int n_mime_types) -{ - xdg_mime_init (); - - if (_caches) - return _xdg_mime_cache_get_mime_types_from_file_name (file_name, mime_types, n_mime_types); - - return _xdg_glob_hash_lookup_file_name (global_hash, file_name, mime_types, n_mime_types); -} - -int -xdg_mime_is_valid_mime_type (const char *mime_type) -{ - /* FIXME: We should make this a better test - */ - return _xdg_utf8_validate (mime_type); -} - -void -xdg_mime_shutdown (void) -{ - XdgCallbackList *list; - - /* FIXME: Need to make this (and the whole library) thread safe */ - if (dir_time_list) - { - xdg_dir_time_list_free (dir_time_list); - dir_time_list = NULL; - } - - if (global_hash) - { - _xdg_glob_hash_free (global_hash); - global_hash = NULL; - } - if (global_magic) - { - _xdg_mime_magic_free (global_magic); - global_magic = NULL; - } - - if (alias_list) - { - _xdg_mime_alias_list_free (alias_list); - alias_list = NULL; - } - - if (parent_list) - { - _xdg_mime_parent_list_free (parent_list); - parent_list = NULL; - } - - if (icon_list) - { - _xdg_mime_icon_list_free (icon_list); - icon_list = NULL; - } - - if (generic_icon_list) - { - _xdg_mime_icon_list_free (generic_icon_list); - generic_icon_list = NULL; - } - - if (_caches) - { - int i; - - for (i = 0; i < n_caches; i++) - _xdg_mime_cache_unref (_caches[i]); - free (_caches); - _caches = NULL; - n_caches = 0; - } - - for (list = callback_list; list; list = list->next) - (list->callback) (list->data); - - need_reread = TRUE; -} - -int -xdg_mime_get_max_buffer_extents (void) -{ - xdg_mime_init (); - - if (_caches) - return _xdg_mime_cache_get_max_buffer_extents (); - - return _xdg_mime_magic_get_buffer_extents (global_magic); -} - -const char * -_xdg_mime_unalias_mime_type (const char *mime_type) -{ - const char *lookup; - - if (_caches) - return _xdg_mime_cache_unalias_mime_type (mime_type); - - if ((lookup = _xdg_mime_alias_list_lookup (alias_list, mime_type)) != NULL) - return lookup; - - return mime_type; -} - -const char * -xdg_mime_unalias_mime_type (const char *mime_type) -{ - xdg_mime_init (); - - return _xdg_mime_unalias_mime_type (mime_type); -} - -int -_xdg_mime_mime_type_equal (const char *mime_a, - const char *mime_b) -{ - const char *unalias_a, *unalias_b; - - unalias_a = _xdg_mime_unalias_mime_type (mime_a); - unalias_b = _xdg_mime_unalias_mime_type (mime_b); - - if (strcmp (unalias_a, unalias_b) == 0) - return 1; - - return 0; -} - -int -xdg_mime_mime_type_equal (const char *mime_a, - const char *mime_b) -{ - xdg_mime_init (); - - return _xdg_mime_mime_type_equal (mime_a, mime_b); -} - -int -xdg_mime_media_type_equal (const char *mime_a, - const char *mime_b) -{ - char *sep; - - sep = strchr (mime_a, '/'); - - if (sep && strncmp (mime_a, mime_b, sep - mime_a + 1) == 0) - return 1; - - return 0; -} - -#if 1 -static int -xdg_mime_is_super_type (const char *mime) -{ - int length; - const char *type; - - length = strlen (mime); - type = &(mime[length - 2]); - - if (strcmp (type, "/*") == 0) - return 1; - - return 0; -} -#endif - -int -_xdg_mime_mime_type_subclass (const char *mime, - const char *base) -{ - const char *umime, *ubase; - const char **parents; - - if (_caches) - return _xdg_mime_cache_mime_type_subclass (mime, base); - - umime = _xdg_mime_unalias_mime_type (mime); - ubase = _xdg_mime_unalias_mime_type (base); - - if (strcmp (umime, ubase) == 0) - return 1; - -#if 1 - /* Handle supertypes */ - if (xdg_mime_is_super_type (ubase) && - xdg_mime_media_type_equal (umime, ubase)) - return 1; -#endif - - /* Handle special cases text/plain and application/octet-stream */ - if (strcmp (ubase, "text/plain") == 0 && - strncmp (umime, "text/", 5) == 0) - return 1; - - if (strcmp (ubase, "application/octet-stream") == 0) - return 1; - - parents = _xdg_mime_parent_list_lookup (parent_list, umime); - for (; parents && *parents; parents++) - { - if (_xdg_mime_mime_type_subclass (*parents, ubase)) - return 1; - } - - return 0; -} - -int -xdg_mime_mime_type_subclass (const char *mime, - const char *base) -{ - xdg_mime_init (); - - return _xdg_mime_mime_type_subclass (mime, base); -} - -char ** -xdg_mime_list_mime_parents (const char *mime) -{ - const char **parents; - char **result; - int i, n; - - if (_caches) - return _xdg_mime_cache_list_mime_parents (mime); - - parents = xdg_mime_get_mime_parents (mime); - - if (!parents) - return NULL; - - for (i = 0; parents[i]; i++) ; - - n = (i + 1) * sizeof (char *); - result = (char **) malloc (n); - memcpy (result, parents, n); - - return result; -} - -const char ** -xdg_mime_get_mime_parents (const char *mime) -{ - const char *umime; - - xdg_mime_init (); - - umime = _xdg_mime_unalias_mime_type (mime); - - return _xdg_mime_parent_list_lookup (parent_list, umime); -} - -void -xdg_mime_dump (void) -{ - xdg_mime_init(); - - printf ("*** ALIASES ***\n\n"); - _xdg_mime_alias_list_dump (alias_list); - printf ("\n*** PARENTS ***\n\n"); - _xdg_mime_parent_list_dump (parent_list); - printf ("\n*** CACHE ***\n\n"); - _xdg_glob_hash_dump (global_hash); - printf ("\n*** GLOBS ***\n\n"); - _xdg_glob_hash_dump (global_hash); - printf ("\n*** GLOBS REVERSE TREE ***\n\n"); - _xdg_mime_cache_glob_dump (); -} - - -/* Registers a function to be called every time the mime database reloads its files - */ -int -xdg_mime_register_reload_callback (XdgMimeCallback callback, - void *data, - XdgMimeDestroy destroy) -{ - XdgCallbackList *list_el; - static int callback_id = 1; - - /* Make a new list element */ - list_el = calloc (1, sizeof (XdgCallbackList)); - list_el->callback_id = callback_id; - list_el->callback = callback; - list_el->data = data; - list_el->destroy = destroy; - list_el->next = callback_list; - if (list_el->next) - list_el->next->prev = list_el; - - callback_list = list_el; - callback_id ++; - - return callback_id - 1; -} - -void -xdg_mime_remove_callback (int callback_id) -{ - XdgCallbackList *list; - - for (list = callback_list; list; list = list->next) - { - if (list->callback_id == callback_id) - { - if (list->next) - list->next = list->prev; - - if (list->prev) - list->prev->next = list->next; - else - callback_list = list->next; - - /* invoke the destroy handler */ - (list->destroy) (list->data); - free (list); - return; - } - } -} - -const char * -xdg_mime_get_icon (const char *mime) -{ - xdg_mime_init (); - - if (_caches) - return _xdg_mime_cache_get_icon (mime); - - return _xdg_mime_icon_list_lookup (icon_list, mime); -} - -const char * -xdg_mime_get_generic_icon (const char *mime) -{ - xdg_mime_init (); - - if (_caches) - return _xdg_mime_cache_get_generic_icon (mime); - - return _xdg_mime_icon_list_lookup (generic_icon_list, mime); -} diff --git a/base/third_party/xdg_mime/xdgmime.h b/base/third_party/xdg_mime/xdgmime.h deleted file mode 100644 index 6a34edfc38..0000000000 --- a/base/third_party/xdg_mime/xdgmime.h +++ /dev/null @@ -1,133 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmime.h: XDG Mime Spec mime resolver. Based on version 0.11 of the spec. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003 Red Hat, Inc. - * Copyright (C) 2003 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - - -#ifndef __XDG_MIME_H__ -#define __XDG_MIME_H__ - -#include <stdlib.h> -#include <sys/stat.h> - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifdef XDG_PREFIX -#define XDG_ENTRY(func) _XDG_ENTRY2(XDG_PREFIX,func) -#define _XDG_ENTRY2(prefix,func) _XDG_ENTRY3(prefix,func) -#define _XDG_ENTRY3(prefix,func) prefix##_##func - -#define XDG_RESERVED_ENTRY(func) _XDG_RESERVED_ENTRY2(XDG_PREFIX,func) -#define _XDG_RESERVED_ENTRY2(prefix,func) _XDG_RESERVED_ENTRY3(prefix,func) -#define _XDG_RESERVED_ENTRY3(prefix,func) _##prefix##_##func -#endif - -typedef void (*XdgMimeCallback) (void *user_data); -typedef void (*XdgMimeDestroy) (void *user_data); - - -#ifdef XDG_PREFIX -#define xdg_mime_get_mime_type_for_data XDG_ENTRY(get_mime_type_for_data) -#define xdg_mime_get_mime_type_for_file XDG_ENTRY(get_mime_type_for_file) -#define xdg_mime_get_mime_type_from_file_name XDG_ENTRY(get_mime_type_from_file_name) -#define xdg_mime_get_mime_types_from_file_name XDG_ENTRY(get_mime_types_from_file_name) -#define xdg_mime_is_valid_mime_type XDG_ENTRY(is_valid_mime_type) -#define xdg_mime_mime_type_equal XDG_ENTRY(mime_type_equal) -#define xdg_mime_media_type_equal XDG_ENTRY(media_type_equal) -#define xdg_mime_mime_type_subclass XDG_ENTRY(mime_type_subclass) -#define xdg_mime_get_mime_parents XDG_ENTRY(get_mime_parents) -#define xdg_mime_list_mime_parents XDG_ENTRY(list_mime_parents) -#define xdg_mime_unalias_mime_type XDG_ENTRY(unalias_mime_type) -#define xdg_mime_get_max_buffer_extents XDG_ENTRY(get_max_buffer_extents) -#define xdg_mime_shutdown XDG_ENTRY(shutdown) -#define xdg_mime_dump XDG_ENTRY(dump) -#define xdg_mime_register_reload_callback XDG_ENTRY(register_reload_callback) -#define xdg_mime_remove_callback XDG_ENTRY(remove_callback) -#define xdg_mime_type_unknown XDG_ENTRY(type_unknown) -#define xdg_mime_type_empty XDG_ENTRY(type_empty) -#define xdg_mime_type_textplain XDG_ENTRY(type_textplain) -#define xdg_mime_get_icon XDG_ENTRY(get_icon) -#define xdg_mime_get_generic_icon XDG_ENTRY(get_generic_icon) - -#define _xdg_mime_mime_type_equal XDG_RESERVED_ENTRY(mime_type_equal) -#define _xdg_mime_mime_type_subclass XDG_RESERVED_ENTRY(mime_type_subclass) -#define _xdg_mime_unalias_mime_type XDG_RESERVED_ENTRY(unalias_mime_type) -#endif - -extern const char xdg_mime_type_unknown[]; -extern const char xdg_mime_type_empty[]; -extern const char xdg_mime_type_textplain[]; -#define XDG_MIME_TYPE_UNKNOWN xdg_mime_type_unknown -#define XDG_MIME_TYPE_EMPTY xdg_mime_type_empty -#define XDG_MIME_TYPE_TEXTPLAIN xdg_mime_type_textplain - -const char *xdg_mime_get_mime_type_for_data (const void *data, - size_t len, - int *result_prio); -const char *xdg_mime_get_mime_type_for_file (const char *file_name, - struct stat *statbuf); -const char *xdg_mime_get_mime_type_from_file_name (const char *file_name); -int xdg_mime_get_mime_types_from_file_name(const char *file_name, - const char *mime_types[], - int n_mime_types); -int xdg_mime_is_valid_mime_type (const char *mime_type); -int xdg_mime_mime_type_equal (const char *mime_a, - const char *mime_b); -int xdg_mime_media_type_equal (const char *mime_a, - const char *mime_b); -int xdg_mime_mime_type_subclass (const char *mime_a, - const char *mime_b); - /* xdg_mime_get_mime_parents() is deprecated since it does - * not work correctly with caches. Use xdg_mime_list_parents() - * instead, but notice that that function expects you to free - * the array it returns. - */ -const char **xdg_mime_get_mime_parents (const char *mime); -char ** xdg_mime_list_mime_parents (const char *mime); -const char *xdg_mime_unalias_mime_type (const char *mime); -const char *xdg_mime_get_icon (const char *mime); -const char *xdg_mime_get_generic_icon (const char *mime); -int xdg_mime_get_max_buffer_extents (void); -void xdg_mime_shutdown (void); -void xdg_mime_dump (void); -int xdg_mime_register_reload_callback (XdgMimeCallback callback, - void *data, - XdgMimeDestroy destroy); -void xdg_mime_remove_callback (int callback_id); - - /* Private versions of functions that don't call xdg_mime_init () */ -int _xdg_mime_mime_type_equal (const char *mime_a, - const char *mime_b); -int _xdg_mime_mime_type_subclass (const char *mime, - const char *base); -const char *_xdg_mime_unalias_mime_type (const char *mime); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* __XDG_MIME_H__ */ diff --git a/base/third_party/xdg_mime/xdgmimealias.c b/base/third_party/xdg_mime/xdgmimealias.c deleted file mode 100644 index 07d89eb32e..0000000000 --- a/base/third_party/xdg_mime/xdgmimealias.c +++ /dev/null @@ -1,184 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimealias.c: Private file. Datastructure for storing the aliases. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2004 Red Hat, Inc. - * Copyright (C) 2004 Matthias Clasen <mclasen@redhat.com> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "xdgmimealias.h" -#include "xdgmimeint.h" -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> -#include <string.h> -#include <fnmatch.h> - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -typedef struct XdgAlias XdgAlias; - -struct XdgAlias -{ - char *alias; - char *mime_type; -}; - -struct XdgAliasList -{ - struct XdgAlias *aliases; - int n_aliases; -}; - -XdgAliasList * -_xdg_mime_alias_list_new (void) -{ - XdgAliasList *list; - - list = malloc (sizeof (XdgAliasList)); - - list->aliases = NULL; - list->n_aliases = 0; - - return list; -} - -void -_xdg_mime_alias_list_free (XdgAliasList *list) -{ - int i; - - if (list->aliases) - { - for (i = 0; i < list->n_aliases; i++) - { - free (list->aliases[i].alias); - free (list->aliases[i].mime_type); - } - free (list->aliases); - } - free (list); -} - -static int -alias_entry_cmp (const void *v1, const void *v2) -{ - return strcmp (((XdgAlias *)v1)->alias, ((XdgAlias *)v2)->alias); -} - -const char * -_xdg_mime_alias_list_lookup (XdgAliasList *list, - const char *alias) -{ - XdgAlias *entry; - XdgAlias key; - - if (list->n_aliases > 0) - { - key.alias = (char *)alias; - key.mime_type = NULL; - - entry = bsearch (&key, list->aliases, list->n_aliases, - sizeof (XdgAlias), alias_entry_cmp); - if (entry) - return entry->mime_type; - } - - return NULL; -} - -void -_xdg_mime_alias_read_from_file (XdgAliasList *list, - const char *file_name) -{ - FILE *file; - char line[255]; - int alloc; - - file = fopen (file_name, "r"); - - if (file == NULL) - return; - - /* FIXME: Not UTF-8 safe. Doesn't work if lines are greater than 255 chars. - * Blah */ - alloc = list->n_aliases + 16; - list->aliases = realloc (list->aliases, alloc * sizeof (XdgAlias)); - while (fgets (line, 255, file) != NULL) - { - char *sep; - if (line[0] == '#') - continue; - - sep = strchr (line, ' '); - if (sep == NULL) - continue; - *(sep++) = '\000'; - sep[strlen (sep) -1] = '\000'; - if (list->n_aliases == alloc) - { - alloc <<= 1; - list->aliases = realloc (list->aliases, - alloc * sizeof (XdgAlias)); - } - list->aliases[list->n_aliases].alias = strdup (line); - list->aliases[list->n_aliases].mime_type = strdup (sep); - list->n_aliases++; - } - list->aliases = realloc (list->aliases, - list->n_aliases * sizeof (XdgAlias)); - - fclose (file); - - if (list->n_aliases > 1) - qsort (list->aliases, list->n_aliases, - sizeof (XdgAlias), alias_entry_cmp); -} - - -void -_xdg_mime_alias_list_dump (XdgAliasList *list) -{ - int i; - - if (list->aliases) - { - for (i = 0; i < list->n_aliases; i++) - { - printf ("%s %s\n", - list->aliases[i].alias, - list->aliases[i].mime_type); - } - } -} - - diff --git a/base/third_party/xdg_mime/xdgmimealias.h b/base/third_party/xdg_mime/xdgmimealias.h deleted file mode 100644 index 3c28012dc3..0000000000 --- a/base/third_party/xdg_mime/xdgmimealias.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimealias.h: Private file. Datastructure for storing the aliases. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2004 Red Hat, Inc. - * Copyright (C) 200 Matthias Clasen <mclasen@redhat.com> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __XDG_MIME_ALIAS_H__ -#define __XDG_MIME_ALIAS_H__ - -#include "xdgmime.h" - -typedef struct XdgAliasList XdgAliasList; - -#ifdef XDG_PREFIX -#define _xdg_mime_alias_read_from_file XDG_RESERVED_ENTRY(alias_read_from_file) -#define _xdg_mime_alias_list_new XDG_RESERVED_ENTRY(alias_list_new) -#define _xdg_mime_alias_list_free XDG_RESERVED_ENTRY(alias_list_free) -#define _xdg_mime_alias_list_lookup XDG_RESERVED_ENTRY(alias_list_lookup) -#define _xdg_mime_alias_list_dump XDG_RESERVED_ENTRY(alias_list_dump) -#endif - -void _xdg_mime_alias_read_from_file (XdgAliasList *list, - const char *file_name); -XdgAliasList *_xdg_mime_alias_list_new (void); -void _xdg_mime_alias_list_free (XdgAliasList *list); -const char *_xdg_mime_alias_list_lookup (XdgAliasList *list, - const char *alias); -void _xdg_mime_alias_list_dump (XdgAliasList *list); - -#endif /* __XDG_MIME_ALIAS_H__ */ diff --git a/base/third_party/xdg_mime/xdgmimecache.c b/base/third_party/xdg_mime/xdgmimecache.c deleted file mode 100644 index ddb875462a..0000000000 --- a/base/third_party/xdg_mime/xdgmimecache.c +++ /dev/null @@ -1,1069 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimealias.c: Private file. mmappable caches for mime data - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2005 Matthias Clasen <mclasen@redhat.com> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include <fcntl.h> -#include <unistd.h> -#include <fnmatch.h> -#include <assert.h> - -#include <netinet/in.h> /* for ntohl/ntohs */ - -#define HAVE_MMAP 1 - -#ifdef HAVE_MMAP -#include <sys/mman.h> -#else -#warning Building xdgmime without MMAP support. Binary "mime.cache" files will not be used. -#endif - -#include <sys/stat.h> -#include <sys/types.h> - -#include "xdgmimecache.h" -#include "xdgmimeint.h" - -#ifndef MAX -#define MAX(a,b) ((a) > (b) ? (a) : (b)) -#endif - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#ifndef _O_BINARY -#define _O_BINARY 0 -#endif - -#ifndef MAP_FAILED -#define MAP_FAILED ((void *) -1) -#endif - -#define MAJOR_VERSION 1 -#define MINOR_VERSION_MIN 1 -#define MINOR_VERSION_MAX 2 - -struct _XdgMimeCache -{ - int ref_count; - int minor; - - size_t size; - char *buffer; -}; - -#define GET_UINT16(cache,offset) (ntohs(*(xdg_uint16_t*)((cache) + (offset)))) -#define GET_UINT32(cache,offset) (ntohl(*(xdg_uint32_t*)((cache) + (offset)))) - -XdgMimeCache * -_xdg_mime_cache_ref (XdgMimeCache *cache) -{ - cache->ref_count++; - return cache; -} - -void -_xdg_mime_cache_unref (XdgMimeCache *cache) -{ - cache->ref_count--; - - if (cache->ref_count == 0) - { -#ifdef HAVE_MMAP - munmap (cache->buffer, cache->size); -#endif - free (cache); - } -} - -XdgMimeCache * -_xdg_mime_cache_new_from_file (const char *file_name) -{ - XdgMimeCache *cache = NULL; - -#ifdef HAVE_MMAP - int fd = -1; - struct stat st; - char *buffer = NULL; - int minor; - - /* Open the file and map it into memory */ - fd = open (file_name, O_RDONLY|_O_BINARY, 0); - - if (fd < 0) - return NULL; - - if (fstat (fd, &st) < 0 || st.st_size < 4) - goto done; - - buffer = (char *) mmap (NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0); - - if (buffer == MAP_FAILED) - goto done; - - minor = GET_UINT16 (buffer, 2); - /* Verify version */ - if (GET_UINT16 (buffer, 0) != MAJOR_VERSION || - (minor < MINOR_VERSION_MIN || - minor > MINOR_VERSION_MAX)) - { - munmap (buffer, st.st_size); - - goto done; - } - - cache = (XdgMimeCache *) malloc (sizeof (XdgMimeCache)); - cache->minor = minor; - cache->ref_count = 1; - cache->buffer = buffer; - cache->size = st.st_size; - - done: - if (fd != -1) - close (fd); - -#endif /* HAVE_MMAP */ - - return cache; -} - -static int -cache_magic_matchlet_compare_to_data (XdgMimeCache *cache, - xdg_uint32_t offset, - const void *data, - size_t len) -{ - xdg_uint32_t range_start = GET_UINT32 (cache->buffer, offset); - xdg_uint32_t range_length = GET_UINT32 (cache->buffer, offset + 4); - xdg_uint32_t data_length = GET_UINT32 (cache->buffer, offset + 12); - xdg_uint32_t data_offset = GET_UINT32 (cache->buffer, offset + 16); - xdg_uint32_t mask_offset = GET_UINT32 (cache->buffer, offset + 20); - - int i, j; - - for (i = range_start; i < range_start + range_length; i++) - { - int valid_matchlet = TRUE; - - if (i + data_length > len) - return FALSE; - - if (mask_offset) - { - for (j = 0; j < data_length; j++) - { - if ((((unsigned char *)cache->buffer)[data_offset + j] & ((unsigned char *)cache->buffer)[mask_offset + j]) != - ((((unsigned char *) data)[j + i]) & ((unsigned char *)cache->buffer)[mask_offset + j])) - { - valid_matchlet = FALSE; - break; - } - } - } - else - { - valid_matchlet = memcmp(cache->buffer + data_offset, data + i, data_length) == 0; - } - - if (valid_matchlet) - return TRUE; - } - - return FALSE; -} - -static int -cache_magic_matchlet_compare (XdgMimeCache *cache, - xdg_uint32_t offset, - const void *data, - size_t len) -{ - xdg_uint32_t n_children = GET_UINT32 (cache->buffer, offset + 24); - xdg_uint32_t child_offset = GET_UINT32 (cache->buffer, offset + 28); - - int i; - - if (cache_magic_matchlet_compare_to_data (cache, offset, data, len)) - { - if (n_children == 0) - return TRUE; - - for (i = 0; i < n_children; i++) - { - if (cache_magic_matchlet_compare (cache, child_offset + 32 * i, - data, len)) - return TRUE; - } - } - - return FALSE; -} - -static const char * -cache_magic_compare_to_data (XdgMimeCache *cache, - xdg_uint32_t offset, - const void *data, - size_t len, - int *prio) -{ - xdg_uint32_t priority = GET_UINT32 (cache->buffer, offset); - xdg_uint32_t mimetype_offset = GET_UINT32 (cache->buffer, offset + 4); - xdg_uint32_t n_matchlets = GET_UINT32 (cache->buffer, offset + 8); - xdg_uint32_t matchlet_offset = GET_UINT32 (cache->buffer, offset + 12); - - int i; - - for (i = 0; i < n_matchlets; i++) - { - if (cache_magic_matchlet_compare (cache, matchlet_offset + i * 32, - data, len)) - { - *prio = priority; - - return cache->buffer + mimetype_offset; - } - } - - return NULL; -} - -static const char * -cache_magic_lookup_data (XdgMimeCache *cache, - const void *data, - size_t len, - int *prio, - const char *mime_types[], - int n_mime_types) -{ - xdg_uint32_t list_offset; - xdg_uint32_t n_entries; - xdg_uint32_t offset; - - int j, n; - - *prio = 0; - - list_offset = GET_UINT32 (cache->buffer, 24); - n_entries = GET_UINT32 (cache->buffer, list_offset); - offset = GET_UINT32 (cache->buffer, list_offset + 8); - - for (j = 0; j < n_entries; j++) - { - const char *match; - - match = cache_magic_compare_to_data (cache, offset + 16 * j, - data, len, prio); - if (match) - return match; - else - { - xdg_uint32_t mimetype_offset; - const char *non_match; - - mimetype_offset = GET_UINT32 (cache->buffer, offset + 16 * j + 4); - non_match = cache->buffer + mimetype_offset; - - for (n = 0; n < n_mime_types; n++) - { - if (mime_types[n] && - _xdg_mime_mime_type_equal (mime_types[n], non_match)) - mime_types[n] = NULL; - } - } - } - - return NULL; -} - -static const char * -cache_alias_lookup (const char *alias) -{ - const char *ptr; - int i, min, max, mid, cmp; - - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 4); - xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset); - xdg_uint32_t offset; - - min = 0; - max = n_entries - 1; - while (max >= min) - { - mid = (min + max) / 2; - - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid); - ptr = cache->buffer + offset; - cmp = strcmp (ptr, alias); - - if (cmp < 0) - min = mid + 1; - else if (cmp > 0) - max = mid - 1; - else - { - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid + 4); - return cache->buffer + offset; - } - } - } - - return NULL; -} - -typedef struct { - const char *mime; - int weight; -} MimeWeight; - -static int -cache_glob_lookup_literal (const char *file_name, - const char *mime_types[], - int n_mime_types, - int case_sensitive_check) -{ - const char *ptr; - int i, min, max, mid, cmp; - - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 12); - xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset); - xdg_uint32_t offset; - - min = 0; - max = n_entries - 1; - while (max >= min) - { - mid = (min + max) / 2; - - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * mid); - ptr = cache->buffer + offset; - cmp = strcmp (ptr, file_name); - - if (cmp < 0) - min = mid + 1; - else if (cmp > 0) - max = mid - 1; - else - { - int weight = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * mid + 8); - int case_sensitive = weight & 0x100; - weight = weight & 0xff; - - if (case_sensitive_check || !case_sensitive) - { - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * mid + 4); - mime_types[0] = (const char *)(cache->buffer + offset); - - return 1; - } - return 0; - } - } - } - - return 0; -} - -static int -cache_glob_lookup_fnmatch (const char *file_name, - MimeWeight mime_types[], - int n_mime_types, - int case_sensitive_check) -{ - const char *mime_type; - const char *ptr; - - int i, j, n; - - n = 0; - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - - xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 20); - xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset); - - for (j = 0; j < n_entries && n < n_mime_types; j++) - { - xdg_uint32_t offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * j); - xdg_uint32_t mimetype_offset = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * j + 4); - int weight = GET_UINT32 (cache->buffer, list_offset + 4 + 12 * j + 8); - int case_sensitive = weight & 0x100; - weight = weight & 0xff; - ptr = cache->buffer + offset; - mime_type = cache->buffer + mimetype_offset; - if (case_sensitive_check || !case_sensitive) - { - /* FIXME: Not UTF-8 safe */ - if (fnmatch (ptr, file_name, 0) == 0) - { - mime_types[n].mime = mime_type; - mime_types[n].weight = weight; - n++; - } - } - } - - if (n > 0) - return n; - } - - return 0; -} - -static int -cache_glob_node_lookup_suffix (XdgMimeCache *cache, - xdg_uint32_t n_entries, - xdg_uint32_t offset, - const char *file_name, - int len, - int case_sensitive_check, - MimeWeight mime_types[], - int n_mime_types) -{ - xdg_unichar_t character; - xdg_unichar_t match_char; - xdg_uint32_t mimetype_offset; - xdg_uint32_t n_children; - xdg_uint32_t child_offset; - int weight; - int case_sensitive; - - int min, max, mid, n, i; - - character = file_name[len - 1]; - - assert (character != 0); - - min = 0; - max = n_entries - 1; - while (max >= min) - { - mid = (min + max) / 2; - match_char = GET_UINT32 (cache->buffer, offset + 12 * mid); - if (match_char < character) - min = mid + 1; - else if (match_char > character) - max = mid - 1; - else - { - len--; - n = 0; - n_children = GET_UINT32 (cache->buffer, offset + 12 * mid + 4); - child_offset = GET_UINT32 (cache->buffer, offset + 12 * mid + 8); - - if (len > 0) - { - n = cache_glob_node_lookup_suffix (cache, - n_children, child_offset, - file_name, len, - case_sensitive_check, - mime_types, - n_mime_types); - } - if (n == 0) - { - i = 0; - while (n < n_mime_types && i < n_children) - { - match_char = GET_UINT32 (cache->buffer, child_offset + 12 * i); - if (match_char != 0) - break; - - mimetype_offset = GET_UINT32 (cache->buffer, child_offset + 12 * i + 4); - weight = GET_UINT32 (cache->buffer, child_offset + 12 * i + 8); - case_sensitive = weight & 0x100; - weight = weight & 0xff; - - if (case_sensitive_check || !case_sensitive) - { - mime_types[n].mime = cache->buffer + mimetype_offset; - mime_types[n].weight = weight; - n++; - } - i++; - } - } - return n; - } - } - return 0; -} - -static int -cache_glob_lookup_suffix (const char *file_name, - int len, - int ignore_case, - MimeWeight mime_types[], - int n_mime_types) -{ - int i, n; - - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - - xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 16); - xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset); - xdg_uint32_t offset = GET_UINT32 (cache->buffer, list_offset + 4); - - n = cache_glob_node_lookup_suffix (cache, - n_entries, offset, - file_name, len, - ignore_case, - mime_types, - n_mime_types); - if (n > 0) - return n; - } - - return 0; -} - -static int compare_mime_weight (const void *a, const void *b) -{ - const MimeWeight *aa = (const MimeWeight *)a; - const MimeWeight *bb = (const MimeWeight *)b; - - return bb->weight - aa->weight; -} - -#define ISUPPER(c) ((c) >= 'A' && (c) <= 'Z') -static char * -ascii_tolower (const char *str) -{ - char *p, *lower; - - lower = strdup (str); - p = lower; - while (*p != 0) - { - char c = *p; - *p++ = ISUPPER (c) ? c - 'A' + 'a' : c; - } - return lower; -} - -static int -cache_glob_lookup_file_name (const char *file_name, - const char *mime_types[], - int n_mime_types) -{ - int n; - MimeWeight mimes[10]; - int n_mimes = 10; - int i; - int len; - char *lower_case; - - assert (file_name != NULL && n_mime_types > 0); - - /* First, check the literals */ - - lower_case = ascii_tolower (file_name); - - n = cache_glob_lookup_literal (lower_case, mime_types, n_mime_types, FALSE); - if (n > 0) - { - free (lower_case); - return n; - } - - n = cache_glob_lookup_literal (file_name, mime_types, n_mime_types, TRUE); - if (n > 0) - { - free (lower_case); - return n; - } - - len = strlen (file_name); - n = cache_glob_lookup_suffix (lower_case, len, FALSE, mimes, n_mimes); - if (n == 0) - n = cache_glob_lookup_suffix (file_name, len, TRUE, mimes, n_mimes); - - /* Last, try fnmatch */ - if (n == 0) - n = cache_glob_lookup_fnmatch (lower_case, mimes, n_mimes, FALSE); - if (n == 0) - n = cache_glob_lookup_fnmatch (file_name, mimes, n_mimes, TRUE); - - free (lower_case); - - qsort (mimes, n, sizeof (MimeWeight), compare_mime_weight); - - if (n_mime_types < n) - n = n_mime_types; - - for (i = 0; i < n; i++) - mime_types[i] = mimes[i].mime; - - return n; -} - -int -_xdg_mime_cache_get_max_buffer_extents (void) -{ - xdg_uint32_t offset; - xdg_uint32_t max_extent; - int i; - - max_extent = 0; - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - - offset = GET_UINT32 (cache->buffer, 24); - max_extent = MAX (max_extent, GET_UINT32 (cache->buffer, offset + 4)); - } - - return max_extent; -} - -static const char * -cache_get_mime_type_for_data (const void *data, - size_t len, - int *result_prio, - const char *mime_types[], - int n_mime_types) -{ - const char *mime_type; - int i, n, priority; - - priority = 0; - mime_type = NULL; - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - - int prio; - const char *match; - - match = cache_magic_lookup_data (cache, data, len, &prio, - mime_types, n_mime_types); - if (prio > priority) - { - priority = prio; - mime_type = match; - } - } - - if (result_prio) - *result_prio = priority; - - if (priority > 0) - { - /* Pick glob-result R where mime_type inherits from R */ - for (n = 0; n < n_mime_types; n++) - { - if (mime_types[n] && _xdg_mime_cache_mime_type_subclass(mime_types[n], mime_type)) - return mime_types[n]; - } - - /* Return magic match */ - return mime_type; - } - - /* Pick first glob result, as fallback */ - for (n = 0; n < n_mime_types; n++) - { - if (mime_types[n]) - return mime_types[n]; - } - - return NULL; -} - -const char * -_xdg_mime_cache_get_mime_type_for_data (const void *data, - size_t len, - int *result_prio) -{ - return cache_get_mime_type_for_data (data, len, result_prio, NULL, 0); -} - -const char * -_xdg_mime_cache_get_mime_type_for_file (const char *file_name, - struct stat *statbuf) -{ - const char *mime_type; - const char *mime_types[10]; - FILE *file; - unsigned char *data; - int max_extent; - int bytes_read; - struct stat buf; - const char *base_name; - int n; - - if (file_name == NULL) - return NULL; - - if (! _xdg_utf8_validate (file_name)) - return NULL; - - base_name = _xdg_get_base_name (file_name); - n = cache_glob_lookup_file_name (base_name, mime_types, 10); - - if (n == 1) - return mime_types[0]; - - if (!statbuf) - { - if (stat (file_name, &buf) != 0) - return XDG_MIME_TYPE_UNKNOWN; - - statbuf = &buf; - } - - if (statbuf->st_size == 0) - return XDG_MIME_TYPE_EMPTY; - - if (!S_ISREG (statbuf->st_mode)) - return XDG_MIME_TYPE_UNKNOWN; - - /* FIXME: Need to make sure that max_extent isn't totally broken. This could - * be large and need getting from a stream instead of just reading it all - * in. */ - max_extent = _xdg_mime_cache_get_max_buffer_extents (); - data = malloc (max_extent); - if (data == NULL) - return XDG_MIME_TYPE_UNKNOWN; - - file = fopen (file_name, "r"); - if (file == NULL) - { - free (data); - return XDG_MIME_TYPE_UNKNOWN; - } - - bytes_read = fread (data, 1, max_extent, file); - if (ferror (file)) - { - free (data); - fclose (file); - return XDG_MIME_TYPE_UNKNOWN; - } - - mime_type = cache_get_mime_type_for_data (data, bytes_read, NULL, - mime_types, n); - - if (!mime_type) - mime_type = _xdg_binary_or_text_fallback(data, bytes_read); - - free (data); - fclose (file); - - return mime_type; -} - -const char * -_xdg_mime_cache_get_mime_type_from_file_name (const char *file_name) -{ - const char *mime_type; - - if (cache_glob_lookup_file_name (file_name, &mime_type, 1)) - return mime_type; - else - return XDG_MIME_TYPE_UNKNOWN; -} - -int -_xdg_mime_cache_get_mime_types_from_file_name (const char *file_name, - const char *mime_types[], - int n_mime_types) -{ - return cache_glob_lookup_file_name (file_name, mime_types, n_mime_types); -} - -#if 1 -static int -is_super_type (const char *mime) -{ - int length; - const char *type; - - length = strlen (mime); - type = &(mime[length - 2]); - - if (strcmp (type, "/*") == 0) - return 1; - - return 0; -} -#endif - -int -_xdg_mime_cache_mime_type_subclass (const char *mime, - const char *base) -{ - const char *umime, *ubase; - - int i, j, min, max, med, cmp; - - umime = _xdg_mime_cache_unalias_mime_type (mime); - ubase = _xdg_mime_cache_unalias_mime_type (base); - - if (strcmp (umime, ubase) == 0) - return 1; - - /* We really want to handle text/ * in GtkFileFilter, so we just - * turn on the supertype matching - */ -#if 1 - /* Handle supertypes */ - if (is_super_type (ubase) && - xdg_mime_media_type_equal (umime, ubase)) - return 1; -#endif - - /* Handle special cases text/plain and application/octet-stream */ - if (strcmp (ubase, "text/plain") == 0 && - strncmp (umime, "text/", 5) == 0) - return 1; - - if (strcmp (ubase, "application/octet-stream") == 0) - return 1; - - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - - xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 8); - xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset); - xdg_uint32_t offset, n_parents, parent_offset; - - min = 0; - max = n_entries - 1; - while (max >= min) - { - med = (min + max)/2; - - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * med); - cmp = strcmp (cache->buffer + offset, umime); - if (cmp < 0) - min = med + 1; - else if (cmp > 0) - max = med - 1; - else - { - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * med + 4); - n_parents = GET_UINT32 (cache->buffer, offset); - - for (j = 0; j < n_parents; j++) - { - parent_offset = GET_UINT32 (cache->buffer, offset + 4 + 4 * j); - if (_xdg_mime_cache_mime_type_subclass (cache->buffer + parent_offset, ubase)) - return 1; - } - - break; - } - } - } - - return 0; -} - -const char * -_xdg_mime_cache_unalias_mime_type (const char *mime) -{ - const char *lookup; - - lookup = cache_alias_lookup (mime); - - if (lookup) - return lookup; - - return mime; -} - -char ** -_xdg_mime_cache_list_mime_parents (const char *mime) -{ - int i, j, k, l, p; - char *all_parents[128]; /* we'll stop at 128 */ - char **result; - - mime = xdg_mime_unalias_mime_type (mime); - - p = 0; - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - - xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, 8); - xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset); - - for (j = 0; j < n_entries; j++) - { - xdg_uint32_t mimetype_offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * j); - xdg_uint32_t parents_offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * j + 4); - - if (strcmp (cache->buffer + mimetype_offset, mime) == 0) - { - xdg_uint32_t parent_mime_offset; - xdg_uint32_t n_parents = GET_UINT32 (cache->buffer, parents_offset); - - for (k = 0; k < n_parents && p < 127; k++) - { - parent_mime_offset = GET_UINT32 (cache->buffer, parents_offset + 4 + 4 * k); - - /* Don't add same parent multiple times. - * This can happen for instance if the same type is listed in multiple directories - */ - for (l = 0; l < p; l++) - { - if (strcmp (all_parents[l], cache->buffer + parent_mime_offset) == 0) - break; - } - - if (l == p) - all_parents[p++] = cache->buffer + parent_mime_offset; - } - - break; - } - } - } - all_parents[p++] = NULL; - - result = (char **) malloc (p * sizeof (char *)); - memcpy (result, all_parents, p * sizeof (char *)); - - return result; -} - -static const char * -cache_lookup_icon (const char *mime, int header) -{ - const char *ptr; - int i, min, max, mid, cmp; - - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - xdg_uint32_t list_offset = GET_UINT32 (cache->buffer, header); - xdg_uint32_t n_entries = GET_UINT32 (cache->buffer, list_offset); - xdg_uint32_t offset; - - min = 0; - max = n_entries - 1; - while (max >= min) - { - mid = (min + max) / 2; - - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid); - ptr = cache->buffer + offset; - cmp = strcmp (ptr, mime); - - if (cmp < 0) - min = mid + 1; - else if (cmp > 0) - max = mid - 1; - else - { - offset = GET_UINT32 (cache->buffer, list_offset + 4 + 8 * mid + 4); - return cache->buffer + offset; - } - } - } - - return NULL; -} - -const char * -_xdg_mime_cache_get_generic_icon (const char *mime) -{ - return cache_lookup_icon (mime, 36); -} - -const char * -_xdg_mime_cache_get_icon (const char *mime) -{ - return cache_lookup_icon (mime, 32); -} - -static void -dump_glob_node (XdgMimeCache *cache, - xdg_uint32_t offset, - int depth) -{ - xdg_unichar_t character; - xdg_uint32_t mime_offset; - xdg_uint32_t n_children; - xdg_uint32_t child_offset; - int i; - - character = GET_UINT32 (cache->buffer, offset); - mime_offset = GET_UINT32 (cache->buffer, offset + 4); - n_children = GET_UINT32 (cache->buffer, offset + 8); - child_offset = GET_UINT32 (cache->buffer, offset + 12); - for (i = 0; i < depth; i++) - printf (" "); - printf ("%c", character); - if (mime_offset) - printf (" - %s", cache->buffer + mime_offset); - printf ("\n"); - if (child_offset) - { - for (i = 0; i < n_children; i++) - dump_glob_node (cache, child_offset + 20 * i, depth + 1); - } -} - -void -_xdg_mime_cache_glob_dump (void) -{ - int i, j; - for (i = 0; _caches[i]; i++) - { - XdgMimeCache *cache = _caches[i]; - xdg_uint32_t list_offset; - xdg_uint32_t n_entries; - xdg_uint32_t offset; - list_offset = GET_UINT32 (cache->buffer, 16); - n_entries = GET_UINT32 (cache->buffer, list_offset); - offset = GET_UINT32 (cache->buffer, list_offset + 4); - for (j = 0; j < n_entries; j++) - dump_glob_node (cache, offset + 20 * j, 0); - } -} diff --git a/base/third_party/xdg_mime/xdgmimecache.h b/base/third_party/xdg_mime/xdgmimecache.h deleted file mode 100644 index 27f42d0ca1..0000000000 --- a/base/third_party/xdg_mime/xdgmimecache.h +++ /dev/null @@ -1,81 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimecache.h: Private file. Datastructure for mmapped caches. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2005 Matthias Clasen <mclasen@redhat.com> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __XDG_MIME_CACHE_H__ -#define __XDG_MIME_CACHE_H__ - -#include "xdgmime.h" - -typedef struct _XdgMimeCache XdgMimeCache; - -#ifdef XDG_PREFIX -#define _xdg_mime_cache_new_from_file XDG_RESERVED_ENTRY(cache_new_from_file) -#define _xdg_mime_cache_ref XDG_RESERVED_ENTRY(cache_ref) -#define _xdg_mime_cache_unref XDG_RESERVED_ENTRY(cache_unref) -#define _xdg_mime_cache_get_max_buffer_extents XDG_RESERVED_ENTRY(cache_get_max_buffer_extents) -#define _xdg_mime_cache_get_mime_type_for_data XDG_RESERVED_ENTRY(cache_get_mime_type_for_data) -#define _xdg_mime_cache_get_mime_type_for_file XDG_RESERVED_ENTRY(cache_get_mime_type_for_file) -#define _xdg_mime_cache_get_mime_type_from_file_name XDG_RESERVED_ENTRY(cache_get_mime_type_from_file_name) -#define _xdg_mime_cache_get_mime_types_from_file_name XDG_RESERVED_ENTRY(cache_get_mime_types_from_file_name) -#define _xdg_mime_cache_list_mime_parents XDG_RESERVED_ENTRY(cache_list_mime_parents) -#define _xdg_mime_cache_mime_type_subclass XDG_RESERVED_ENTRY(cache_mime_type_subclass) -#define _xdg_mime_cache_unalias_mime_type XDG_RESERVED_ENTRY(cache_unalias_mime_type) -#define _xdg_mime_cache_get_icon XDG_RESERVED_ENTRY(cache_get_icon) -#define _xdg_mime_cache_get_generic_icon XDG_RESERVED_ENTRY(cache_get_generic_icon) -#define _xdg_mime_cache_glob_dump XDG_RESERVED_ENTRY(cache_glob_dump) -#endif - -extern XdgMimeCache **_caches; - -XdgMimeCache *_xdg_mime_cache_new_from_file (const char *file_name); -XdgMimeCache *_xdg_mime_cache_ref (XdgMimeCache *cache); -void _xdg_mime_cache_unref (XdgMimeCache *cache); - - -const char *_xdg_mime_cache_get_mime_type_for_data (const void *data, - size_t len, - int *result_prio); -const char *_xdg_mime_cache_get_mime_type_for_file (const char *file_name, - struct stat *statbuf); -int _xdg_mime_cache_get_mime_types_from_file_name (const char *file_name, - const char *mime_types[], - int n_mime_types); -const char *_xdg_mime_cache_get_mime_type_from_file_name (const char *file_name); -int _xdg_mime_cache_is_valid_mime_type (const char *mime_type); -int _xdg_mime_cache_mime_type_equal (const char *mime_a, - const char *mime_b); -int _xdg_mime_cache_media_type_equal (const char *mime_a, - const char *mime_b); -int _xdg_mime_cache_mime_type_subclass (const char *mime_a, - const char *mime_b); -char **_xdg_mime_cache_list_mime_parents (const char *mime); -const char *_xdg_mime_cache_unalias_mime_type (const char *mime); -int _xdg_mime_cache_get_max_buffer_extents (void); -const char *_xdg_mime_cache_get_icon (const char *mime); -const char *_xdg_mime_cache_get_generic_icon (const char *mime); -void _xdg_mime_cache_glob_dump (void); - -#endif /* __XDG_MIME_CACHE_H__ */ diff --git a/base/third_party/xdg_mime/xdgmimeglob.c b/base/third_party/xdg_mime/xdgmimeglob.c deleted file mode 100644 index f8434bcc56..0000000000 --- a/base/third_party/xdg_mime/xdgmimeglob.c +++ /dev/null @@ -1,691 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeglob.c: Private file. Datastructure for storing the globs. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003 Red Hat, Inc. - * Copyright (C) 2003 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "xdgmimeglob.h" -#include "xdgmimeint.h" -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> -#include <string.h> -#include <fnmatch.h> - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -typedef struct XdgGlobHashNode XdgGlobHashNode; -typedef struct XdgGlobList XdgGlobList; - -struct XdgGlobHashNode -{ - xdg_unichar_t character; - const char *mime_type; - int weight; - int case_sensitive; - XdgGlobHashNode *next; - XdgGlobHashNode *child; -}; -struct XdgGlobList -{ - const char *data; - const char *mime_type; - int weight; - int case_sensitive; - XdgGlobList *next; -}; - -struct XdgGlobHash -{ - XdgGlobList *literal_list; - XdgGlobHashNode *simple_node; - XdgGlobList *full_list; -}; - - -/* XdgGlobList - */ -static XdgGlobList * -_xdg_glob_list_new (void) -{ - XdgGlobList *new_element; - - new_element = calloc (1, sizeof (XdgGlobList)); - - return new_element; -} - -/* Frees glob_list and all of it's children */ -static void -_xdg_glob_list_free (XdgGlobList *glob_list) -{ - XdgGlobList *ptr, *next; - - ptr = glob_list; - - while (ptr != NULL) - { - next = ptr->next; - - if (ptr->data) - free ((void *) ptr->data); - if (ptr->mime_type) - free ((void *) ptr->mime_type); - free (ptr); - - ptr = next; - } -} - -static XdgGlobList * -_xdg_glob_list_append (XdgGlobList *glob_list, - void *data, - const char *mime_type, - int weight, - int case_sensitive) -{ - XdgGlobList *new_element; - XdgGlobList *tmp_element; - - tmp_element = glob_list; - while (tmp_element != NULL) - { - if (strcmp (tmp_element->data, data) == 0 && - strcmp (tmp_element->mime_type, mime_type) == 0) - return glob_list; - - tmp_element = tmp_element->next; - } - - new_element = _xdg_glob_list_new (); - new_element->data = data; - new_element->mime_type = mime_type; - new_element->weight = weight; - new_element->case_sensitive = case_sensitive; - if (glob_list == NULL) - return new_element; - - tmp_element = glob_list; - while (tmp_element->next != NULL) - tmp_element = tmp_element->next; - - tmp_element->next = new_element; - - return glob_list; -} - -/* XdgGlobHashNode - */ - -static XdgGlobHashNode * -_xdg_glob_hash_node_new (void) -{ - XdgGlobHashNode *glob_hash_node; - - glob_hash_node = calloc (1, sizeof (XdgGlobHashNode)); - - return glob_hash_node; -} - -static void -_xdg_glob_hash_node_dump (XdgGlobHashNode *glob_hash_node, - int depth) -{ - int i; - for (i = 0; i < depth; i++) - printf (" "); - - printf ("%c", (char)glob_hash_node->character); - if (glob_hash_node->mime_type) - printf (" - %s %d\n", glob_hash_node->mime_type, glob_hash_node->weight); - else - printf ("\n"); - if (glob_hash_node->child) - _xdg_glob_hash_node_dump (glob_hash_node->child, depth + 1); - if (glob_hash_node->next) - _xdg_glob_hash_node_dump (glob_hash_node->next, depth); -} - -static XdgGlobHashNode * -_xdg_glob_hash_insert_ucs4 (XdgGlobHashNode *glob_hash_node, - xdg_unichar_t *text, - const char *mime_type, - int weight, - int case_sensitive) -{ - XdgGlobHashNode *node; - xdg_unichar_t character; - - character = text[0]; - - if ((glob_hash_node == NULL) || - (character < glob_hash_node->character)) - { - node = _xdg_glob_hash_node_new (); - node->character = character; - node->next = glob_hash_node; - glob_hash_node = node; - } - else if (character == glob_hash_node->character) - { - node = glob_hash_node; - } - else - { - XdgGlobHashNode *prev_node; - int found_node = FALSE; - - /* Look for the first character of text in glob_hash_node, and insert it if we - * have to.*/ - prev_node = glob_hash_node; - node = prev_node->next; - - while (node != NULL) - { - if (character < node->character) - { - node = _xdg_glob_hash_node_new (); - node->character = character; - node->next = prev_node->next; - prev_node->next = node; - - found_node = TRUE; - break; - } - else if (character == node->character) - { - found_node = TRUE; - break; - } - prev_node = node; - node = node->next; - } - - if (! found_node) - { - node = _xdg_glob_hash_node_new (); - node->character = character; - node->next = prev_node->next; - prev_node->next = node; - } - } - - text++; - if (*text == 0) - { - if (node->mime_type) - { - if (strcmp (node->mime_type, mime_type) != 0) - { - XdgGlobHashNode *child; - int found_node = FALSE; - - child = node->child; - while (child && child->character == 0) - { - if (strcmp (child->mime_type, mime_type) == 0) - { - found_node = TRUE; - break; - } - child = child->next; - } - - if (!found_node) - { - child = _xdg_glob_hash_node_new (); - child->character = 0; - child->mime_type = strdup (mime_type); - child->weight = weight; - child->case_sensitive = case_sensitive; - child->child = NULL; - child->next = node->child; - node->child = child; - } - } - } - else - { - node->mime_type = strdup (mime_type); - node->weight = weight; - node->case_sensitive = case_sensitive; - } - } - else - { - node->child = _xdg_glob_hash_insert_ucs4 (node->child, text, mime_type, weight, case_sensitive); - } - return glob_hash_node; -} - -/* glob must be valid UTF-8 */ -static XdgGlobHashNode * -_xdg_glob_hash_insert_text (XdgGlobHashNode *glob_hash_node, - const char *text, - const char *mime_type, - int weight, - int case_sensitive) -{ - XdgGlobHashNode *node; - xdg_unichar_t *unitext; - int len; - - unitext = _xdg_convert_to_ucs4 (text, &len); - _xdg_reverse_ucs4 (unitext, len); - node = _xdg_glob_hash_insert_ucs4 (glob_hash_node, unitext, mime_type, weight, case_sensitive); - free (unitext); - return node; -} - -typedef struct { - const char *mime; - int weight; -} MimeWeight; - -static int -_xdg_glob_hash_node_lookup_file_name (XdgGlobHashNode *glob_hash_node, - const char *file_name, - int len, - int case_sensitive_check, - MimeWeight mime_types[], - int n_mime_types) -{ - int n; - XdgGlobHashNode *node; - xdg_unichar_t character; - - if (glob_hash_node == NULL) - return 0; - - character = file_name[len - 1]; - - for (node = glob_hash_node; node && character >= node->character; node = node->next) - { - if (character == node->character) - { - len--; - n = 0; - if (len > 0) - { - n = _xdg_glob_hash_node_lookup_file_name (node->child, - file_name, - len, - case_sensitive_check, - mime_types, - n_mime_types); - } - if (n == 0) - { - if (node->mime_type && - (case_sensitive_check || - !node->case_sensitive)) - { - mime_types[n].mime = node->mime_type; - mime_types[n].weight = node->weight; - n++; - } - node = node->child; - while (n < n_mime_types && node && node->character == 0) - { - if (node->mime_type && - (case_sensitive_check || - !node->case_sensitive)) - { - mime_types[n].mime = node->mime_type; - mime_types[n].weight = node->weight; - n++; - } - node = node->next; - } - } - return n; - } - } - - return 0; -} - -static int compare_mime_weight (const void *a, const void *b) -{ - const MimeWeight *aa = (const MimeWeight *)a; - const MimeWeight *bb = (const MimeWeight *)b; - - return bb->weight - aa->weight; -} - -#define ISUPPER(c) ((c) >= 'A' && (c) <= 'Z') -static char * -ascii_tolower (const char *str) -{ - char *p, *lower; - - lower = strdup (str); - p = lower; - while (*p != 0) - { - char c = *p; - *p++ = ISUPPER (c) ? c - 'A' + 'a' : c; - } - return lower; -} - -int -_xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash, - const char *file_name, - const char *mime_types[], - int n_mime_types) -{ - XdgGlobList *list; - int i, n; - MimeWeight mimes[10]; - int n_mimes = 10; - int len; - char *lower_case; - - /* First, check the literals */ - - assert (file_name != NULL && n_mime_types > 0); - - n = 0; - - lower_case = ascii_tolower (file_name); - - for (list = glob_hash->literal_list; list; list = list->next) - { - if (strcmp ((const char *)list->data, file_name) == 0) - { - mime_types[0] = list->mime_type; - free (lower_case); - return 1; - } - } - - for (list = glob_hash->literal_list; list; list = list->next) - { - if (!list->case_sensitive && - strcmp ((const char *)list->data, lower_case) == 0) - { - mime_types[0] = list->mime_type; - free (lower_case); - return 1; - } - } - - - len = strlen (file_name); - n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, lower_case, len, FALSE, - mimes, n_mimes); - if (n == 0) - n = _xdg_glob_hash_node_lookup_file_name (glob_hash->simple_node, file_name, len, TRUE, - mimes, n_mimes); - - if (n == 0) - { - for (list = glob_hash->full_list; list && n < n_mime_types; list = list->next) - { - if (fnmatch ((const char *)list->data, file_name, 0) == 0) - { - mimes[n].mime = list->mime_type; - mimes[n].weight = list->weight; - n++; - } - } - } - free (lower_case); - - qsort (mimes, n, sizeof (MimeWeight), compare_mime_weight); - - if (n_mime_types < n) - n = n_mime_types; - - for (i = 0; i < n; i++) - mime_types[i] = mimes[i].mime; - - return n; -} - - - -/* XdgGlobHash - */ - -XdgGlobHash * -_xdg_glob_hash_new (void) -{ - XdgGlobHash *glob_hash; - - glob_hash = calloc (1, sizeof (XdgGlobHash)); - - return glob_hash; -} - - -static void -_xdg_glob_hash_free_nodes (XdgGlobHashNode *node) -{ - if (node) - { - if (node->child) - _xdg_glob_hash_free_nodes (node->child); - if (node->next) - _xdg_glob_hash_free_nodes (node->next); - if (node->mime_type) - free ((void *) node->mime_type); - free (node); - } -} - -void -_xdg_glob_hash_free (XdgGlobHash *glob_hash) -{ - _xdg_glob_list_free (glob_hash->literal_list); - _xdg_glob_list_free (glob_hash->full_list); - _xdg_glob_hash_free_nodes (glob_hash->simple_node); - free (glob_hash); -} - -XdgGlobType -_xdg_glob_determine_type (const char *glob) -{ - const char *ptr; - int maybe_in_simple_glob = FALSE; - int first_char = TRUE; - - ptr = glob; - - while (*ptr != '\0') - { - if (*ptr == '*' && first_char) - maybe_in_simple_glob = TRUE; - else if (*ptr == '\\' || *ptr == '[' || *ptr == '?' || *ptr == '*') - return XDG_GLOB_FULL; - - first_char = FALSE; - ptr = _xdg_utf8_next_char (ptr); - } - if (maybe_in_simple_glob) - return XDG_GLOB_SIMPLE; - else - return XDG_GLOB_LITERAL; -} - -/* glob must be valid UTF-8 */ -void -_xdg_glob_hash_append_glob (XdgGlobHash *glob_hash, - const char *glob, - const char *mime_type, - int weight, - int case_sensitive) -{ - XdgGlobType type; - - assert (glob_hash != NULL); - assert (glob != NULL); - - type = _xdg_glob_determine_type (glob); - - switch (type) - { - case XDG_GLOB_LITERAL: - glob_hash->literal_list = _xdg_glob_list_append (glob_hash->literal_list, strdup (glob), strdup (mime_type), weight, case_sensitive); - break; - case XDG_GLOB_SIMPLE: - glob_hash->simple_node = _xdg_glob_hash_insert_text (glob_hash->simple_node, glob + 1, mime_type, weight, case_sensitive); - break; - case XDG_GLOB_FULL: - glob_hash->full_list = _xdg_glob_list_append (glob_hash->full_list, strdup (glob), strdup (mime_type), weight, case_sensitive); - break; - } -} - -void -_xdg_glob_hash_dump (XdgGlobHash *glob_hash) -{ - XdgGlobList *list; - printf ("LITERAL STRINGS\n"); - if (!glob_hash || glob_hash->literal_list == NULL) - { - printf (" None\n"); - } - else - { - for (list = glob_hash->literal_list; list; list = list->next) - printf (" %s - %s %d\n", (char *)list->data, list->mime_type, list->weight); - } - printf ("\nSIMPLE GLOBS\n"); - if (!glob_hash || glob_hash->simple_node == NULL) - { - printf (" None\n"); - } - else - { - _xdg_glob_hash_node_dump (glob_hash->simple_node, 4); - } - - printf ("\nFULL GLOBS\n"); - if (!glob_hash || glob_hash->full_list == NULL) - { - printf (" None\n"); - } - else - { - for (list = glob_hash->full_list; list; list = list->next) - printf (" %s - %s %d\n", (char *)list->data, list->mime_type, list->weight); - } -} - - -void -_xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash, - const char *file_name, - int version_two) -{ - FILE *glob_file; - char line[255]; - char *p; - - glob_file = fopen (file_name, "r"); - - if (glob_file == NULL) - return; - - /* FIXME: Not UTF-8 safe. Doesn't work if lines are greater than 255 chars. - * Blah */ - while (fgets (line, 255, glob_file) != NULL) - { - char *colon; - char *mimetype, *glob, *end; - int weight; - int case_sensitive; - - if (line[0] == '#' || line[0] == 0) - continue; - - end = line + strlen(line) - 1; - if (*end == '\n') - *end = 0; - - p = line; - if (version_two) - { - colon = strchr (p, ':'); - if (colon == NULL) - continue; - *colon = 0; - weight = atoi (p); - p = colon + 1; - } - else - weight = 50; - - colon = strchr (p, ':'); - if (colon == NULL) - continue; - *colon = 0; - - mimetype = p; - p = colon + 1; - glob = p; - case_sensitive = FALSE; - - colon = strchr (p, ':'); - if (version_two && colon != NULL) - { - char *flag; - - /* We got flags */ - *colon = 0; - p = colon + 1; - - /* Flags end at next colon */ - colon = strchr (p, ':'); - if (colon != NULL) - *colon = 0; - - flag = strstr (p, "cs"); - if (flag != NULL && - /* Start or after comma */ - (flag == p || - flag[-1] == ',') && - /* ends with comma or end of string */ - (flag[2] == 0 || - flag[2] == ',')) - case_sensitive = TRUE; - } - - _xdg_glob_hash_append_glob (glob_hash, glob, mimetype, weight, case_sensitive); - } - - fclose (glob_file); -} diff --git a/base/third_party/xdg_mime/xdgmimeglob.h b/base/third_party/xdg_mime/xdgmimeglob.h deleted file mode 100644 index 00182920d4..0000000000 --- a/base/third_party/xdg_mime/xdgmimeglob.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeglob.h: Private file. Datastructure for storing the globs. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003 Red Hat, Inc. - * Copyright (C) 2003 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __XDG_MIME_GLOB_H__ -#define __XDG_MIME_GLOB_H__ - -#include "xdgmime.h" - -typedef struct XdgGlobHash XdgGlobHash; - -typedef enum -{ - XDG_GLOB_LITERAL, /* Makefile */ - XDG_GLOB_SIMPLE, /* *.gif */ - XDG_GLOB_FULL /* x*.[ch] */ -} XdgGlobType; - - -#ifdef XDG_PREFIX -#define _xdg_mime_glob_read_from_file XDG_RESERVED_ENTRY(glob_read_from_file) -#define _xdg_glob_hash_new XDG_RESERVED_ENTRY(hash_new) -#define _xdg_glob_hash_free XDG_RESERVED_ENTRY(hash_free) -#define _xdg_glob_hash_lookup_file_name XDG_RESERVED_ENTRY(hash_lookup_file_name) -#define _xdg_glob_hash_append_glob XDG_RESERVED_ENTRY(hash_append_glob) -#define _xdg_glob_determine_type XDG_RESERVED_ENTRY(determine_type) -#define _xdg_glob_hash_dump XDG_RESERVED_ENTRY(hash_dump) -#endif - -void _xdg_mime_glob_read_from_file (XdgGlobHash *glob_hash, - const char *file_name, - int version_two); -XdgGlobHash *_xdg_glob_hash_new (void); -void _xdg_glob_hash_free (XdgGlobHash *glob_hash); -int _xdg_glob_hash_lookup_file_name (XdgGlobHash *glob_hash, - const char *text, - const char *mime_types[], - int n_mime_types); -void _xdg_glob_hash_append_glob (XdgGlobHash *glob_hash, - const char *glob, - const char *mime_type, - int weight, - int case_sensitive); -XdgGlobType _xdg_glob_determine_type (const char *glob); -void _xdg_glob_hash_dump (XdgGlobHash *glob_hash); - -#endif /* __XDG_MIME_GLOB_H__ */ diff --git a/base/third_party/xdg_mime/xdgmimeicon.c b/base/third_party/xdg_mime/xdgmimeicon.c deleted file mode 100644 index 05c9473a68..0000000000 --- a/base/third_party/xdg_mime/xdgmimeicon.c +++ /dev/null @@ -1,183 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeicon.c: Private file. Datastructure for storing the aliases. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2008 Red Hat, Inc. - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "xdgmimeicon.h" -#include "xdgmimeint.h" -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> -#include <string.h> -#include <fnmatch.h> - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -typedef struct XdgIcon XdgIcon; - -struct XdgIcon -{ - char *mime_type; - char *icon_name; -}; - -struct XdgIconList -{ - struct XdgIcon *icons; - int n_icons; -}; - -XdgIconList * -_xdg_mime_icon_list_new (void) -{ - XdgIconList *list; - - list = malloc (sizeof (XdgIconList)); - - list->icons = NULL; - list->n_icons = 0; - - return list; -} - -void -_xdg_mime_icon_list_free (XdgIconList *list) -{ - int i; - - if (list->icons) - { - for (i = 0; i < list->n_icons; i++) - { - free (list->icons[i].mime_type); - free (list->icons[i].icon_name); - } - free (list->icons); - } - free (list); -} - -static int -icon_entry_cmp (const void *v1, const void *v2) -{ - return strcmp (((XdgIcon *)v1)->mime_type, ((XdgIcon *)v2)->mime_type); -} - -const char * -_xdg_mime_icon_list_lookup (XdgIconList *list, - const char *mime_type) -{ - XdgIcon *entry; - XdgIcon key; - - if (list->n_icons > 0) - { - key.mime_type = (char *)mime_type; - key.icon_name = NULL; - - entry = bsearch (&key, list->icons, list->n_icons, - sizeof (XdgIcon), icon_entry_cmp); - if (entry) - return entry->icon_name; - } - - return NULL; -} - -void -_xdg_mime_icon_read_from_file (XdgIconList *list, - const char *file_name) -{ - FILE *file; - char line[255]; - int alloc; - - file = fopen (file_name, "r"); - - if (file == NULL) - return; - - /* FIXME: Not UTF-8 safe. Doesn't work if lines are greater than 255 chars. - * Blah */ - alloc = list->n_icons + 16; - list->icons = realloc (list->icons, alloc * sizeof (XdgIcon)); - while (fgets (line, 255, file) != NULL) - { - char *sep; - if (line[0] == '#') - continue; - - sep = strchr (line, ':'); - if (sep == NULL) - continue; - *(sep++) = '\000'; - sep[strlen (sep) -1] = '\000'; - if (list->n_icons == alloc) - { - alloc <<= 1; - list->icons = realloc (list->icons, - alloc * sizeof (XdgIcon)); - } - list->icons[list->n_icons].mime_type = strdup (line); - list->icons[list->n_icons].icon_name = strdup (sep); - list->n_icons++; - } - list->icons = realloc (list->icons, - list->n_icons * sizeof (XdgIcon)); - - fclose (file); - - if (list->n_icons > 1) - qsort (list->icons, list->n_icons, - sizeof (XdgIcon), icon_entry_cmp); -} - - -void -_xdg_mime_icon_list_dump (XdgIconList *list) -{ - int i; - - if (list->icons) - { - for (i = 0; i < list->n_icons; i++) - { - printf ("%s %s\n", - list->icons[i].mime_type, - list->icons[i].icon_name); - } - } -} - - diff --git a/base/third_party/xdg_mime/xdgmimeicon.h b/base/third_party/xdg_mime/xdgmimeicon.h deleted file mode 100644 index b5f25835db..0000000000 --- a/base/third_party/xdg_mime/xdgmimeicon.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeicon.h: Private file. Datastructure for storing the aliases. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2008 Red Hat, Inc. - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __XDG_MIME_ICON_H__ -#define __XDG_MIME_ICON_H__ - -#include "xdgmime.h" - -typedef struct XdgIconList XdgIconList; - -#ifdef XDG_PREFIX -#define _xdg_mime_icon_read_from_file XDG_ENTRY(icon_read_from_file) -#define _xdg_mime_icon_list_new XDG_ENTRY(icon_list_new) -#define _xdg_mime_icon_list_free XDG_ENTRY(icon_list_free) -#define _xdg_mime_icon_list_lookup XDG_ENTRY(icon_list_lookup) -#define _xdg_mime_icon_list_dump XDG_ENTRY(icon_list_dump) -#endif - -void _xdg_mime_icon_read_from_file (XdgIconList *list, - const char *file_name); -XdgIconList *_xdg_mime_icon_list_new (void); -void _xdg_mime_icon_list_free (XdgIconList *list); -const char *_xdg_mime_icon_list_lookup (XdgIconList *list, - const char *mime); -void _xdg_mime_icon_list_dump (XdgIconList *list); - -#endif /* __XDG_MIME_ICON_H__ */ diff --git a/base/third_party/xdg_mime/xdgmimeint.c b/base/third_party/xdg_mime/xdgmimeint.c deleted file mode 100644 index cf789d9fea..0000000000 --- a/base/third_party/xdg_mime/xdgmimeint.c +++ /dev/null @@ -1,206 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeint.c: Internal defines and functions. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003 Red Hat, Inc. - * Copyright (C) 2003 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "xdgmimeint.h" -#include <ctype.h> -#include <string.h> - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -static const char _xdg_utf8_skip_data[256] = { - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1 -}; - -const char * const _xdg_utf8_skip = _xdg_utf8_skip_data; - - - -/* Returns the number of unprocessed characters. */ -xdg_unichar_t -_xdg_utf8_to_ucs4(const char *source) -{ - xdg_unichar_t ucs32; - if( ! ( *source & 0x80 ) ) - { - ucs32 = *source; - } - else - { - int bytelength = 0; - xdg_unichar_t result; - if ( ! (*source & 0x40) ) - { - ucs32 = *source; - } - else - { - if ( ! (*source & 0x20) ) - { - result = *source++ & 0x1F; - bytelength = 2; - } - else if ( ! (*source & 0x10) ) - { - result = *source++ & 0x0F; - bytelength = 3; - } - else if ( ! (*source & 0x08) ) - { - result = *source++ & 0x07; - bytelength = 4; - } - else if ( ! (*source & 0x04) ) - { - result = *source++ & 0x03; - bytelength = 5; - } - else if ( ! (*source & 0x02) ) - { - result = *source++ & 0x01; - bytelength = 6; - } - else - { - result = *source++; - bytelength = 1; - } - - for ( bytelength --; bytelength > 0; bytelength -- ) - { - result <<= 6; - result |= *source++ & 0x3F; - } - ucs32 = result; - } - } - return ucs32; -} - - -/* hullo. this is great code. don't rewrite it */ - -xdg_unichar_t -_xdg_ucs4_to_lower (xdg_unichar_t source) -{ - /* FIXME: Do a real to_upper sometime */ - /* CaseFolding-3.2.0.txt has a table of rules. */ - if ((source & 0xFF) == source) - return (xdg_unichar_t) tolower ((unsigned char) source); - return source; -} - -int -_xdg_utf8_validate (const char *source) -{ - /* FIXME: actually write */ - return TRUE; -} - -const char * -_xdg_get_base_name (const char *file_name) -{ - const char *base_name; - - if (file_name == NULL) - return NULL; - - base_name = strrchr (file_name, '/'); - - if (base_name == NULL) - return file_name; - else - return base_name + 1; -} - -xdg_unichar_t * -_xdg_convert_to_ucs4 (const char *source, int *len) -{ - xdg_unichar_t *out; - int i; - const char *p; - - out = malloc (sizeof (xdg_unichar_t) * (strlen (source) + 1)); - - p = source; - i = 0; - while (*p) - { - out[i++] = _xdg_utf8_to_ucs4 (p); - p = _xdg_utf8_next_char (p); - } - out[i] = 0; - *len = i; - - return out; -} - -void -_xdg_reverse_ucs4 (xdg_unichar_t *source, int len) -{ - xdg_unichar_t c; - int i; - - for (i = 0; i < len - i - 1; i++) - { - c = source[i]; - source[i] = source[len - i - 1]; - source[len - i - 1] = c; - } -} - -const char * -_xdg_binary_or_text_fallback(const void *data, size_t len) -{ - unsigned char *chardata; - int i; - - chardata = (unsigned char *) data; - for (i = 0; i < 32 && i < len; ++i) - { - if (chardata[i] < 32 && chardata[i] != 9 && chardata[i] != 10 && chardata[i] != 13) - return XDG_MIME_TYPE_UNKNOWN; /* binary data */ - } - - return XDG_MIME_TYPE_TEXTPLAIN; -} diff --git a/base/third_party/xdg_mime/xdgmimeint.h b/base/third_party/xdg_mime/xdgmimeint.h deleted file mode 100644 index 9e8b2cb85a..0000000000 --- a/base/third_party/xdg_mime/xdgmimeint.h +++ /dev/null @@ -1,78 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeint.h: Internal defines and functions. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003 Red Hat, Inc. - * Copyright (C) 2003 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __XDG_MIME_INT_H__ -#define __XDG_MIME_INT_H__ - -#include "xdgmime.h" - - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -/* FIXME: Needs to be configure check */ -typedef unsigned int xdg_unichar_t; -typedef unsigned char xdg_uchar8_t; -typedef unsigned short xdg_uint16_t; -typedef unsigned int xdg_uint32_t; - -#ifdef XDG_PREFIX -#define _xdg_utf8_skip XDG_RESERVED_ENTRY(utf8_skip) -#define _xdg_utf8_to_ucs4 XDG_RESERVED_ENTRY(utf8_to_ucs4) -#define _xdg_ucs4_to_lower XDG_RESERVED_ENTRY(ucs4_to_lower) -#define _xdg_utf8_validate XDG_RESERVED_ENTRY(utf8_validate) -#define _xdg_get_base_name XDG_RESERVED_ENTRY(get_base_name) -#define _xdg_convert_to_ucs4 XDG_RESERVED_ENTRY(convert_to_ucs4) -#define _xdg_reverse_ucs4 XDG_RESERVED_ENTRY(reverse_ucs4) -#endif - -#define SWAP_BE16_TO_LE16(val) (xdg_uint16_t)(((xdg_uint16_t)(val) << 8)|((xdg_uint16_t)(val) >> 8)) - -#define SWAP_BE32_TO_LE32(val) (xdg_uint32_t)((((xdg_uint32_t)(val) & 0xFF000000U) >> 24) | \ - (((xdg_uint32_t)(val) & 0x00FF0000U) >> 8) | \ - (((xdg_uint32_t)(val) & 0x0000FF00U) << 8) | \ - (((xdg_uint32_t)(val) & 0x000000FFU) << 24)) -/* UTF-8 utils - */ -extern const char *const _xdg_utf8_skip; -#define _xdg_utf8_next_char(p) (char *)((p) + _xdg_utf8_skip[*(unsigned char *)(p)]) -#define _xdg_utf8_char_size(p) (int) (_xdg_utf8_skip[*(unsigned char *)(p)]) - -xdg_unichar_t _xdg_utf8_to_ucs4 (const char *source); -xdg_unichar_t _xdg_ucs4_to_lower (xdg_unichar_t source); -int _xdg_utf8_validate (const char *source); -xdg_unichar_t *_xdg_convert_to_ucs4 (const char *source, int *len); -void _xdg_reverse_ucs4 (xdg_unichar_t *source, int len); -const char *_xdg_get_base_name (const char *file_name); -const char *_xdg_binary_or_text_fallback(const void *data, size_t len); - -#endif /* __XDG_MIME_INT_H__ */ diff --git a/base/third_party/xdg_mime/xdgmimemagic.c b/base/third_party/xdg_mime/xdgmimemagic.c deleted file mode 100644 index a2320f5849..0000000000 --- a/base/third_party/xdg_mime/xdgmimemagic.c +++ /dev/null @@ -1,813 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimemagic.: Private file. Datastructure for storing magic files. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003 Red Hat, Inc. - * Copyright (C) 2003 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <assert.h> -#include "xdgmimemagic.h" -#include "xdgmimeint.h" -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <errno.h> -#include <limits.h> - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -#if !defined getc_unlocked && !defined HAVE_GETC_UNLOCKED -# define getc_unlocked(fp) getc (fp) -#endif - -typedef struct XdgMimeMagicMatch XdgMimeMagicMatch; -typedef struct XdgMimeMagicMatchlet XdgMimeMagicMatchlet; - -typedef enum -{ - XDG_MIME_MAGIC_SECTION, - XDG_MIME_MAGIC_MAGIC, - XDG_MIME_MAGIC_ERROR, - XDG_MIME_MAGIC_EOF -} XdgMimeMagicState; - -struct XdgMimeMagicMatch -{ - const char *mime_type; - int priority; - XdgMimeMagicMatchlet *matchlet; - XdgMimeMagicMatch *next; -}; - - -struct XdgMimeMagicMatchlet -{ - int indent; - int offset; - unsigned int value_length; - unsigned char *value; - unsigned char *mask; - unsigned int range_length; - unsigned int word_size; - XdgMimeMagicMatchlet *next; -}; - - -struct XdgMimeMagic -{ - XdgMimeMagicMatch *match_list; - int max_extent; -}; - -static XdgMimeMagicMatch * -_xdg_mime_magic_match_new (void) -{ - return calloc (1, sizeof (XdgMimeMagicMatch)); -} - - -static XdgMimeMagicMatchlet * -_xdg_mime_magic_matchlet_new (void) -{ - XdgMimeMagicMatchlet *matchlet; - - matchlet = malloc (sizeof (XdgMimeMagicMatchlet)); - - matchlet->indent = 0; - matchlet->offset = 0; - matchlet->value_length = 0; - matchlet->value = NULL; - matchlet->mask = NULL; - matchlet->range_length = 1; - matchlet->word_size = 1; - matchlet->next = NULL; - - return matchlet; -} - - -static void -_xdg_mime_magic_matchlet_free (XdgMimeMagicMatchlet *mime_magic_matchlet) -{ - if (mime_magic_matchlet) - { - if (mime_magic_matchlet->next) - _xdg_mime_magic_matchlet_free (mime_magic_matchlet->next); - if (mime_magic_matchlet->value) - free (mime_magic_matchlet->value); - if (mime_magic_matchlet->mask) - free (mime_magic_matchlet->mask); - free (mime_magic_matchlet); - } -} - - -/* Frees mime_magic_match and the remainder of its list - */ -static void -_xdg_mime_magic_match_free (XdgMimeMagicMatch *mime_magic_match) -{ - XdgMimeMagicMatch *ptr, *next; - - ptr = mime_magic_match; - while (ptr) - { - next = ptr->next; - - if (ptr->mime_type) - free ((void *) ptr->mime_type); - if (ptr->matchlet) - _xdg_mime_magic_matchlet_free (ptr->matchlet); - free (ptr); - - ptr = next; - } -} - -/* Reads in a hunk of data until a newline character or a '\000' is hit. The - * returned string is null terminated, and doesn't include the newline. - */ -static unsigned char * -_xdg_mime_magic_read_to_newline (FILE *magic_file, - int *end_of_file) -{ - unsigned char *retval; - int c; - int len, pos; - - len = 128; - pos = 0; - retval = malloc (len); - *end_of_file = FALSE; - - while (TRUE) - { - c = getc_unlocked (magic_file); - if (c == EOF) - { - *end_of_file = TRUE; - break; - } - if (c == '\n' || c == '\000') - break; - retval[pos++] = (unsigned char) c; - if (pos % 128 == 127) - { - len = len + 128; - retval = realloc (retval, len); - } - } - - retval[pos] = '\000'; - return retval; -} - -/* Returns the number read from the file, or -1 if no number could be read. - */ -static int -_xdg_mime_magic_read_a_number (FILE *magic_file, - int *end_of_file) -{ - /* LONG_MAX is about 20 characters on my system */ -#define MAX_NUMBER_SIZE 30 - char number_string[MAX_NUMBER_SIZE + 1]; - int pos = 0; - int c; - long retval = -1; - - while (TRUE) - { - c = getc_unlocked (magic_file); - - if (c == EOF) - { - *end_of_file = TRUE; - break; - } - if (! isdigit (c)) - { - ungetc (c, magic_file); - break; - } - number_string[pos] = (char) c; - pos++; - if (pos == MAX_NUMBER_SIZE) - break; - } - if (pos > 0) - { - number_string[pos] = '\000'; - errno = 0; - retval = strtol (number_string, NULL, 10); - - if ((retval < INT_MIN) || (retval > INT_MAX) || (errno != 0)) - return -1; - } - - return retval; -} - -/* Headers are of the format: - * [<priority>:<mime-type>] - */ -static XdgMimeMagicState -_xdg_mime_magic_parse_header (FILE *magic_file, XdgMimeMagicMatch *match) -{ - int c; - char *buffer; - char *end_ptr; - int end_of_file = 0; - - assert (magic_file != NULL); - assert (match != NULL); - - c = getc_unlocked (magic_file); - if (c == EOF) - return XDG_MIME_MAGIC_EOF; - if (c != '[') - return XDG_MIME_MAGIC_ERROR; - - match->priority = _xdg_mime_magic_read_a_number (magic_file, &end_of_file); - if (end_of_file) - return XDG_MIME_MAGIC_EOF; - if (match->priority == -1) - return XDG_MIME_MAGIC_ERROR; - - c = getc_unlocked (magic_file); - if (c == EOF) - return XDG_MIME_MAGIC_EOF; - if (c != ':') - return XDG_MIME_MAGIC_ERROR; - - buffer = (char *)_xdg_mime_magic_read_to_newline (magic_file, &end_of_file); - if (end_of_file) - return XDG_MIME_MAGIC_EOF; - - end_ptr = buffer; - while (*end_ptr != ']' && *end_ptr != '\000' && *end_ptr != '\n') - end_ptr++; - if (*end_ptr != ']') - { - free (buffer); - return XDG_MIME_MAGIC_ERROR; - } - *end_ptr = '\000'; - - match->mime_type = strdup (buffer); - free (buffer); - - return XDG_MIME_MAGIC_MAGIC; -} - -static XdgMimeMagicState -_xdg_mime_magic_parse_error (FILE *magic_file) -{ - int c; - - while (1) - { - c = getc_unlocked (magic_file); - if (c == EOF) - return XDG_MIME_MAGIC_EOF; - if (c == '\n') - return XDG_MIME_MAGIC_SECTION; - } -} - -/* Headers are of the format: - * [ indent ] ">" start-offset "=" value - * [ "&" mask ] [ "~" word-size ] [ "+" range-length ] "\n" - */ -static XdgMimeMagicState -_xdg_mime_magic_parse_magic_line (FILE *magic_file, - XdgMimeMagicMatch *match) -{ - XdgMimeMagicMatchlet *matchlet; - int c; - int end_of_file; - int indent = 0; - int bytes_read; - - assert (magic_file != NULL); - - /* Sniff the buffer to make sure it's a valid line */ - c = getc_unlocked (magic_file); - if (c == EOF) - return XDG_MIME_MAGIC_EOF; - else if (c == '[') - { - ungetc (c, magic_file); - return XDG_MIME_MAGIC_SECTION; - } - else if (c == '\n') - return XDG_MIME_MAGIC_MAGIC; - - /* At this point, it must be a digit or a '>' */ - end_of_file = FALSE; - if (isdigit (c)) - { - ungetc (c, magic_file); - indent = _xdg_mime_magic_read_a_number (magic_file, &end_of_file); - if (end_of_file) - return XDG_MIME_MAGIC_EOF; - if (indent == -1) - return XDG_MIME_MAGIC_ERROR; - c = getc_unlocked (magic_file); - if (c == EOF) - return XDG_MIME_MAGIC_EOF; - } - - if (c != '>') - return XDG_MIME_MAGIC_ERROR; - - matchlet = _xdg_mime_magic_matchlet_new (); - matchlet->indent = indent; - matchlet->offset = _xdg_mime_magic_read_a_number (magic_file, &end_of_file); - if (end_of_file) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_EOF; - } - if (matchlet->offset == -1) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_ERROR; - } - c = getc_unlocked (magic_file); - if (c == EOF) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_EOF; - } - else if (c != '=') - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_ERROR; - } - - /* Next two bytes determine how long the value is */ - matchlet->value_length = 0; - c = getc_unlocked (magic_file); - if (c == EOF) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_EOF; - } - matchlet->value_length = c & 0xFF; - matchlet->value_length = matchlet->value_length << 8; - - c = getc_unlocked (magic_file); - if (c == EOF) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_EOF; - } - matchlet->value_length = matchlet->value_length + (c & 0xFF); - - matchlet->value = malloc (matchlet->value_length); - - /* OOM */ - if (matchlet->value == NULL) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_ERROR; - } - bytes_read = fread (matchlet->value, 1, matchlet->value_length, magic_file); - if (bytes_read != matchlet->value_length) - { - _xdg_mime_magic_matchlet_free (matchlet); - if (feof (magic_file)) - return XDG_MIME_MAGIC_EOF; - else - return XDG_MIME_MAGIC_ERROR; - } - - c = getc_unlocked (magic_file); - if (c == '&') - { - matchlet->mask = malloc (matchlet->value_length); - /* OOM */ - if (matchlet->mask == NULL) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_ERROR; - } - bytes_read = fread (matchlet->mask, 1, matchlet->value_length, magic_file); - if (bytes_read != matchlet->value_length) - { - _xdg_mime_magic_matchlet_free (matchlet); - if (feof (magic_file)) - return XDG_MIME_MAGIC_EOF; - else - return XDG_MIME_MAGIC_ERROR; - } - c = getc_unlocked (magic_file); - } - - if (c == '~') - { - matchlet->word_size = _xdg_mime_magic_read_a_number (magic_file, &end_of_file); - if (end_of_file) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_EOF; - } - if (matchlet->word_size != 0 && - matchlet->word_size != 1 && - matchlet->word_size != 2 && - matchlet->word_size != 4) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_ERROR; - } - c = getc_unlocked (magic_file); - } - - if (c == '+') - { - matchlet->range_length = _xdg_mime_magic_read_a_number (magic_file, &end_of_file); - if (end_of_file) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_EOF; - } - if (matchlet->range_length == -1) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_ERROR; - } - c = getc_unlocked (magic_file); - } - - - if (c == '\n') - { - /* We clean up the matchlet, byte swapping if needed */ - if (matchlet->word_size > 1) - { - int i; - if (matchlet->value_length % matchlet->word_size != 0) - { - _xdg_mime_magic_matchlet_free (matchlet); - return XDG_MIME_MAGIC_ERROR; - } - /* FIXME: need to get this defined in a <config.h> style file */ -#if LITTLE_ENDIAN - for (i = 0; i < matchlet->value_length; i = i + matchlet->word_size) - { - if (matchlet->word_size == 2) - *((xdg_uint16_t *) matchlet->value + i) = SWAP_BE16_TO_LE16 (*((xdg_uint16_t *) (matchlet->value + i))); - else if (matchlet->word_size == 4) - *((xdg_uint32_t *) matchlet->value + i) = SWAP_BE32_TO_LE32 (*((xdg_uint32_t *) (matchlet->value + i))); - if (matchlet->mask) - { - if (matchlet->word_size == 2) - *((xdg_uint16_t *) matchlet->mask + i) = SWAP_BE16_TO_LE16 (*((xdg_uint16_t *) (matchlet->mask + i))); - else if (matchlet->word_size == 4) - *((xdg_uint32_t *) matchlet->mask + i) = SWAP_BE32_TO_LE32 (*((xdg_uint32_t *) (matchlet->mask + i))); - - } - } -#endif - } - - matchlet->next = match->matchlet; - match->matchlet = matchlet; - - - return XDG_MIME_MAGIC_MAGIC; - } - - _xdg_mime_magic_matchlet_free (matchlet); - if (c == EOF) - return XDG_MIME_MAGIC_EOF; - - return XDG_MIME_MAGIC_ERROR; -} - -static int -_xdg_mime_magic_matchlet_compare_to_data (XdgMimeMagicMatchlet *matchlet, - const void *data, - size_t len) -{ - int i, j; - for (i = matchlet->offset; i < matchlet->offset + matchlet->range_length; i++) - { - int valid_matchlet = TRUE; - - if (i + matchlet->value_length > len) - return FALSE; - - if (matchlet->mask) - { - for (j = 0; j < matchlet->value_length; j++) - { - if ((matchlet->value[j] & matchlet->mask[j]) != - ((((unsigned char *) data)[j + i]) & matchlet->mask[j])) - { - valid_matchlet = FALSE; - break; - } - } - } - else - { - for (j = 0; j < matchlet->value_length; j++) - { - if (matchlet->value[j] != ((unsigned char *) data)[j + i]) - { - valid_matchlet = FALSE; - break; - } - } - } - if (valid_matchlet) - return TRUE; - } - return FALSE; -} - -static int -_xdg_mime_magic_matchlet_compare_level (XdgMimeMagicMatchlet *matchlet, - const void *data, - size_t len, - int indent) -{ - while ((matchlet != NULL) && (matchlet->indent == indent)) - { - if (_xdg_mime_magic_matchlet_compare_to_data (matchlet, data, len)) - { - if ((matchlet->next == NULL) || - (matchlet->next->indent <= indent)) - return TRUE; - - if (_xdg_mime_magic_matchlet_compare_level (matchlet->next, - data, - len, - indent + 1)) - return TRUE; - } - - do - { - matchlet = matchlet->next; - } - while (matchlet && matchlet->indent > indent); - } - - return FALSE; -} - -static int -_xdg_mime_magic_match_compare_to_data (XdgMimeMagicMatch *match, - const void *data, - size_t len) -{ - return _xdg_mime_magic_matchlet_compare_level (match->matchlet, data, len, 0); -} - -static void -_xdg_mime_magic_insert_match (XdgMimeMagic *mime_magic, - XdgMimeMagicMatch *match) -{ - XdgMimeMagicMatch *list; - - if (mime_magic->match_list == NULL) - { - mime_magic->match_list = match; - return; - } - - if (match->priority > mime_magic->match_list->priority) - { - match->next = mime_magic->match_list; - mime_magic->match_list = match; - return; - } - - list = mime_magic->match_list; - while (list->next != NULL) - { - if (list->next->priority < match->priority) - { - match->next = list->next; - list->next = match; - return; - } - list = list->next; - } - list->next = match; - match->next = NULL; -} - -XdgMimeMagic * -_xdg_mime_magic_new (void) -{ - return calloc (1, sizeof (XdgMimeMagic)); -} - -void -_xdg_mime_magic_free (XdgMimeMagic *mime_magic) -{ - if (mime_magic) { - _xdg_mime_magic_match_free (mime_magic->match_list); - free (mime_magic); - } -} - -int -_xdg_mime_magic_get_buffer_extents (XdgMimeMagic *mime_magic) -{ - return mime_magic->max_extent; -} - -const char * -_xdg_mime_magic_lookup_data (XdgMimeMagic *mime_magic, - const void *data, - size_t len, - int *result_prio, - const char *mime_types[], - int n_mime_types) -{ - XdgMimeMagicMatch *match; - const char *mime_type; - int n; - int prio; - - prio = 0; - mime_type = NULL; - for (match = mime_magic->match_list; match; match = match->next) - { - if (_xdg_mime_magic_match_compare_to_data (match, data, len)) - { - prio = match->priority; - mime_type = match->mime_type; - break; - } - else - { - for (n = 0; n < n_mime_types; n++) - { - if (mime_types[n] && - _xdg_mime_mime_type_equal (mime_types[n], match->mime_type)) - mime_types[n] = NULL; - } - } - } - - if (mime_type == NULL) - { - for (n = 0; n < n_mime_types; n++) - { - if (mime_types[n]) - mime_type = mime_types[n]; - } - } - - if (result_prio) - *result_prio = prio; - - return mime_type; -} - -static void -_xdg_mime_update_mime_magic_extents (XdgMimeMagic *mime_magic) -{ - XdgMimeMagicMatch *match; - int max_extent = 0; - - for (match = mime_magic->match_list; match; match = match->next) - { - XdgMimeMagicMatchlet *matchlet; - - for (matchlet = match->matchlet; matchlet; matchlet = matchlet->next) - { - int extent; - - extent = matchlet->value_length + matchlet->offset + matchlet->range_length; - if (max_extent < extent) - max_extent = extent; - } - } - - mime_magic->max_extent = max_extent; -} - -static XdgMimeMagicMatchlet * -_xdg_mime_magic_matchlet_mirror (XdgMimeMagicMatchlet *matchlets) -{ - XdgMimeMagicMatchlet *new_list; - XdgMimeMagicMatchlet *tmp; - - if ((matchlets == NULL) || (matchlets->next == NULL)) - return matchlets; - - new_list = NULL; - tmp = matchlets; - while (tmp != NULL) - { - XdgMimeMagicMatchlet *matchlet; - - matchlet = tmp; - tmp = tmp->next; - matchlet->next = new_list; - new_list = matchlet; - } - - return new_list; - -} - -static void -_xdg_mime_magic_read_magic_file (XdgMimeMagic *mime_magic, - FILE *magic_file) -{ - XdgMimeMagicState state; - XdgMimeMagicMatch *match = NULL; /* Quiet compiler */ - - state = XDG_MIME_MAGIC_SECTION; - - while (state != XDG_MIME_MAGIC_EOF) - { - switch (state) - { - case XDG_MIME_MAGIC_SECTION: - match = _xdg_mime_magic_match_new (); - state = _xdg_mime_magic_parse_header (magic_file, match); - if (state == XDG_MIME_MAGIC_EOF || state == XDG_MIME_MAGIC_ERROR) - _xdg_mime_magic_match_free (match); - break; - case XDG_MIME_MAGIC_MAGIC: - state = _xdg_mime_magic_parse_magic_line (magic_file, match); - if (state == XDG_MIME_MAGIC_SECTION || - (state == XDG_MIME_MAGIC_EOF && match->mime_type)) - { - match->matchlet = _xdg_mime_magic_matchlet_mirror (match->matchlet); - _xdg_mime_magic_insert_match (mime_magic, match); - } - else if (state == XDG_MIME_MAGIC_EOF || state == XDG_MIME_MAGIC_ERROR) - _xdg_mime_magic_match_free (match); - break; - case XDG_MIME_MAGIC_ERROR: - state = _xdg_mime_magic_parse_error (magic_file); - break; - case XDG_MIME_MAGIC_EOF: - default: - /* Make the compiler happy */ - assert (0); - } - } - _xdg_mime_update_mime_magic_extents (mime_magic); -} - -void -_xdg_mime_magic_read_from_file (XdgMimeMagic *mime_magic, - const char *file_name) -{ - FILE *magic_file; - char header[12]; - - magic_file = fopen (file_name, "r"); - - if (magic_file == NULL) - return; - - if (fread (header, 1, 12, magic_file) == 12) - { - if (memcmp ("MIME-Magic\0\n", header, 12) == 0) - _xdg_mime_magic_read_magic_file (mime_magic, magic_file); - } - - fclose (magic_file); -} diff --git a/base/third_party/xdg_mime/xdgmimemagic.h b/base/third_party/xdg_mime/xdgmimemagic.h deleted file mode 100644 index 35c8039c8e..0000000000 --- a/base/third_party/xdg_mime/xdgmimemagic.h +++ /dev/null @@ -1,57 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimemagic.h: Private file. Datastructure for storing the magic files. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2003 Red Hat, Inc. - * Copyright (C) 2003 Jonathan Blandford <jrb@alum.mit.edu> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __XDG_MIME_MAGIC_H__ -#define __XDG_MIME_MAGIC_H__ - -#include <unistd.h> -#include "xdgmime.h" -typedef struct XdgMimeMagic XdgMimeMagic; - -#ifdef XDG_PREFIX -#define _xdg_mime_glob_read_from_file XDG_RESERVED_ENTRY(glob_read_from_file) -#define _xdg_mime_magic_new XDG_RESERVED_ENTRY(magic_new) -#define _xdg_mime_magic_read_from_file XDG_RESERVED_ENTRY(magic_read_from_file) -#define _xdg_mime_magic_free XDG_RESERVED_ENTRY(magic_free) -#define _xdg_mime_magic_get_buffer_extents XDG_RESERVED_ENTRY(magic_get_buffer_extents) -#define _xdg_mime_magic_lookup_data XDG_RESERVED_ENTRY(magic_lookup_data) -#endif - - -XdgMimeMagic *_xdg_mime_magic_new (void); -void _xdg_mime_magic_read_from_file (XdgMimeMagic *mime_magic, - const char *file_name); -void _xdg_mime_magic_free (XdgMimeMagic *mime_magic); -int _xdg_mime_magic_get_buffer_extents (XdgMimeMagic *mime_magic); -const char *_xdg_mime_magic_lookup_data (XdgMimeMagic *mime_magic, - const void *data, - size_t len, - int *result_prio, - const char *mime_types[], - int n_mime_types); - -#endif /* __XDG_MIME_MAGIC_H__ */ diff --git a/base/third_party/xdg_mime/xdgmimeparent.c b/base/third_party/xdg_mime/xdgmimeparent.c deleted file mode 100644 index 511bbacbc1..0000000000 --- a/base/third_party/xdg_mime/xdgmimeparent.c +++ /dev/null @@ -1,219 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimealias.c: Private file. Datastructure for storing the hierarchy. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2004 Red Hat, Inc. - * Copyright (C) 2004 Matthias Clasen <mclasen@redhat.com> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include "xdgmimeparent.h" -#include "xdgmimeint.h" -#include <stdlib.h> -#include <stdio.h> -#include <assert.h> -#include <string.h> -#include <fnmatch.h> - -#ifndef FALSE -#define FALSE (0) -#endif - -#ifndef TRUE -#define TRUE (!FALSE) -#endif - -typedef struct XdgMimeParents XdgMimeParents; - -struct XdgMimeParents -{ - char *mime; - char **parents; - int n_parents; -}; - -struct XdgParentList -{ - struct XdgMimeParents *parents; - int n_mimes; -}; - -XdgParentList * -_xdg_mime_parent_list_new (void) -{ - XdgParentList *list; - - list = malloc (sizeof (XdgParentList)); - - list->parents = NULL; - list->n_mimes = 0; - - return list; -} - -void -_xdg_mime_parent_list_free (XdgParentList *list) -{ - int i; - char **p; - - if (list->parents) - { - for (i = 0; i < list->n_mimes; i++) - { - for (p = list->parents[i].parents; *p; p++) - free (*p); - - free (list->parents[i].parents); - free (list->parents[i].mime); - } - free (list->parents); - } - free (list); -} - -static int -parent_entry_cmp (const void *v1, const void *v2) -{ - return strcmp (((XdgMimeParents *)v1)->mime, ((XdgMimeParents *)v2)->mime); -} - -const char ** -_xdg_mime_parent_list_lookup (XdgParentList *list, - const char *mime) -{ - XdgMimeParents *entry; - XdgMimeParents key; - - if (list->n_mimes > 0) - { - key.mime = (char *)mime; - key.parents = NULL; - - entry = bsearch (&key, list->parents, list->n_mimes, - sizeof (XdgMimeParents), &parent_entry_cmp); - if (entry) - return (const char **)entry->parents; - } - - return NULL; -} - -void -_xdg_mime_parent_read_from_file (XdgParentList *list, - const char *file_name) -{ - FILE *file; - char line[255]; - int i, alloc; - XdgMimeParents *entry; - - file = fopen (file_name, "r"); - - if (file == NULL) - return; - - /* FIXME: Not UTF-8 safe. Doesn't work if lines are greater than 255 chars. - * Blah */ - alloc = list->n_mimes + 16; - list->parents = realloc (list->parents, alloc * sizeof (XdgMimeParents)); - while (fgets (line, 255, file) != NULL) - { - char *sep; - if (line[0] == '#') - continue; - - sep = strchr (line, ' '); - if (sep == NULL) - continue; - *(sep++) = '\000'; - sep[strlen (sep) -1] = '\000'; - entry = NULL; - for (i = 0; i < list->n_mimes; i++) - { - if (strcmp (list->parents[i].mime, line) == 0) - { - entry = &(list->parents[i]); - break; - } - } - - if (!entry) - { - if (list->n_mimes == alloc) - { - alloc <<= 1; - list->parents = realloc (list->parents, - alloc * sizeof (XdgMimeParents)); - } - list->parents[list->n_mimes].mime = strdup (line); - list->parents[list->n_mimes].parents = NULL; - entry = &(list->parents[list->n_mimes]); - list->n_mimes++; - } - - if (!entry->parents) - { - entry->n_parents = 1; - entry->parents = malloc ((entry->n_parents + 1) * sizeof (char *)); - } - else - { - entry->n_parents += 1; - entry->parents = realloc (entry->parents, - (entry->n_parents + 2) * sizeof (char *)); - } - entry->parents[entry->n_parents - 1] = strdup (sep); - entry->parents[entry->n_parents] = NULL; - } - - list->parents = realloc (list->parents, - list->n_mimes * sizeof (XdgMimeParents)); - - fclose (file); - - if (list->n_mimes > 1) - qsort (list->parents, list->n_mimes, - sizeof (XdgMimeParents), &parent_entry_cmp); -} - - -void -_xdg_mime_parent_list_dump (XdgParentList *list) -{ - int i; - char **p; - - if (list->parents) - { - for (i = 0; i < list->n_mimes; i++) - { - for (p = list->parents[i].parents; *p; p++) - printf ("%s %s\n", list->parents[i].mime, *p); - } - } -} - - diff --git a/base/third_party/xdg_mime/xdgmimeparent.h b/base/third_party/xdg_mime/xdgmimeparent.h deleted file mode 100644 index b564f4127f..0000000000 --- a/base/third_party/xdg_mime/xdgmimeparent.h +++ /dev/null @@ -1,51 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu" -*- */ -/* xdgmimeparent.h: Private file. Datastructure for storing the hierarchy. - * - * More info can be found at http://www.freedesktop.org/standards/ - * - * Copyright (C) 2004 Red Hat, Inc. - * Copyright (C) 200 Matthias Clasen <mclasen@redhat.com> - * - * Licensed under the Academic Free License version 2.0 - * Or under the following terms: - * - * This library 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 of the License, or (at your option) any later version. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef __XDG_MIME_PARENT_H__ -#define __XDG_MIME_PARENT_H__ - -#include "xdgmime.h" - -typedef struct XdgParentList XdgParentList; - -#ifdef XDG_PREFIX -#define _xdg_mime_parent_read_from_file XDG_RESERVED_ENTRY(parent_read_from_file) -#define _xdg_mime_parent_list_new XDG_RESERVED_ENTRY(parent_list_new) -#define _xdg_mime_parent_list_free XDG_RESERVED_ENTRY(parent_list_free) -#define _xdg_mime_parent_list_lookup XDG_RESERVED_ENTRY(parent_list_lookup) -#define _xdg_mime_parent_list_dump XDG_RESERVED_ENTRY(parent_list_dump) -#endif - -void _xdg_mime_parent_read_from_file (XdgParentList *list, - const char *file_name); -XdgParentList *_xdg_mime_parent_list_new (void); -void _xdg_mime_parent_list_free (XdgParentList *list); -const char **_xdg_mime_parent_list_lookup (XdgParentList *list, - const char *mime); -void _xdg_mime_parent_list_dump (XdgParentList *list); - -#endif /* __XDG_MIME_PARENT_H__ */ diff --git a/base/third_party/xdg_user_dirs/BUILD.gn b/base/third_party/xdg_user_dirs/BUILD.gn deleted file mode 100644 index 62e7cdfdbd..0000000000 --- a/base/third_party/xdg_user_dirs/BUILD.gn +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (c) 2013 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -source_set("xdg_user_dirs") { - visibility = [ "//base/*" ] - sources = [ - "xdg_user_dir_lookup.cc", - "xdg_user_dir_lookup.h", - ] -} diff --git a/base/third_party/xdg_user_dirs/LICENSE b/base/third_party/xdg_user_dirs/LICENSE deleted file mode 100644 index 540e8031c7..0000000000 --- a/base/third_party/xdg_user_dirs/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ - Copyright (c) 2007 Red Hat, inc - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. diff --git a/base/third_party/xdg_user_dirs/README.chromium b/base/third_party/xdg_user_dirs/README.chromium deleted file mode 100644 index b4cf6d7400..0000000000 --- a/base/third_party/xdg_user_dirs/README.chromium +++ /dev/null @@ -1,7 +0,0 @@ -Name: xdg-user-dirs -URL: http://www.freedesktop.org/wiki/Software/xdg-user-dirs -License: MIT - -This directory include xdg-user-dir-lookup.c renamed as xdg_user_dir_lookup.cc -from xdg-user-dirs 0.10. We made xdg_user_dir_lookup() non-static and added a -xdg_user_dir_lookup.h. diff --git a/base/third_party/xdg_user_dirs/xdg_user_dir_lookup.cc b/base/third_party/xdg_user_dirs/xdg_user_dir_lookup.cc deleted file mode 100644 index 343f70cb42..0000000000 --- a/base/third_party/xdg_user_dirs/xdg_user_dir_lookup.cc +++ /dev/null @@ -1,232 +0,0 @@ -/* - This file is not licenced under the GPL like the rest of the code. - Its is under the MIT license, to encourage reuse by cut-and-paste. - - Copyright (c) 2007 Red Hat, inc - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -/** - * xdg_user_dir_lookup_with_fallback: - * @type: a string specifying the type of directory - * @fallback: value to use if the directory isn't specified by the user - * @returns: a newly allocated absolute pathname - * - * Looks up a XDG user directory of the specified type. - * Example of types are "DESKTOP" and "DOWNLOAD". - * - * In case the user hasn't specified any directory for the specified - * type the value returned is @fallback. - * - * The return value is newly allocated and must be freed with - * free(). The return value is never NULL if @fallback != NULL, unless - * out of memory. - **/ -static char * -xdg_user_dir_lookup_with_fallback (const char *type, const char *fallback) -{ - FILE *file; - char *home_dir, *config_home, *config_file; - char buffer[512]; - char *user_dir; - char *p, *d; - int len; - int relative; - - home_dir = getenv ("HOME"); - - if (home_dir == NULL) - goto error; - - config_home = getenv ("XDG_CONFIG_HOME"); - if (config_home == NULL || config_home[0] == 0) - { - config_file = (char*) malloc (strlen (home_dir) + strlen ("/.config/user-dirs.dirs") + 1); - if (config_file == NULL) - goto error; - - strcpy (config_file, home_dir); - strcat (config_file, "/.config/user-dirs.dirs"); - } - else - { - config_file = (char*) malloc (strlen (config_home) + strlen ("/user-dirs.dirs") + 1); - if (config_file == NULL) - goto error; - - strcpy (config_file, config_home); - strcat (config_file, "/user-dirs.dirs"); - } - - file = fopen (config_file, "r"); - free (config_file); - if (file == NULL) - goto error; - - user_dir = NULL; - while (fgets (buffer, sizeof (buffer), file)) - { - /* Remove newline at end */ - len = strlen (buffer); - if (len > 0 && buffer[len-1] == '\n') - buffer[len-1] = 0; - - p = buffer; - while (*p == ' ' || *p == '\t') - p++; - - if (strncmp (p, "XDG_", 4) != 0) - continue; - p += 4; - if (strncmp (p, type, strlen (type)) != 0) - continue; - p += strlen (type); - if (strncmp (p, "_DIR", 4) != 0) - continue; - p += 4; - - while (*p == ' ' || *p == '\t') - p++; - - if (*p != '=') - continue; - p++; - - while (*p == ' ' || *p == '\t') - p++; - - if (*p != '"') - continue; - p++; - - relative = 0; - if (strncmp (p, "$HOME/", 6) == 0) - { - p += 6; - relative = 1; - } - else if (*p != '/') - continue; - - if (relative) - { - user_dir = (char*) malloc (strlen (home_dir) + 1 + strlen (p) + 1); - if (user_dir == NULL) - goto error2; - - strcpy (user_dir, home_dir); - strcat (user_dir, "/"); - } - else - { - user_dir = (char*) malloc (strlen (p) + 1); - if (user_dir == NULL) - goto error2; - - *user_dir = 0; - } - - d = user_dir + strlen (user_dir); - while (*p && *p != '"') - { - if ((*p == '\\') && (*(p+1) != 0)) - p++; - *d++ = *p++; - } - *d = 0; - } -error2: - fclose (file); - - if (user_dir) - return user_dir; - - error: - if (fallback) - return strdup (fallback); - return NULL; -} - -/** - * xdg_user_dir_lookup: - * @type: a string specifying the type of directory - * @returns: a newly allocated absolute pathname - * - * Looks up a XDG user directory of the specified type. - * Example of types are "DESKTOP" and "DOWNLOAD". - * - * The return value is always != NULL (unless out of memory), - * and if a directory - * for the type is not specified by the user the default - * is the home directory. Except for DESKTOP which defaults - * to ~/Desktop. - * - * The return value is newly allocated and must be freed with - * free(). - **/ -char * -xdg_user_dir_lookup (const char *type) -{ - char *dir, *home_dir, *user_dir; - - dir = xdg_user_dir_lookup_with_fallback (type, NULL); - if (dir != NULL) - return dir; - - home_dir = getenv ("HOME"); - - if (home_dir == NULL) - return strdup ("/tmp"); - - /* Special case desktop for historical compatibility */ - if (strcmp (type, "DESKTOP") == 0) - { - user_dir = (char*) malloc (strlen (home_dir) + strlen ("/Desktop") + 1); - if (user_dir == NULL) - return NULL; - - strcpy (user_dir, home_dir); - strcat (user_dir, "/Desktop"); - return user_dir; - } - - return strdup (home_dir); -} - -#ifdef STANDALONE_XDG_USER_DIR_LOOKUP -int -main (int argc, char *argv[]) -{ - if (argc != 2) - { - fprintf (stderr, "Usage %s <dir-type>\n", argv[0]); - exit (1); - } - - printf ("%s\n", xdg_user_dir_lookup (argv[1])); - return 0; -} -#endif diff --git a/base/third_party/xdg_user_dirs/xdg_user_dir_lookup.h b/base/third_party/xdg_user_dirs/xdg_user_dir_lookup.h deleted file mode 100644 index 9e81e1b530..0000000000 --- a/base/third_party/xdg_user_dirs/xdg_user_dir_lookup.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - This file is not licenced under the GPL like the rest of the code. - Its is under the MIT license, to encourage reuse by cut-and-paste. - - Copyright (c) 2007 Red Hat, inc - - Permission is hereby granted, free of charge, to any person - obtaining a copy of this software and associated documentation files - (the "Software"), to deal in the Software without restriction, - including without limitation the rights to use, copy, modify, merge, - publish, distribute, sublicense, and/or sell copies of the Software, - and to permit persons to whom the Software is furnished to do so, - subject to the following conditions: - - The above copyright notice and this permission notice shall be - included in all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#ifndef CHROME_THIRD_PARTY_XDG_USER_DIRS_XDG_USER_DIR_LOOKUP_H_ -#define CHROME_THIRD_PARTY_XDG_USER_DIRS_XDG_USER_DIR_LOOKUP_H_ - -char* xdg_user_dir_lookup(const char *type); - -#endif // CHROME_THIRD_PARTY_XDG_USER_DIRS_XDG_USER_DIR_LOOKUP_H_ |