123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223 |
- /*
- * libusb strerror code
- * Copyright © 2013 Hans de Goede <hdegoede@redhat.com>
- *
- * 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.1 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- #include "libusbi.h"
- #include <ctype.h>
- #include <string.h>
- /** \ingroup libusb_misc
- * How to add a new \ref libusb_strerror() translation:
- * <ol>
- * <li> Download the latest \c strerror.c from:<br>
- * https://raw.github.com/libusb/libusb/master/libusb/strerror.c </li>
- * <li> Open the file in an UTF-8 capable editor </li>
- * <li> Add the 2 letter <a href="http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes">ISO 639-1</a>
- * code for your locale at the end of \c usbi_locale_supported[]<br>
- * Eg. for Chinese, you would add "zh" so that:
- * \code... usbi_locale_supported[] = { "en", "nl", "fr" };\endcode
- * becomes:
- * \code... usbi_locale_supported[] = { "en", "nl", "fr", "zh" };\endcode </li>
- * <li> Copy the <tt>{ / * English (en) * / ... }</tt> section and add it at the end of \c usbi_localized_errors<br>
- * Eg. for Chinese, the last section of \c usbi_localized_errors could look like:
- * \code
- * }, { / * Chinese (zh) * /
- * "Success",
- * ...
- * "Other error",
- * },
- * };\endcode </li>
- * <li> Translate each of the English messages from the section you copied into your language </li>
- * <li> Save the file (in UTF-8 format) and send it to \c libusb-devel\@lists.sourceforge.net </li>
- * </ol>
- */
- static const char * const usbi_locale_supported[] = { "en", "nl", "fr", "ru", "de", "hu" };
- static const char * const usbi_localized_errors[ARRAYSIZE(usbi_locale_supported)][LIBUSB_ERROR_COUNT] = {
- { /* English (en) */
- "Success",
- "Input/Output Error",
- "Invalid parameter",
- "Access denied (insufficient permissions)",
- "No such device (it may have been disconnected)",
- "Entity not found",
- "Resource busy",
- "Operation timed out",
- "Overflow",
- "Pipe error",
- "System call interrupted (perhaps due to signal)",
- "Insufficient memory",
- "Operation not supported or unimplemented on this platform",
- "Other error",
- }, { /* Dutch (nl) */
- "Gelukt",
- "Invoer-/uitvoerfout",
- "Ongeldig argument",
- "Toegang geweigerd (onvoldoende toegangsrechten)",
- "Apparaat bestaat niet (verbinding met apparaat verbroken?)",
- "Niet gevonden",
- "Apparaat of hulpbron is bezig",
- "Bewerking verlopen",
- "Waarde is te groot",
- "Gebroken pijp",
- "Onderbroken systeemaanroep",
- "Onvoldoende geheugen beschikbaar",
- "Bewerking wordt niet ondersteund",
- "Andere fout",
- }, { /* French (fr) */
- "Succès",
- "Erreur d'entrée/sortie",
- "Paramètre invalide",
- "Accès refusé (permissions insuffisantes)",
- "Périphérique introuvable (peut-être déconnecté)",
- "Elément introuvable",
- "Resource déjà occupée",
- "Operation expirée",
- "Débordement",
- "Erreur de pipe",
- "Appel système abandonné (peut-être à cause d’un signal)",
- "Mémoire insuffisante",
- "Opération non supportée or non implémentée sur cette plateforme",
- "Autre erreur",
- }, { /* Russian (ru) */
- "Успех",
- "Ошибка ввода/вывода",
- "Неверный параметр",
- "Доступ запрещён (не хватает прав)",
- "Устройство отсутствует (возможно, оно было отсоединено)",
- "Элемент не найден",
- "Ресурс занят",
- "Истекло время ожидания операции",
- "Переполнение",
- "Ошибка канала",
- "Системный вызов прерван (возможно, сигналом)",
- "Память исчерпана",
- "Операция не поддерживается данной платформой",
- "Неизвестная ошибка"
- }, { /* German (de) */
- "Erfolgreich",
- "Eingabe-/Ausgabefehler",
- "Ungültiger Parameter",
- "Keine Berechtigung (Zugriffsrechte fehlen)",
- "Kein passendes Gerät gefunden (es könnte entfernt worden sein)",
- "Entität nicht gefunden",
- "Die Ressource ist belegt",
- "Die Wartezeit für die Operation ist abgelaufen",
- "Mehr Daten empfangen als erwartet",
- "Datenübergabe unterbrochen (broken pipe)",
- "Unterbrechung während des Betriebssystemaufrufs",
- "Nicht genügend Hauptspeicher verfügbar",
- "Die Operation wird nicht unterstützt oder ist auf dieser Platform nicht implementiert",
- "Allgemeiner Fehler",
- }, { /* Hungarian (hu) */
- "Sikeres",
- "Be-/kimeneti hiba",
- "Érvénytelen paraméter",
- "Hozzáférés megtagadva",
- "Az eszköz nem található (eltávolították?)",
- "Nem található",
- "Az erőforrás foglalt",
- "Időtúllépés",
- "Túlcsordulás",
- "Törött adatcsatorna",
- "Rendszerhívás megszakítva",
- "Nincs elég memória",
- "A művelet nem támogatott ezen a rendszeren",
- "Általános hiba",
- },
- };
- static const char * const (*usbi_error_strings)[LIBUSB_ERROR_COUNT] = &usbi_localized_errors[0];
- /** \ingroup libusb_misc
- * Set the language, and only the language, not the encoding! used for
- * translatable libusb messages.
- *
- * This takes a locale string in the default setlocale format: lang[-region]
- * or lang[_country_region][.codeset]. Only the lang part of the string is
- * used, and only 2 letter ISO 639-1 codes are accepted for it, such as "de".
- * The optional region, country_region or codeset parts are ignored. This
- * means that functions which return translatable strings will NOT honor the
- * specified encoding.
- * All strings returned are encoded as UTF-8 strings.
- *
- * If libusb_setlocale() is not called, all messages will be in English.
- *
- * The following functions return translatable strings: libusb_strerror().
- * Note that the libusb log messages controlled through libusb_set_debug()
- * are not translated, they are always in English.
- *
- * For POSIX UTF-8 environments if you want libusb to follow the standard
- * locale settings, call libusb_setlocale(setlocale(LC_MESSAGES, NULL)),
- * after your app has done its locale setup.
- *
- * \param locale locale-string in the form of lang[_country_region][.codeset]
- * or lang[-region], where lang is a 2 letter ISO 639-1 code
- * \returns LIBUSB_SUCCESS on success
- * \returns LIBUSB_ERROR_INVALID_PARAM if the locale doesn't meet the requirements
- * \returns LIBUSB_ERROR_NOT_FOUND if the requested language is not supported
- * \returns a LIBUSB_ERROR code on other errors
- */
- int API_EXPORTED libusb_setlocale(const char *locale)
- {
- size_t i;
- if (!locale || strlen(locale) < 2
- || (locale[2] != '\0' && locale[2] != '-' && locale[2] != '_' && locale[2] != '.'))
- return LIBUSB_ERROR_INVALID_PARAM;
- for (i = 0; i < ARRAYSIZE(usbi_locale_supported); i++) {
- if (usbi_locale_supported[i][0] == tolower((unsigned char)locale[0])
- && usbi_locale_supported[i][1] == tolower((unsigned char)locale[1]))
- break;
- }
- if (i == ARRAYSIZE(usbi_locale_supported))
- return LIBUSB_ERROR_NOT_FOUND;
- usbi_error_strings = &usbi_localized_errors[i];
- return LIBUSB_SUCCESS;
- }
- /** \ingroup libusb_misc
- * Returns a constant string with a short description of the given error code,
- * this description is intended for displaying to the end user and will be in
- * the language set by libusb_setlocale().
- *
- * The returned string is encoded in UTF-8.
- *
- * The messages always start with a capital letter and end without any dot.
- * The caller must not free() the returned string.
- *
- * \param errcode the error code whose description is desired
- * \returns a short description of the error code in UTF-8 encoding
- */
- DEFAULT_VISIBILITY const char * LIBUSB_CALL libusb_strerror(int errcode)
- {
- int errcode_index = -errcode;
- if (errcode_index < 0 || errcode_index >= LIBUSB_ERROR_COUNT) {
- /* "Other Error", which should always be our last message, is returned */
- errcode_index = LIBUSB_ERROR_COUNT - 1;
- }
- return (*usbi_error_strings)[errcode_index];
- }
|