您的位置:首页 > 其它

使用 Visual Studio 编译 wget 为库文件

2011-07-04 17:06 176 查看
添加代码与预编译指令与上一篇使用 Visual Studio 编译 wget 为可执行文件一致,区别在于这回建的是静态库工程(编译为动态库过程类似:))

从wget的main函数开始读下来,发现问题不少,程序可能基于效率或者编码方便的因素,大量使用静态变量,导致在将其修改为静态库之后存在潜在危险。

需要修改的部分如下:

1、main.c文件,no_prefix函数:

static char *
no_prefix (const char *s)
{
static char buffer[1024];
static char *p = buffer;
...
}


由于原程序使用指针p来指向尚未处理的数据,no_prefix函数调用一次p指针向后移动一段距离,直到buffer的末尾。

因为原有wget程序一次运行完成之后即退出,这段代码不会出问题,但在做为函数调用进行多次下载的时候,指针p没有移动到buffer的开头,就导致了缓冲区溢出问题。

只需在一次下载结束之后对其设置重置指针p的标志即可在下次执行下载任务开始前对指针p进行归位处理。

在no_prefix函数变量定义之后添加如下代码:

View Code

float g_fOldPercent = -1;

void send_download_process_info(float percent)
{
DownloadInfo info;
if(g_fOldPercent == floor(percent))
{
return ;
}
g_fOldPercent = floor(percent);
info.Percent = floor(percent);

info.pInfoStr = NULL;
if (info.Percent == 100)
{
info.InfoType = Complete;
}
else
{
info.InfoType = Loading;
}

if (g_download_process_callback != NULL)
{
g_download_process_callback(info);
}

}


在void ws_percenttitle (double percentage_float)函数中添加调用:send_download_process_info(percentage_float);

接下来就可以开始使用wget的函数直接进行下载了。\(^o^)/~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: