作为我将 lighttpd 移植到 glib 的持续、秘密工作的一部分,我至少可以说:它能编译了。
嗯,大部分是这样。核心部分确实能编译,并且 mod_staticfile 也基本完成。说是大部分,是因为我还没有决定如何处理配置文件。
那么,到目前为止已经完成了哪些工作
- buffer.c 和 buffer.h 已被移除,并替换为 GString
- array.c 已被移除,并替换为 GHashTable 或 GPtrArray
- 当 data_…c 被移除时,array.h 也将消失
- log.c 现在是 g_log_… 的一个封装
如你所见,这正在移除基础数据结构,并用 glib 风格的结构替换它们。
这不仅仅是简单的直接替换,因为这些结构使用了不同的字段名,并且有时含义略有不同。
一个例子是 GString 与 buffer 的比较
buffer { char *ptr; size_t used; size_t size; }; GString { char *str; size_t len; size_t allocated_len; };
虽然 str 和 ptr,以及 allocated_len 和 size 匹配,但 used 和 len 之间相差一个字节(used 包含空字节 NUL,而 len 不包含)。
这项枯燥工作的一个副作用是,代码量正在一点点地减少。
看到旧的、有时甚至是糟糕的代码消失是另一个不错的副作用。就像 log_error_write() 调用……天呐……