OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [fs/] [jfs/] [jfs_unicode.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 *   Copyright (c) International Business Machines Corp., 2000-2002
3
 *   Portions Copyright (c) Christoph Hellwig, 2001-2002
4
 *
5
 *   This program is free software;  you can redistribute it and/or modify
6
 *   it under the terms of the GNU General Public License as published by
7
 *   the Free Software Foundation; either version 2 of the License, or
8
 *   (at your option) 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
13
 *   the GNU General Public License for more details.
14
 *
15
 *   You should have received a copy of the GNU General Public License
16
 *   along with this program;  if not, write to the Free Software
17
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
 */
19
#ifndef _H_JFS_UNICODE
20
#define _H_JFS_UNICODE
21
 
22
#include <asm/byteorder.h>
23
#include "jfs_types.h"
24
 
25
typedef struct {
26
        wchar_t start;
27
        wchar_t end;
28
        signed char *table;
29
} UNICASERANGE;
30
 
31
extern signed char UniUpperTable[512];
32
extern UNICASERANGE UniUpperRange[];
33
extern int get_UCSname(struct component_name *, struct dentry *,
34
                       struct nls_table *);
35
extern int jfs_strfromUCS_le(char *, const wchar_t *, int, struct nls_table *);
36
 
37
#define free_UCSname(COMP) kfree((COMP)->name)
38
 
39
/*
40
 * UniStrcpy:  Copy a string
41
 */
42
static inline wchar_t *UniStrcpy(wchar_t * ucs1, const wchar_t * ucs2)
43
{
44
        wchar_t *anchor = ucs1; /* save the start of result string */
45
 
46
        while ((*ucs1++ = *ucs2++));
47
        return anchor;
48
}
49
 
50
 
51
 
52
/*
53
 * UniStrncpy:  Copy length limited string with pad
54
 */
55
static inline wchar_t *UniStrncpy(wchar_t * ucs1, const wchar_t * ucs2,
56
                                  size_t n)
57
{
58
        wchar_t *anchor = ucs1;
59
 
60
        while (n-- && *ucs2)    /* Copy the strings */
61
                *ucs1++ = *ucs2++;
62
 
63
        n++;
64
        while (n--)             /* Pad with nulls */
65
                *ucs1++ = 0;
66
        return anchor;
67
}
68
 
69
/*
70
 * UniStrncmp_le:  Compare length limited string - native to little-endian
71
 */
72
static inline int UniStrncmp_le(const wchar_t * ucs1, const wchar_t * ucs2,
73
                                size_t n)
74
{
75
        if (!n)
76
                return 0;        /* Null strings are equal */
77
        while ((*ucs1 == __le16_to_cpu(*ucs2)) && *ucs1 && --n) {
78
                ucs1++;
79
                ucs2++;
80
        }
81
        return (int) *ucs1 - (int) __le16_to_cpu(*ucs2);
82
}
83
 
84
/*
85
 * UniStrncpy_le:  Copy length limited string with pad to little-endian
86
 */
87
static inline wchar_t *UniStrncpy_le(wchar_t * ucs1, const wchar_t * ucs2,
88
                                     size_t n)
89
{
90
        wchar_t *anchor = ucs1;
91
 
92
        while (n-- && *ucs2)    /* Copy the strings */
93
                *ucs1++ = __le16_to_cpu(*ucs2++);
94
 
95
        n++;
96
        while (n--)             /* Pad with nulls */
97
                *ucs1++ = 0;
98
        return anchor;
99
}
100
 
101
 
102
/*
103
 * UniToupper:  Convert a unicode character to upper case
104
 */
105
static inline wchar_t UniToupper(wchar_t uc)
106
{
107
        UNICASERANGE *rp;
108
 
109
        if (uc < sizeof(UniUpperTable)) {       /* Latin characters */
110
                return uc + UniUpperTable[uc];  /* Use base tables */
111
        } else {
112
                rp = UniUpperRange;     /* Use range tables */
113
                while (rp->start) {
114
                        if (uc < rp->start)     /* Before start of range */
115
                                return uc;      /* Uppercase = input */
116
                        if (uc <= rp->end)      /* In range */
117
                                return uc + rp->table[uc - rp->start];
118
                        rp++;   /* Try next range */
119
                }
120
        }
121
        return uc;              /* Past last range */
122
}
123
 
124
 
125
/*
126
 * UniStrupr:  Upper case a unicode string
127
 */
128
static inline wchar_t *UniStrupr(wchar_t * upin)
129
{
130
        wchar_t *up;
131
 
132
        up = upin;
133
        while (*up) {           /* For all characters */
134
                *up = UniToupper(*up);
135
                up++;
136
        }
137
        return upin;            /* Return input pointer */
138
}
139
 
140
#endif                          /* !_H_JFS_UNICODE */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.