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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [fs/] [jfs/] [jfs_unicode.c] - 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
 *
4
 *   This program is free software;  you can redistribute it and/or modify
5
 *   it under the terms of the GNU General Public License as published by
6
 *   the Free Software Foundation; either version 2 of the License, or
7
 *   (at your option) any later version.
8
 *
9
 *   This program is distributed in the hope that it will be useful,
10
 *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
11
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
12
 *   the GNU General Public License for more details.
13
 *
14
 *   You should have received a copy of the GNU General Public License
15
 *   along with this program;  if not, write to the Free Software
16
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
 */
18
 
19
#include <linux/fs.h>
20
#include <linux/slab.h>
21
#include "jfs_types.h"
22
#include "jfs_filsys.h"
23
#include "jfs_unicode.h"
24
#include "jfs_debug.h"
25
 
26
/*
27
 * NAME:        jfs_strfromUCS()
28
 *
29
 * FUNCTION:    Convert little-endian unicode string to character string
30
 *
31
 */
32
int jfs_strfromUCS_le(char *to, const wchar_t * from,   /* LITTLE ENDIAN */
33
                      int len, struct nls_table *codepage)
34
{
35
        int i;
36
        int outlen = 0;
37
 
38
        for (i = 0; (i < len) && from[i]; i++) {
39
                int charlen;
40
                charlen =
41
                    codepage->uni2char(le16_to_cpu(from[i]), &to[outlen],
42
                                       NLS_MAX_CHARSET_SIZE);
43
                if (charlen > 0) {
44
                        outlen += charlen;
45
                } else {
46
                        to[outlen++] = '?';
47
                }
48
        }
49
        to[outlen] = 0;
50
        return outlen;
51
}
52
 
53
/*
54
 * NAME:        jfs_strtoUCS()
55
 *
56
 * FUNCTION:    Convert character string to unicode string
57
 *
58
 */
59
static int jfs_strtoUCS(wchar_t * to, const char *from, int len,
60
                struct nls_table *codepage)
61
{
62
        int charlen;
63
        int i;
64
 
65
        for (i = 0; len && *from; i++, from += charlen, len -= charlen) {
66
                charlen = codepage->char2uni(from, len, &to[i]);
67
                if (charlen < 1) {
68
                        jfs_err("jfs_strtoUCS: char2uni returned %d.", charlen);
69
                        jfs_err("charset = %s, char = 0x%x",
70
                                codepage->charset, (unsigned char) *from);
71
                        return charlen;
72
                }
73
        }
74
 
75
        to[i] = 0;
76
        return i;
77
}
78
 
79
/*
80
 * NAME:        get_UCSname()
81
 *
82
 * FUNCTION:    Allocate and translate to unicode string
83
 *
84
 */
85
int get_UCSname(struct component_name * uniName, struct dentry *dentry,
86
                struct nls_table *nls_tab)
87
{
88
        int length = dentry->d_name.len;
89
 
90
        if (length > JFS_NAME_MAX)
91
                return -ENAMETOOLONG;
92
 
93
        uniName->name =
94
            kmalloc((length + 1) * sizeof(wchar_t), GFP_NOFS);
95
 
96
        if (uniName->name == NULL)
97
                return -ENOSPC;
98
 
99
        uniName->namlen = jfs_strtoUCS(uniName->name, dentry->d_name.name,
100
                                       length, nls_tab);
101
 
102
        if (uniName->namlen < 0) {
103
                kfree(uniName->name);
104
                return uniName->namlen;
105
        }
106
 
107
        return 0;
108
}

powered by: WebSVN 2.1.0

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