mirror of
https://github.com/samba-team/samba.git
synced 2025-02-11 17:58:16 +03:00
is now performed in stages: wait for each NetBIOS name to be successfully registered before proceeding to the next stage. tied implicit name registration and release (broadcast method) to the same piece of code as explicit method (via WINS server). created special_browser_name() function that checks __MSBROWSE__ name: this name is ignored by WINS servers apparently. fixed likely incompatibility between refresh_my_names() and add_my_names(). (netbios entries were unlikely to be refreshed). NOTE: none of these changes have been tested. at all. lkcl
-
112 lines
3.3 KiB
C
112 lines
3.3 KiB
C
/*
|
|
Unix SMB/Netbios implementation.
|
|
Version 1.9.
|
|
Character set handling
|
|
Copyright (C) Andrew Tridgell 1992-1995
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#define CHARSET_C
|
|
#include "includes.h"
|
|
|
|
extern int DEBUGLEVEL;
|
|
|
|
char xx_dos_char_map[256];
|
|
char xx_upper_char_map[256];
|
|
char xx_lower_char_map[256];
|
|
|
|
char *dos_char_map = NULL;
|
|
char *upper_char_map = NULL;
|
|
char *lower_char_map = NULL;
|
|
|
|
static void add_dos_char(int lower, int upper)
|
|
{
|
|
DEBUG(6,("Adding chars 0%o 0%o\n",lower,upper));
|
|
if (lower) dos_char_map[(char)lower] = 1;
|
|
if (upper) dos_char_map[(char)upper] = 1;
|
|
if (lower && upper) {
|
|
lower_char_map[(char)upper] = (char)lower;
|
|
upper_char_map[(char)lower] = (char)upper;
|
|
}
|
|
}
|
|
|
|
/****************************************************************************
|
|
initialise the charset arrays
|
|
****************************************************************************/
|
|
void charset_initialise(void)
|
|
{
|
|
int i;
|
|
|
|
dos_char_map = &xx_dos_char_map[128];
|
|
upper_char_map = &xx_upper_char_map[128];
|
|
lower_char_map = &xx_lower_char_map[128];
|
|
|
|
for (i= -128;i<=127;i++) {
|
|
dos_char_map[(char)i] = 0;
|
|
}
|
|
|
|
for (i=0;i<=127;i++) {
|
|
if (isalnum((char)i) || strchr("._^$~!#%&-{}()@'`",(char)i))
|
|
add_dos_char(i,0);
|
|
}
|
|
|
|
for (i= -128;i<=127;i++) {
|
|
char c = (char)i;
|
|
upper_char_map[i] = lower_char_map[i] = c;
|
|
if (isupper(c)) lower_char_map[c] = tolower(c);
|
|
if (islower(c)) upper_char_map[c] = toupper(c);
|
|
}
|
|
|
|
/* valid for all DOS PC */
|
|
add_dos_char(142,0); /* A trema */
|
|
add_dos_char(143,0); /* A o */
|
|
add_dos_char(144,0); /* E ' */
|
|
add_dos_char(146,0); /* AE */
|
|
add_dos_char(153,0); /* O trema */
|
|
add_dos_char(154,0); /* U trema */
|
|
add_dos_char(165,0); /* N tilda */
|
|
add_dos_char(128,0); /* C cedille */
|
|
add_dos_char(156,0); /* Pound */
|
|
add_dos_char(183,0); /* A ` (WIN)*/
|
|
add_dos_char(157,0); /* Phi (WIN)*/
|
|
add_dos_char(212,0); /* E` (WIN)*/
|
|
}
|
|
|
|
|
|
/*******************************************************************
|
|
add characters depending on a string passed by the user
|
|
********************************************************************/
|
|
void add_char_string(char *s)
|
|
{
|
|
char *extra_chars = (char *)strdup(s);
|
|
char *t;
|
|
if (!extra_chars) return;
|
|
|
|
for (t=strtok(extra_chars," \t\r\n"); t; t=strtok(NULL," \t\r\n")) {
|
|
char c1=0,c2=0;
|
|
int i1=0,i2=0;
|
|
if (isdigit(*t) || (*t)=='-') {
|
|
sscanf(t,"%i:%i",&i1,&i2);
|
|
add_dos_char(i1,i2);
|
|
} else {
|
|
sscanf(t,"%c:%c",&c1,&c2);
|
|
add_dos_char(c1,c2);
|
|
}
|
|
}
|
|
|
|
free(extra_chars);
|
|
}
|