C

共 58 篇文章。

重新设计了d的一组API

• Development

将个性化的factory提取出来,改为使用通用的factory生成同一协议的protocol对象,并将业务逻辑对象作为factory的一个参数。这样做使得代码冗余大大降低了。

参与评论

终于抓住了py-ldap中的内存泄漏!!

• Development

之前曾经误认为 Python中存在内存泄漏,不过最终证明还是C程序的问题。Py-LDAP2这个模块在某些情况下,会泄漏一个空的List,具体泄漏代码如下:

retval = Py_BuildValue("(OOiO)", result_str, pmsg, res_msgid, pyctrls ? pyctrls : PyList_New(0));

当pyctrls == NULL时,Py_BuildValue()会为PyList_New(0)生成的那个对象再增加一个引用,这样会导致泄漏。这一问题会发生于调用result()而all=0的情形。

阅读全文… ( 本文约 196 字,阅读大致需要 1 分钟 )

My misunderstanding of OpenLDAP API

• Development

I used to think that ldap_unbind() is the opposite of ldap_bind(), however I was wrong. Pierangelo Masarati (ando at openldap) pointed out that it was actually opposite of ldap_init(). So, do NOT expect init() -> bind() -> search() -> unbind() -> bind() would success, it’s simply wrong thing. You do not need to unbind() before you do another bind().

Just make a note.

参与评论

OpenLDAP的内存泄漏

• Development

今天发现了OpenLDAP client库的一个内存泄漏(每次连接会漏掉大约80字节),并提交了ITS patch(4441),不过我觉得这里面上锁上的还是有点问题的,至少逻辑不是很清楚。

参与评论

while(0)是干吗的?

• Development

今天 renzhen 同学问起为什么很多宏都定义为 do { something… } while(0),我也顺便温习了一下。

简而言之:如果希望宏表现的和函数接近,就需要这样做。

阅读全文… ( 本文约 124 字,阅读大致需要 1 分钟 )

给csh增加了简体中文(GBK)支持

• Development

对GBK的locale做了一些改动,使得其能够提供正确的字符宽度信息了。这样一来,csh就能够正确处理GBK的中文了。昨天还增加了正体(我们叫做繁体)中文对应的locale变化。

阅读全文… ( 本文约 119 字,阅读大致需要 1 分钟 )

关于如何扩展复杂且难懂的C代码的一点经验谈

• Development

有时,我们会希望扩展一些现有的C代码。这些代码可能经历了相当久的运行考验——它们至少目前工作起来没有问题——然而,它们可能存在各种各样的问题,比如:

  • 缺少注释。
  • 过分使用的goto语句。
  • 变量名不规范。
  • 逻辑复杂难懂。
  • 过分使用表达式赋值(if (foo = bar()) {})
  • 直接返回函数返回值(这是合法的,但会给增加功能带来困难)

要扩展这类代码是一件有挑战的事情。

阅读全文… ( 本文约 705 字,阅读大致需要 2 分钟 )

FreeBSD的uuid处理小问题

• Development

似乎在处理>和<时,和 DCE 不太一样,改天写个test case看看。


Archived: trackbacks

生成UUID from 2006 Penguin, smashing time! on February 4, 2006 11:36 PM

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>
#include <uuid.h>
main() {
  uuid_t *uuid;
  char *s;
  uuid = (uuid_t*)malloc(sizeof(uuid_t));
  uuidgen(uuid,1);
  uuid_to_string(uuid,&s,NULL);
  printf("%s\\n",s);
}

一个很简单的生成UUID的例子。… Read More

参与评论

malloc(3)换了!

• Kernel

Jason Evans同学返回FreeBSD的第一件事就是把malloc(3)的实现换掉了。这个完全重写的malloc(3)实现带来了以下功能:

  • 防止CPU之间发生冲突的分配场(arenas)概念。
  • 类似slab allocator的分配机制。
  • 释放-分配时的对象cache机制。

仅manpage和malloc.c的patchset就超过150K,值得一读。

参与评论