~ubuntu-branches/ubuntu/intrepid/parted/intrepid

« back to all changes in this revision

Viewing changes to gnulib/lib/unistr/u8-strchr.c

  • Committer: Bazaar Package Importer
  • Author(s): Colin Watson
  • Date: 2008-06-24 14:31:05 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20080624143105-rd7yw67a9qnvh51i
Tags: 1.8.8.git.2008.03.24-7ubuntu1
* Resynchronise with Debian (LP: #237568). Remaining changes:
  - swap-uuid.dpatch: Create UUIDs on new swap partitions.
  - gptsync.dpatch: On Intel Mac systems, write a synced MBR rather than a
    protective MBR.
  - Add -fno-stack-protector on sparc.
  - sparc-new-label.dpatch: Fix sparc disk label generation. This is
    required for LDOM and parallel installations with Solaris 10.
  - loop-partitions.dpatch: Loop devices can only have one partition, so
    don't generate device names such as "/dev/loop0p1".
  - unpartitioned-disks.dpatch: Don't try to call BLKPG ioctls on
    unpartitionable disks (only implemented for loop devices at the
    moment), as they will always fail.
  - When building with gcc-4.3, add -Wno-array-bounds to CFLAGS.
  - Cell partition tables are misdetected as pc98, so disable pc98 support
    on powerpc.
  - array-bounds.dpatch: Backport patch from git to allow building with
    gcc-4.3.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* Search character in UTF-8 string.
 
2
   Copyright (C) 1999, 2002, 2006-2007 Free Software Foundation, Inc.
 
3
   Written by Bruno Haible <bruno@clisp.org>, 2002.
 
4
 
 
5
   This program is free software; you can redistribute it and/or modify it
 
6
   under the terms of the GNU Library General Public License as published
 
7
   by the Free Software Foundation; either version 2, or (at your option)
 
8
   any later version.
 
9
 
 
10
   This program is distributed in the hope that it will be useful,
 
11
   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
13
   Library General Public License for more details.
 
14
 
 
15
   You should have received a copy of the GNU Library General Public
 
16
   License along with this program; if not, write to the Free Software
 
17
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
 
18
   USA.  */
 
19
 
 
20
#include <config.h>
 
21
 
 
22
/* Specification.  */
 
23
#include "unistr.h"
 
24
 
 
25
uint8_t *
 
26
u8_strchr (const uint8_t *s, ucs4_t uc)
 
27
{
 
28
  uint8_t c[6];
 
29
 
 
30
  if (uc < 0x80)
 
31
    {
 
32
      uint8_t c0 = uc;
 
33
 
 
34
      for (;; s++)
 
35
        {
 
36
          if (*s == c0)
 
37
            break;
 
38
          if (*s == 0)
 
39
            goto notfound;
 
40
        }
 
41
      return (uint8_t *) s;
 
42
    }
 
43
  else
 
44
    switch (u8_uctomb_aux (c, uc, 6))
 
45
      {
 
46
      case 2:
 
47
        if (*s == 0)
 
48
          goto notfound;
 
49
        {
 
50
          uint8_t c0 = c[0];
 
51
          uint8_t c1 = c[1];
 
52
 
 
53
          for (;; s++)
 
54
            {
 
55
              if (s[1] == 0)
 
56
                goto notfound;
 
57
              if (*s == c0 && s[1] == c1)
 
58
                break;
 
59
            }
 
60
          return (uint8_t *) s;
 
61
        }
 
62
 
 
63
      case 3:
 
64
        if (*s == 0 || s[1] == 0)
 
65
          goto notfound;
 
66
        {
 
67
          uint8_t c0 = c[0];
 
68
          uint8_t c1 = c[1];
 
69
          uint8_t c2 = c[2];
 
70
 
 
71
          for (;; s++)
 
72
            {
 
73
              if (s[2] == 0)
 
74
                goto notfound;
 
75
              if (*s == c0 && s[1] == c1 && s[2] == c2)
 
76
                break;
 
77
            }
 
78
          return (uint8_t *) s;
 
79
        }
 
80
 
 
81
      case 4:
 
82
        if (*s == 0 || s[1] == 0 || s[2] == 0)
 
83
          goto notfound;
 
84
        {
 
85
          uint8_t c0 = c[0];
 
86
          uint8_t c1 = c[1];
 
87
          uint8_t c2 = c[2];
 
88
          uint8_t c3 = c[3];
 
89
 
 
90
          for (;; s++)
 
91
            {
 
92
              if (s[3] == 0)
 
93
                goto notfound;
 
94
              if (*s == c0 && s[1] == c1 && s[2] == c2 && s[3] == c3)
 
95
                break;
 
96
            }
 
97
          return (uint8_t *) s;
 
98
        }
 
99
      }
 
100
notfound:
 
101
  return NULL;
 
102
}