2
Unix SMB/CIFS implementation.
3
Samba module with developer tools
4
Copyright (C) Andrew Tridgell 2001
5
Copyright (C) Jelmer Vernooij 2002
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 2 of the License, or
10
(at your option) any later version.
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software
19
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
34
static size_t weird_pull(void *cd, char **inbuf, size_t *inbytesleft,
35
char **outbuf, size_t *outbytesleft)
37
while (*inbytesleft >= 1 && *outbytesleft >= 2) {
40
for (i=0;weird_table[i].from;i++) {
43
weird_table[i].len) == 0) {
44
if (*inbytesleft < weird_table[i].len) {
45
DEBUG(0,("ERROR: truncated weird string\n"));
46
/* smb_panic("weird_pull"); */
49
(*outbuf)[0] = weird_table[i].from;
51
(*inbytesleft) -= weird_table[i].len;
53
(*inbuf) += weird_table[i].len;
61
(*outbuf)[0] = (*inbuf)[0];
69
if (*inbytesleft > 0) {
77
static size_t weird_push(void *cd, char **inbuf, size_t *inbytesleft,
78
char **outbuf, size_t *outbytesleft)
82
while (*inbytesleft >= 2 && *outbytesleft >= 1) {
85
for (i=0;weird_table[i].from;i++) {
86
if ((*inbuf)[0] == weird_table[i].from &&
88
if (*outbytesleft < weird_table[i].len) {
89
DEBUG(0,("No room for weird character\n"));
90
/* smb_panic("weird_push"); */
92
memcpy(*outbuf, weird_table[i].to,
95
(*outbytesleft) -= weird_table[i].len;
97
(*outbuf) += weird_table[i].len;
105
(*outbuf)[0] = (*inbuf)[0];
106
if ((*inbuf)[1]) ir_count++;
108
(*outbytesleft) -= 1;
113
if (*inbytesleft == 1) {
118
if (*inbytesleft > 1) {
126
struct charset_functions weird_functions = {"WEIRD", weird_pull, weird_push};
128
int charset_weird_init(void)
130
smb_register_charset(&weird_functions);