Git 源码禁止使用 C 标准库中容易被错用的函数
Git 项目的源码禁止开发者使用 C 标准库中的某些函数,原因是这些函数太容易被误用,就算使用得当也很容易出问题。因此 Git 的源码增加了一个 banned.h 的头函数,一旦你使用了这些被禁用的函数,将在编译时报错。
这些函数包括:
#ifndef BANNED_H
#define BANNED_H
/*
* This header lists functions that have been banned from our code base,
* because they're too easy to misuse (and even if used correctly,
* complicate audits). Including this header turns them into compile-time
* errors.
*/
#define BANNED(func) sorry_##func##_is_a_banned_function
#undef strcpy
#define strcpy(x,y) BANNED(strcpy)
#undef strcat
#define strcat(x,y) BANNED(strcat)
#undef strncpy
#define strncpy(x,y,n) BANNED(strncpy)
#undef strncat
#define strncat(x,y,n) BANNED(strncat)
#undef sprintf
#undef vsprintf
#ifdef HAVE_VARIADIC_MACROS
#define sprintf(...) BANNED(sprintf)
#define vsprintf(...) BANNED(vsprintf)
#else
#define sprintf(buf,fmt,arg) BANNED(sprintf)
#define vsprintf(buf,fmt,arg) BANNED(sprintf)
#endif
#endif /* BANNED_H */
banned.h 源码 https://gitee.com/mirrors/git/blob/master/banned.h

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
开发者也需要了解的知识产权、知识共享与文章翻译
一、缘起 前不久,我在翻译 Guido van Rossum(Python之父)的文章时,给他留言,申请非商业用途的翻译授权。 过程中起了点小误会,略去不表,最终的结果是:他的文章以CC BY-NC-SA 4.0 许可协议进行授权。部分对话如下: CC 协议是一种授权许可协议,我曾看到过几次,但了解不多,所以便查阅了相关的内容。 本文主要是作个记录,既是加深自己的理解,也给有需要的同学一个参考。 二、著作权、著佐权与自由版权 对于知识产权,通常有如下几种说法: All Rights Reserved(保留所有权利) Some Rights Reserved(保留部分权利) All Rights Reversed(撤销所有权利) 注意最后一条的“Reversed”,它长得很像“Reserved”,但意思截然相反。 它们对权利的诉求由强转弱,从一个极端走向另一个极端。 有几个与此相关的概念: copyright,即版权、著作权 copyleft,即著作传、著佐权 copywrong,即反版权、自由版权 版权制度起源于十五世纪中期,那时西方发明了铅活字印刷术(古登堡,现代印刷术之父),出现了...
-
下一篇
黑客松编程比赛火热报名中,巅峰对决,等你来战!
本次黑客松编程比赛是由 Jenkins 中文社区组织举办的,举办此活动的初衷是希望增加大家对 DevOps 认识及深入理解,也希望通过此活动可以让热爱编程的人们相互之间可以有一个进一步交流的机会。 黑客松编程比赛火热报名中,巅峰对决,等你来战! 比赛规则 活动中创建的新代码仓库,都会托管在 Jenkins 中文社区在码云上的组织下。因此,任何人都可以根据对应的开源协议进行修改、分发等。 所有的代码(或文档、设计等)工作,必须在现场完成,如有发现提前准备或者抄袭者,将会被取消当年以及次年的比赛资格。 所有项目必须可以做到持续构建,能做到持续交付、灰度发布的项目可以加分。 推荐与不同技能的小伙伴组成3人左右的团队,一起完成项目。 评选标准 团队协作、完整性、创新、难度、大众评分 报名说明 年满十八周即可报名参加,鉴于我们的所有项目都会托管在码云上,因此,参赛者必须能够熟练地使用码云。而为了能够证明你能够完成本次活动中的项目,当你从下面的项目提议中选定一个后,在报名时必须提供一个与你所选项目相关的、自本活动发布后的、已经合并了的 PR 链接,我们会根据该 PR 链接来决定你的报名是否可以通过...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL数据库在高并发下的优化方案
- CentOS关闭SELinux安全模块
- SpringBoot2全家桶,快速入门学习开发网站教程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境