third_party_musl:基于OpenHarmony生态的标准C库实现项目

暂无描述

分支329Tags64
文件最后提交记录最后更新时间
1 年前
5 个月前
6 个月前
1 个月前
5 年前
1 个月前
1 个月前
5 年前
6 天前
3 个月前
2 个月前
2 年前
1 个月前
20 天前
11 天前
6 个月前
3 个月前
1 个月前
18 天前
9 个月前
2 年前
5 年前
5 年前
1 个月前
1 个月前
4 个月前
1 年前
2 个月前
2 年前
2 个月前
1 年前
2 个月前
3 年前
1 年前
2 个月前
2 年前
4 个月前
2 年前
5 个月前
1 个月前
1 个月前
1 个月前
1 个月前

Musl libc

musl,是MIT授权的针对Linux系统调用的API的标准C库实现,适用于广泛的部署环境。musl提供了高效的静态和动态链接支持, 为轻量级代码并且运行时开销低,在正确使用时具有强大的故障安全保证,以及标准一致性意义上的正确性和安全性。musl建立的原则是使用便于理解和维护的简单代码来实现目标。

musl的1.1版本系列涵盖了所有在ISO C99和POSIX 2008基础中定义的接口,以及一些非标准的为了与Linux、BSD和glibc功能兼容的接口。

目录结构

README_zh.md            #中文说明
include					#musl头文件
ldso					#动态链接器
libc-test				#关于musl的测试用例
ndk_musl_include		#生成ndk版本的头文件
ndk_script				#生成ndk版本的脚本
porting                 #linux liteos平台对musl适配文件
src						#musl文件源
scripts					#测试用脚本

Openharmony对于musl的适配

musl编译框架时编译,使用BUILD.gn进行配置编译。

基于openharmony的需求,为musl新增的特性:

  • 加载器地址随机化,RELRO共享机制
  • 提供加载器namespace机制
  • OHOS容器中能够运行依赖bionic的库
  • musl全球化接口适配locale数据能力
  • mallocng堆内存分配器安全增强,默认开启meta指针混淆。地址随机化通过MALLOC_SECURE_ALL宏开关。可在编译命令中增加--gn-args="musl_secure_level=3"开启

等。在新增特性基础上,也进行了对于musl接口功能的完善与错误的修复。

ICONV支持的字符集编码格式

musl支持的字符集编码格式,以及受支持的别名。

注意

在进行字符集编码格式转换时,请使用正确的源字符集编码格式,且目标字符集编码格式必须支持这些受转换的字符,否则转换失败。 在musl里不支持将源字符集编码格式转换成这五种目标字符集编码格式:gb18030,gbk,gb2312,big5和euckr。

编码格式 别名 musl支持情况
utf8 支持
wchart 支持
ucs2be 支持
ucs2le 支持
utf16be 支持
utf16le 支持
ucs4be utf32be 支持
ucs4le utf32le 支持
ascii usascii, iso646, iso646us 支持
utf16 支持
ucs4 utf32 支持
ucs2 支持
eucjp 支持
shiftjis sjis, cp932 支持
iso2022jp 支持
gb18030 支持
gbk 支持
gb2312 支持
big5 bigfive, cp950, big5hkscs 支持
euckr ksc5601, ksx1001, cp949 支持
iso88591 latin1 支持
iso88592 支持
iso88593 支持
iso88594 支持
iso88595 支持
iso88596 支持
iso88597 支持
iso88598 支持
iso88599 支持
iso885910 支持
iso885911 tis620 支持
iso885913 支持
iso885914 支持
iso885915 latin9 支持
iso885916 支持
cp1250 windows1250 支持
cp1251 windows1251 支持
cp1252 windows1252 支持
cp1253 windows1253 支持
cp1254 windows1254 支持
cp1255 windows1255 支持
cp1256 windows1256 支持
cp1257 windows1257 支持
cp1258 windows1258 支持
koi8r 支持
koi8u 支持
cp437 支持
cp850 支持
cp866 支持
cp1047 ibm1047 支持

locale数据能力支持的接口

locale是通过third_party/icu的接口来实现,接口的规格取决于ICU。经过对比测试,ICU的范围能够完全覆盖且远大于mac os,但会小于linux的OS版本(如ubuntu、fedora)。

函数 用途 返回值 支持的字符集
int isalnum_l(int c, locale_t l) 根据locale设置判断字符是否是数字或字母(包括大小写) 参数c是数字或字母返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isalpha_l(int c, locale_t l) 根据locale设置判断字符是否是字母(包括大小写) 参数c是字母返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isblank_l(int c, locale_t l) 根据locale设置判断字符是否是空白字符 参数c是空白字符返回1,否则返回0 zh_CN、zh_CN.UTF-8
int iscntrl_l(int c, locale_t l) 根据locale设置判断字符是否是控制字符 参数c是控制字符返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isdigit_l(int c, locale_t l) 根据locale设置判断字符是否是数字 参数c是数字返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isgraph_l(int c, locale_t l) 根据locale设置判断字符是否是图形字符 参数c是图形字符返回1,否则返回0 zh_CN、zh_CN.UTF-8
int islower_l(int c, locale_t l) 根据locale设置判断字符是否是小写字母 参数c是小写字母返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isprint_l(int c, locale_t l) 根据locale设置判断字符是否是可打印字符 参数c是可打印字符返回1,否则返回0 zh_CN、zh_CN.UTF-8
int ispunct_l(int c, locale_t l) 根据locale设置判断字符是否是标点符号 参数c是标点符号返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isspace_l(int c, locale_t l) 根据locale设置判断字符是否是空白字符,范围比iswblank_l小 参数c是空白字符返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isupper_l(int c, locale_t l) 根据locale设置判断字符是否是大写字母 参数c是大写字母返回1,否则返回0 zh_CN、zh_CN.UTF-8
int isxdigit_l(int c, locale_t l) 根据locale设置判断字符是否是十六进制数字字符 参数c是十六进制数字字符返回1,否则返回0 zh_CN、zh_CN.UTF-8
int tolower_l(int c, locale_t l) 根据locale设置将给定的字符转换成小写形式 参数c是大写字母返回对应的小写字母,否则返回c zh_CN、zh_CN.UTF-8
int toupper_l(int c, locale_t l) 根据locale设置将给定的字符转换成大写形式 参数c是小写字母返回对应的大写字母,否则返回c zh_CN、zh_CN.UTF-8

Musl使用文档

有关完整musl目标编译器工具链、系统的信息bootstrapping和基于musl构建的Linux发行版可以在官方网站上找到:http://www.musl-libc.org/

有关基本安装说明,请参阅附带的INSTALL文件。

musl参考手册:https://musl.libc.org/doc/1.1.24/manual.html