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 3 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, see <http://www.gnu.org/licenses/>.
33
static size_t weird_pull(void *cd, char **inbuf, size_t *inbytesleft,
34
char **outbuf, size_t *outbytesleft)
36
while (*inbytesleft >= 1 && *outbytesleft >= 2) {
39
for (i=0;weird_table[i].from;i++) {
42
weird_table[i].len) == 0) {
43
if (*inbytesleft < weird_table[i].len) {
44
DEBUG(0,("ERROR: truncated weird string\n"));
45
/* smb_panic("weird_pull"); */
48
(*outbuf)[0] = weird_table[i].from;
50
(*inbytesleft) -= weird_table[i].len;
52
(*inbuf) += weird_table[i].len;
60
(*outbuf)[0] = (*inbuf)[0];
68
if (*inbytesleft > 0) {
76
static size_t weird_push(void *cd, char **inbuf, size_t *inbytesleft,
77
char **outbuf, size_t *outbytesleft)
81
while (*inbytesleft >= 2 && *outbytesleft >= 1) {
84
for (i=0;weird_table[i].from;i++) {
85
if ((*inbuf)[0] == weird_table[i].from &&
87
if (*outbytesleft < weird_table[i].len) {
88
DEBUG(0,("No room for weird character\n"));
89
/* smb_panic("weird_push"); */
91
memcpy(*outbuf, weird_table[i].to,
94
(*outbytesleft) -= weird_table[i].len;
96
(*outbuf) += weird_table[i].len;
104
(*outbuf)[0] = (*inbuf)[0];
105
if ((*inbuf)[1]) ir_count++;
107
(*outbytesleft) -= 1;
112
if (*inbytesleft == 1) {
117
if (*inbytesleft > 1) {
125
struct charset_functions weird_functions = {"WEIRD", weird_pull, weird_push};
127
int charset_weird_init(void)
129
smb_register_charset(&weird_functions);