因为要修复Wine的Bug,需要重新实现sprintf,
于是我研究了wine中printf跟sprinf的实现。
其实printf跟sprintf实现的关键无非就是可变参数,利用此就可以写出一个功能简单的printf.
我仔细研究了一下Wine里面的实现,发现printf跟sprintf的实现核心都用到了pfprintfa(就是根据参数%f,%d等转换的函数),不过重定向不一样。
printf是用到了write_concole, sprintf是复制到buf里面~
实际上, printf这个我们常用的函数, 申请了内存, 用buf来存放输出的结果.
继续阅读 »
```
include
include
include
define NLOOP 5000
int counter; /* incremented by threads / pthread_mutex_t counter_mutex = PTHREAD_MUTEX_INITIALIZER;
void *doit(void *);
int main(int argc, char **argv)
{
pthread_t tidA, tidB;
pthread_create(&tidA, NULL, doit, NULL); pthread_create(&tidB, NULL, doit, NULL);
继续阅读 »
文/Robin
早在 2020 年 10 月 13 日晚,DeFi 项目 Wine Swap 飞出黑天鹅。晚上 10 点上线的新项目, 在线上仅仅半小时后,正在挖矿的投资者们发现 Wine Swap 已经跑路。截至 11 月 2 日,用户损失逾 34.5 万美元。
当然了,这种有组织有预谋的跑路在 DeFi 项目里比例是偏少的,大部分 DeFi 项目资金安全受到威胁,都是代码 Bug,或者是受到攻击。当众多投资者欲哭无泪时,币安安全团队却给大家带来了好消息。
2020 年 11 月 4 日,币安安全团队成功帮助用户追回跑路 DeFi 项目 WineSwap 用户损失资金的 99.9%,共计超过 34.4 万美元。此次 Wi
继续阅读 »
各位同学:
新年好,
我是洪谦,自封的 Google 开源代码夏令营助教。
两年前,我写了《做一名开源社区的扫地僧(上)》,记录了我在开源社区中打怪升级的经历和收获,以5000美金奖金为诱饵,怂恿在校的朋友参加 Google代码夏令营。说来惭愧,这篇文章冗长罗嗦,可恰是这篇文章让我认识了这么多开源社区的朋友,有的朋友见面就问我《扫地僧(下)》什么时候问世,我总是一拖再拖,不好意思又跳票了。
这次新作拙文请大家评阅,一方面是再度为 Google Summer of Code 做免费宣传,另一方面其实是抱着私心,诚恳地希望找到志同道合的朋友加入 Wine 项目。
文章一如既往的冗长罗嗦,一如既往的只限学生阅读 :)
Goog
继续阅读 »
先摆干货,总结:static函数的作用是在链接层面上的。
之所以研究static函数是因为Wine里面很多helper函数都是在.h文件里声明为static, 其作用就是避免命名冲突。
1.
正如很多C语言书籍里都有提到:
函数的定义和声明默认情况下是extern的,但静态函数只是在声明他的文件当中可见,不能被其他文件所用。
定义静态函数的好处:
<1> 其他文件中可以定义相同名字的函数,不会发生冲突
<2> 静态函数不能被其他文件所用。
继续阅读 »