Samba 字符处理系统
1. samba使用多字节字符串——unix字符串(unix strings)
unix字符串没有固定的字节长度,但是遵循以下原则:
a. 除非是在终端,否则不能含有NULL;
b. 兼容7位的C字符串(C strings),对于C中的常量字符和字符串,其每一位都要和unix字符(串)中的位完全等同;
c. 大小写转换是,转换后的字符(串)不能占更多的位;
d. 能够准确接收客户端传入的全部字符。
UTF-8和大多数多字节的亚洲语言都能够很好的兼容unix。UCS2是例外(含NULL)。
在smb.conf中定义unix charset。
在与客户端发送或接收数据的时候,为了兼容客户端的字符编码,需要使用pull_(接收) 和push_(发送)开头的函数在buffer中格式化数据。
lp_开头的函数,返回值全部是unix strings。
2. 相关宏定义(byteorder.h)
CVAL(buf,pos) 将buf中pos处的字节以无符号字符返回 PVAL(buf,pos) 将buf中pos处的字节以无符号整型返回 SCVAL(buf,pos,val) 将buf中pos处的字节设置为val SVAL(buf,pos) 将buf中pos处的字节以无符号小端整型(16bit,ushort)返回 IVAL(buf,pos) 将buf中pos处的字节以无符号小端整型(32bit)返回 SVALS(buf,pos) 将buf中pos处的字节以有符号小端整型(16bit)返回 IVALS(buf,pos) 将buf中pos处的字节以有符号小端整型(32bit)返回 SSVAL(buf,pos,val) 将buf中pos处的无符号小端整型(16bit)值设置为val SIVAL(buf,pos,val) 将buf中pos处的无符号小端整型(32bit)值设置为val SSVALS(buf,pos,val) 将buf中pos处的有符号小端整型(16bit)值设置为val SIVALS(buf,pos,val) 将buf中pos处的有符号小端整型(32bit)值设置为val RSVAL(buf,pos) 将buf中pos处的字节以无符号大端整型(16bit)返回 RIVAL(buf,pos) 将buf中pos处的字节以无符号大端整型(32bit)返回 RSSVAL(buf,pos,val) 将buf中pos处的无符号大端整型(16bit,ushort)值设置为val RSIVAL(buf,pos,val) 将buf中pos处的无符号大端整型(32bit)值设置为val