source: rtems-libbsd/freebsd/contrib/expat/lib/xmltok_ns.c @ 2389539

55-freebsd-126-freebsd-12
Last change on this file since 2389539 was 2389539, checked in by Christian Mauderer <Christian.Mauderer@…>, on 11/16/16 at 14:02:20

ifconfig/wlan, expat, lib80211: Import from FreeBSD.

  • Property mode set to 100644
File size: 3.1 KB
Line 
1#include <machine/rtems-bsd-user-space.h>
2
3/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
4   See the file COPYING for copying permission.
5*/
6
7/* This file is included! */
8#ifdef XML_TOK_NS_C
9
10const ENCODING *
11NS(XmlGetUtf8InternalEncoding)(void)
12{
13  return &ns(internal_utf8_encoding).enc;
14}
15
16const ENCODING *
17NS(XmlGetUtf16InternalEncoding)(void)
18{
19#if BYTEORDER == 1234
20  return &ns(internal_little2_encoding).enc;
21#elif BYTEORDER == 4321
22  return &ns(internal_big2_encoding).enc;
23#else
24  const short n = 1;
25  return (*(const char *)&n
26          ? &ns(internal_little2_encoding).enc
27          : &ns(internal_big2_encoding).enc);
28#endif
29}
30
31static const ENCODING * const NS(encodings)[] = {
32  &ns(latin1_encoding).enc,
33  &ns(ascii_encoding).enc,
34  &ns(utf8_encoding).enc,
35  &ns(big2_encoding).enc,
36  &ns(big2_encoding).enc,
37  &ns(little2_encoding).enc,
38  &ns(utf8_encoding).enc /* NO_ENC */
39};
40
41static int PTRCALL
42NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
43                   const char **nextTokPtr)
44{
45  return initScan(NS(encodings), (const INIT_ENCODING *)enc,
46                  XML_PROLOG_STATE, ptr, end, nextTokPtr);
47}
48
49static int PTRCALL
50NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
51                    const char **nextTokPtr)
52{
53  return initScan(NS(encodings), (const INIT_ENCODING *)enc,
54                  XML_CONTENT_STATE, ptr, end, nextTokPtr);
55}
56
57int
58NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
59                    const char *name)
60{
61  int i = getEncodingIndex(name);
62  if (i == UNKNOWN_ENC)
63    return 0;
64  SET_INIT_ENC_INDEX(p, i);
65  p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
66  p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
67  p->initEnc.updatePosition = initUpdatePosition;
68  p->encPtr = encPtr;
69  *encPtr = &(p->initEnc);
70  return 1;
71}
72
73static const ENCODING *
74NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
75{
76#define ENCODING_MAX 128
77  char buf[ENCODING_MAX];
78  char *p = buf;
79  int i;
80  XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
81  if (ptr != end)
82    return 0;
83  *p = 0;
84  if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
85    return enc;
86  i = getEncodingIndex(buf);
87  if (i == UNKNOWN_ENC)
88    return 0;
89  return NS(encodings)[i];
90}
91
92int
93NS(XmlParseXmlDecl)(int isGeneralTextEntity,
94                    const ENCODING *enc,
95                    const char *ptr,
96                    const char *end,
97                    const char **badPtr,
98                    const char **versionPtr,
99                    const char **versionEndPtr,
100                    const char **encodingName,
101                    const ENCODING **encoding,
102                    int *standalone)
103{
104  return doParseXmlDecl(NS(findEncoding),
105                        isGeneralTextEntity,
106                        enc,
107                        ptr,
108                        end,
109                        badPtr,
110                        versionPtr,
111                        versionEndPtr,
112                        encodingName,
113                        encoding,
114                        standalone);
115}
116
117#endif /* XML_TOK_NS_C */
Note: See TracBrowser for help on using the repository browser.