0001-01-01 02:30:17 +02:30
/*
Unix SMB / Netbios implementation .
Version 1.9 .
Samba utility functions
Copyright ( C ) Andrew Tridgell 1992 - 1998
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 0213 9 , USA .
*/
# include "includes.h"
/*******************************************************************
write a string in unicoode format
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int PutUniCode ( char * dst , char * src )
{
int ret = 0 ;
while ( * src ) {
dst [ ret + + ] = src [ 0 ] ;
dst [ ret + + ] = 0 ;
src + + ;
}
dst [ ret + + ] = 0 ;
dst [ ret + + ] = 0 ;
return ( ret ) ;
}
/*******************************************************************
skip past some unicode strings in a buffer
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * skip_unicode_string ( char * buf , int n )
{
while ( n - - )
{
while ( * buf )
buf + = 2 ;
buf + = 2 ;
}
return ( buf ) ;
}
/*******************************************************************
Return a ascii version of a unicode string
Hack alert : uses fixed buffer ( s ) and only handles ascii strings
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define MAXUNI 1024
0001-01-01 02:30:17 +02:30
char * unistrn2 ( char * buf , int len )
0001-01-01 02:30:17 +02:30
{
static char lbufs [ 8 ] [ MAXUNI ] ;
static int nexti ;
char * lbuf = lbufs [ nexti ] ;
char * p ;
nexti = ( nexti + 1 ) % 8 ;
0001-01-01 02:30:17 +02:30
for ( p = lbuf ; * buf & & p - lbuf < MAXUNI - 2 & & len > 0 ; len - - , p + + , buf + = 2 )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
SSVAL ( p , 0 , * buf ) ;
0001-01-01 02:30:17 +02:30
}
* p = 0 ;
return lbuf ;
}
static char lbufs [ 8 ] [ MAXUNI ] ;
static int nexti ;
/*******************************************************************
Return a ascii version of a unicode string
Hack alert : uses fixed buffer ( s ) and only handles ascii strings
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define MAXUNI 1024
char * unistr2 ( uint16 * buf )
{
char * lbuf = lbufs [ nexti ] ;
char * p ;
nexti = ( nexti + 1 ) % 8 ;
for ( p = lbuf ; * buf & & p - lbuf < MAXUNI - 2 ; p + + , buf + + )
{
* p = * buf ;
}
* p = 0 ;
return lbuf ;
}
/*******************************************************************
Return a ascii version of a unicode string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * unistr2_to_str ( UNISTR2 * str )
{
char * lbuf = lbufs [ nexti ] ;
char * p ;
uint16 * buf = str - > buffer ;
int max_size = MIN ( sizeof ( str - > buffer ) - 2 , str - > uni_str_len ) ;
nexti = ( nexti + 1 ) % 8 ;
for ( p = lbuf ; * buf & & p - lbuf < max_size ; p + + , buf + + )
{
* p = * buf ;
}
* p = 0 ;
return lbuf ;
}
0001-01-01 02:30:17 +02:30
/*******************************************************************
Return a number stored in a buffer
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
uint32 buffer2_to_uint32 ( BUFFER2 * str )
{
if ( str - > buf_len = = 4 )
{
return IVAL ( str - > buffer , 0 ) ;
}
else
{
return 0 ;
}
}
/*******************************************************************
Return a ascii version of a NOTunicode string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * buffer2_to_str ( BUFFER2 * str )
{
char * lbuf = lbufs [ nexti ] ;
char * p ;
uint16 * buf = str - > buffer ;
int max_size = MIN ( sizeof ( str - > buffer ) - 2 , str - > buf_len / 2 ) ;
nexti = ( nexti + 1 ) % 8 ;
for ( p = lbuf ; * buf & & p - lbuf < max_size ; p + + , buf + + )
{
* p = * buf ;
}
* p = 0 ;
return lbuf ;
}
/*******************************************************************
Return a ascii version of a NOTunicode string
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
char * buffer2_to_multistr ( BUFFER2 * str )
{
char * lbuf = lbufs [ nexti ] ;
char * p ;
uint16 * buf = str - > buffer ;
int max_size = MIN ( sizeof ( str - > buffer ) - 2 , str - > buf_len / 2 ) ;
nexti = ( nexti + 1 ) % 8 ;
for ( p = lbuf ; p - lbuf < max_size ; p + + , buf + + )
{
if ( * buf = = 0 )
{
* p = ' ' ;
}
else
{
* p = * buf ;
}
}
* p = 0 ;
return lbuf ;
}
0001-01-01 02:30:17 +02:30
/*******************************************************************
create a null - terminated unicode string from a null - terminated ascii string .
return number of unicode chars copied , excluding the null character .
only handles ascii strings
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define MAXUNI 1024
0001-01-01 02:30:17 +02:30
int struni2 ( char * p , const char * buf )
0001-01-01 02:30:17 +02:30
{
int len = 0 ;
if ( p = = NULL ) return 0 ;
if ( buf ! = NULL )
{
0001-01-01 02:30:17 +02:30
for ( ; * buf & & len < MAXUNI - 2 ; len + + , p + = 2 , buf + + )
0001-01-01 02:30:17 +02:30
{
0001-01-01 02:30:17 +02:30
SSVAL ( p , 0 , * buf ) ;
0001-01-01 02:30:17 +02:30
}
}
* p = 0 ;
return len ;
}
/*******************************************************************
Return a ascii version of a unicode string
Hack alert : uses fixed buffer ( s ) and only handles ascii strings
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# define MAXUNI 1024
char * unistr ( char * buf )
{
char * lbuf = lbufs [ nexti ] ;
char * p ;
nexti = ( nexti + 1 ) % 8 ;
for ( p = lbuf ; * buf & & p - lbuf < MAXUNI - 2 ; p + + , buf + = 2 )
{
* p = * buf ;
}
* p = 0 ;
return lbuf ;
}
/*******************************************************************
strcpy for unicode strings . returns length ( in num of wide chars )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int unistrcpy ( char * dst , char * src )
{
int num_wchars = 0 ;
while ( * src )
{
* dst + + = * src + + ;
* dst + + = * src + + ;
num_wchars + + ;
}
* dst + + = 0 ;
* dst + + = 0 ;
return num_wchars ;
}