老弟兴奋的说:哥,我发现了 Linus Torvalds git 代码里的 bug

2020-10-10 00:30:12 +08:00
 52coder

读大三的老弟最近喜欢上了 c/c++,看 c/c++的源码,他告诉我他发现了 Linus Torvalds git 仓库里的 bug (程序 bug + 内存泄露 + 段错误),然后我说你赶紧提 PR 呀,看了半天他说的其中一个 bug init-db.c 没发现问题,各种怀疑人生,一问才知道是第一版 git. 其中一个 bug

sha1_dir = getenv(DB_ENVIRONMENT);
if (sha1_dir) {
	struct stat st;
	if (!stat(sha1_dir, &st) < 0 && S_ISDIR(st.st_mode))
		return 0;
	fprintf(stderr, "DB_ENVIRONMENT set to bad directory %s: ", sha1_dir);
}

stat 返回 0 或 -1,非零加!结果为 0,0 加!结果为 1,这里<0 条件永远不成立?各位老哥们,这里我没理解错吧,别误导了我弟,哈哈哈哈。

顺带求一份适合深入学习的 C++开源代码( C 的话老弟专心看 redis 了,时不时问我一些问题,我也跟着学习下 redis,到时候再被八股文,岂不美滋滋?)

6085 次点击
所在节点    程序员
17 条回复
mywaiting
2020-10-10 00:42:43 +08:00
虽然我不懂 C/CPP 但是我觉得 Linus 没有写错,是的,脑残粉就是这么无脑 [摊手~]~
timothyqiu
2020-10-10 00:50:10 +08:00
52coder
2020-10-10 09:16:25 +08:00
@timothyqiu 感谢老铁,昨天太晚,没去翻提交记录
52coder
2020-10-10 09:17:39 +08:00
@mywaiting 看第一个版本的 git,我给我老弟讲要学习里面的理念(虽然我没看过,但这话放之四海皆准[doge])
mywaiting
2020-10-10 10:44:21 +08:00
@52coder 第一个版本的 Git 单纯从代码上感觉没太多亮点,基本就是熟手的 C/CPP 水平

然而可以从高处抽象出 tree 和 blob 这两个实现然后实现一套完整的分布式版本管理,整个思路和体系很值得学习

化繁为简,用一千多行代码就高效完成整个系统的搭建,短小精悍,更是项目实现中的典范,这个才真值得学习
52coder
2020-10-10 11:41:57 +08:00
@mywaiting 是的,非常赞同你说的这个,当然我也建议我弟从提交记录开始往后躲看看,为什么要这么高,抽象和设计就要自己消化和吸收了。
DiamondY
2020-10-10 11:46:31 +08:00
在 C 一般会这样定义,true:-1 false:0

那样写也不算错,但去掉更准确,有些人或编译器会把 true 定义成 1
DiamondY
2020-10-10 11:58:42 +08:00
@DiamondY #7 这里应该把编译器去掉,跟那没关系
在有符号判断里面 ! 0 == -1
52coder
2020-10-10 12:52:39 +08:00
@DiamondY 不太明白兄弟你在说什么,你是不是理解混~和!的用法了?你方便提供个 demo 吗?
52coder
2020-10-10 12:56:03 +08:00
@DiamondY C 里一般 true 1 ,false 0,不是-1,即使是-1,上面那个代码也是错的,你可以写 demo 验证下。
hwdef
2020-10-10 13:26:08 +08:00
源码,,既然看了 redis 的话,,可以看看另一个 k/v 数据库,leveldb,也值得学习,也不长。
DiamondY
2020-10-10 13:44:11 +08:00
@52coder 是搞混了~和!,估计上午脑子进水了
C 里面判断只是认为 0 值为 false,非 0 就是 true,虽然标准库里面 true 是定义成 1,但定义成-1 也没错的
52coder
2020-10-10 14:13:42 +08:00
@hwdef 感谢推荐,leveldb 和 redis 有种相互补充的感觉,哈哈哈,多谢推荐
berrx
2020-10-10 14:16:02 +08:00
哥, 咱家有钱了 🐶
52coder
2020-10-10 14:21:00 +08:00
@berrx 哈哈哈哈,要是这样做梦都笑醒了,可是农村不会拆迁,哈哈哈哈
maigebaoer
2020-10-10 14:36:35 +08:00
害,我们这些应用侧的,还是直接背八股文吧🤣
52coder
2020-10-10 23:30:57 +08:00
@maigebaoer 我也应用测的,主要 java,偶尔 go,看看 redis 源码,再背八股文可能好背一些吧.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713479

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX