V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
52coder
V2EX  ›  程序员

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

  •  
  •   52coder · 2020-10-10 00:30:12 +08:00 · 6046 次点击
    这是一个创建于 1266 天前的主题,其中的信息可能已经有所发展或是发生改变。

    读大三的老弟最近喜欢上了 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,到时候再被八股文,岂不美滋滋?)

    第 1 条附言  ·  2020-10-10 09:19:42 +08:00
    搭车同求一份高质量 C++源码,适合深度学习,入门难度不大,参考 c redis 。
    17 条回复    2020-10-10 23:30:57 +08:00
    mywaiting
        1
    mywaiting  
       2020-10-10 00:42:43 +08:00
    虽然我不懂 C/CPP 但是我觉得 Linus 没有写错,是的,脑残粉就是这么无脑 [摊手~]~
    52coder
        3
    52coder  
    OP
       2020-10-10 09:16:25 +08:00
    @timothyqiu 感谢老铁,昨天太晚,没去翻提交记录
    52coder
        4
    52coder  
    OP
       2020-10-10 09:17:39 +08:00
    @mywaiting 看第一个版本的 git,我给我老弟讲要学习里面的理念(虽然我没看过,但这话放之四海皆准[doge])
    mywaiting
        5
    mywaiting  
       2020-10-10 10:44:21 +08:00   ❤️ 1
    @52coder 第一个版本的 Git 单纯从代码上感觉没太多亮点,基本就是熟手的 C/CPP 水平

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

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

    那样写也不算错,但去掉更准确,有些人或编译器会把 true 定义成 1
    DiamondY
        8
    DiamondY  
       2020-10-10 11:58:42 +08:00
    @DiamondY #7 这里应该把编译器去掉,跟那没关系
    在有符号判断里面 ! 0 == -1
    52coder
        9
    52coder  
    OP
       2020-10-10 12:52:39 +08:00
    @DiamondY 不太明白兄弟你在说什么,你是不是理解混~和!的用法了?你方便提供个 demo 吗?
    52coder
        10
    52coder  
    OP
       2020-10-10 12:56:03 +08:00
    @DiamondY C 里一般 true 1 ,false 0,不是-1,即使是-1,上面那个代码也是错的,你可以写 demo 验证下。
    hwdef
        11
    hwdef  
       2020-10-10 13:26:08 +08:00
    源码,,既然看了 redis 的话,,可以看看另一个 k/v 数据库,leveldb,也值得学习,也不长。
    DiamondY
        12
    DiamondY  
       2020-10-10 13:44:11 +08:00
    @52coder 是搞混了~和!,估计上午脑子进水了
    C 里面判断只是认为 0 值为 false,非 0 就是 true,虽然标准库里面 true 是定义成 1,但定义成-1 也没错的
    52coder
        13
    52coder  
    OP
       2020-10-10 14:13:42 +08:00
    @hwdef 感谢推荐,leveldb 和 redis 有种相互补充的感觉,哈哈哈,多谢推荐
    berrx
        14
    berrx  
       2020-10-10 14:16:02 +08:00
    哥, 咱家有钱了 🐶
    52coder
        15
    52coder  
    OP
       2020-10-10 14:21:00 +08:00
    @berrx 哈哈哈哈,要是这样做梦都笑醒了,可是农村不会拆迁,哈哈哈哈
    maigebaoer
        16
    maigebaoer  
       2020-10-10 14:36:35 +08:00 via Android
    害,我们这些应用侧的,还是直接背八股文吧🤣
    52coder
        17
    52coder  
    OP
       2020-10-10 23:30:57 +08:00
    @maigebaoer 我也应用测的,主要 java,偶尔 go,看看 redis 源码,再背八股文可能好背一些吧.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4536 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:00 · PVG 18:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.