云上的老鼠

云上的日子

  DonewsBlog  |  Donews首页  |  Donews社区  |  Donews邮箱  |  我的首页  |  联系作者  |  聚合   |  登录
  76篇文章 :: 0篇收藏:: 61篇评论:: 0个Trackbacks

公告

这是quickmouse的blog哟

^______^

文章的转载请保留全文以及注明出处,谢谢合作!

文章

收藏

相册

常用链接

我的联系方式

友情推荐

主人推荐

存档


正在读取评论……


    昨天白云上一干人等突然发现用term进版面,每次都不得不去看进版画面,于是就在sysop嚷嚷呢。我在内部版面看beta说是bug,于是就问是怎么出现的,结果得到“不知道……有一天突然出现这种情况了”的回答,昏厥!
    想起来我应该去check out一份白云的source code,顺便也可以看看这到底怎么回事——其实我也受不了每次进版面都要被迫看一次进版画面,更何况我用ADSL从公网上过来,更慢更痛苦。于是版本机,重置自己的密码,再翻出好久没用的wincvs,捣腾来捣腾去,搞定。我以前是看过进版画面的code的,知道大概的原理,于是首先用“/notes”作为关键字搜索,翻来翻去,搜索到的部分都没有我想看的~~难道错了?只好退一步用“notes”作关键字,这结果可跟刚才不在一个数量级。瞟着瞟着,诶,看到了,原来进版用的setvfile来设置的版面名对应的notes文件,怪不得用“/notes”作关键字搜索不到。
    沿着代码跟到vote_flag函数,从上到下,再又从下到上,左看又看,逻辑上没问题啊。又退回到上层的Read函数,仔细看调用:
        if (vote_flag(currboard, '\0', 1 /* 检查读过新的备忘录没 */ ) == 0) {
                if (dashf(notename)) {
                        ansimore3(notename, YEA);
                        vote_flag(currboard, 'R', 1 /* 写入读过新的备忘录 */ );
                }
        }
    确实没什么特别的,也跟我以前记得的差不多。再往前回到vote_flag函数,仔细看重写标志的那段:
        if ((flag == 0 && val != 0)) {
                lseek(fd, (off_t) num, SEEK_SET);
                write(fd, &val, 1);
        }
    奇怪的是val,也就是vote_flag这个函数的第二个参数看样子应该是一个整数或者字符型参数,从Read调用上用'\0'或者'R'来看也能证明这点,但为什么vote_flag的函数声明是:
int vote_flag(char *bname, char *val, int mode)
    呢?百思不得其解啊。赶紧翻以前自己维护的喻信的那块代码出来看看,定义是:
int
vote_flag(bname, val, mode)
char   *bname, val;
int     mode;
    这里val明显只是一个char变量,而不是指针嘛。看来是重写定义的时候手误了。赶紧去bbstech报告这个问题,那时候gs已经开始在sysop哇哇叫要我们解决问题了。顺便msg给beta让他看看是不是这个问题,于是轮到beta晕倒了,哈哈。
    记得前两天我去技术组那边去晃悠,beta还问我关于attach shm的步骤,把我弄的一愣一愣的——beta也不是维护bbs的新手了,共享内存在bbs代码里可是基本的代码,他怎么会搞不定?我只好说只要确认key是一样的大小一样就不会attach错误,beta不信,说key是用ftok写的不会有问题,顺手把两个代码调出来给我看。可是我一眼就发现两个key用的define不一样,哈,beta说他看了一个月都没看出这个问题~~


Trackback: http://tb.donews.net/TrackBack.aspx?PostId=806114


[点击此处收藏本文]  发表于2006年04月01日 11:23 AM




正在读取评论……

发表评论

大名:
网址:
验证码
评论