Skip to content
Snippets Groups Projects
Select Git revision
  • a5f8a8c1c7855ae35205c56e76ba8b605d74db65
  • master default protected
  • release/202005
  • release/202001
  • release/201912
  • release/201911
  • release/201910
  • release/201908
  • release/201906
  • release/201905
  • release/201904
  • release/201903
  • release/201902
  • release/201901
  • release/201812
  • release/201811
  • release/201808
  • releases/beta1
  • packaging
  • native
  • release-0.2.x
  • 1.0.0
  • 0.2.0
  • 0.1.1
  • 0.1.0
25 results

wizardwidget.cpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    utf8_utils.cpp 8.10 KiB
    /*
     *  Copyright (C) 1999 Tom Tromey
     *  Copyright (C) 2000 Red Hat, Inc.
     *  Copyright (C) 2014-2017 Savoir-faire Linux Inc.
     *
     *  Author: Pascal Potvin <pascal.potvin@extenway.com>
     *
     *  This program is free software; you can redistribute it and/or modify
     *  it under the terms of the GNU General Public License as published by
     *  the Free Software Foundation; either version 3 of the License, or
     *  (at your option) any later version.
     *
     *  This program is distributed in the hope that it will be useful,
     *  but WITHOUT ANY WARRANTY; without even the implied warranty of
     *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     *  GNU General Public License for more details.
     *
     *  You should have received a copy of the GNU General Public License
     *  along with this program; if not, write to the Free Software
     *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
     */
    
    
    #include <cstring>
    #include <cassert>
    #include "utf8_utils.h"
    
    #if defined(_MSC_VER)
    #include <BaseTsd.h>
    using ssize_t = SSIZE_T;
    #endif
    
    /*
     * The LIKELY and UNLIKELY macros let the programmer give hints to
     * the compiler about the expected result of an expression. Some compilers
     * can use this information for optimizations.
     */
    #if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__)
    #define LIKELY(expr) (__builtin_expect (expr, 1))
    #define UNLIKELY(expr) (__builtin_expect (expr, 0))
    #else
    #define LIKELY(expr) (expr)
    #define UNLIKELY(expr) (expr)
    #endif
    
    
    /*
     * Check whether a Unicode (5.2) char is in a valid range.
     *
     * The first check comes from the Unicode guarantee to never encode
     * a point above 0x0010ffff, since UTF-16 couldn't represent it.
     *
     * The second check covers surrogate pairs (category Cs).
     *
     * @param Char the character
     */
    #define UNICODE_VALID(Char)                   \
        ((Char) < 0x110000 &&                     \
         (((Char) & 0xFFFFF800) != 0xD800))
    
    #define CONTINUATION_CHAR                           \
      if ((*(unsigned char *)p & 0xc0) != 0x80) /* 10xxxxxx */ \
        goto error;                                     \
      val <<= 6;                                        \
      val |= (*(unsigned char *)p) & 0x3f;
    
    namespace ring {
    
    bool
    utf8_validate_c_str(const char *str, ssize_t max_len, const char **end);