免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4428 | 回复: 23
打印 上一主题 下一主题

跟风:发一段自己刚写的劣质代码供批判 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-07 13:57 |只看该作者 |倒序浏览
typedef struct __curl_buf {
    char *_data;
    int _size;
    int _mem;
    int _ref;
}curl_buf;

static inline curl_buf* _curl_buf_init()
{
    curl_buf *buf = malloc(sizeof(curl_buf));
    buf->_size = 0;
    buf->_mem = 128;
    buf->_data = malloc(buf->_mem);
    buf->_ref = 1;
    return buf;
}


static inline void _curl_buf_free(curl_buf *object)
{
    free(object->_data);
    free(object);
}

static inline curl_buf* _curl_buf_ref(curl_buf *object)
{
    ++object->_ref;
    return object;
}

static inline void _curl_buf_uref(curl_buf *object)
{
    if (--object->_ref == 0) {
        _curl_buf_free(object);
    }
}

static inline curl_buf* _curl_buf_copy(curl_buf *object)
{
    curl_buf *t;
    t = malloc(sizeof(curl_buf));
    t->_size = object->_size;
    t->_mem = object->_mem;
    t->_ref = 1;
    t->_data = malloc(t->_mem);
    if (object->_size > 0) {
        memcpy(t->_data, object->_data, object->_size);
    }

    return t;
}

static inline int _curl_buf_isonly(curl_buf *object)
{
    return object->_ref == 1;
}

static inline void _curl_buf_data_copy(curl_buf *object, int size, void *buf, int offset)
{
    if (object->_mem - 1 < offset + size) {
        object->_data = realloc(object->_data, offset + size + 1);
        object->_mem = offset + size + 1;
    }

    memcpy(object->_data + offset, buf, size);
}

static inline curl_buf* cb_alloc_ref(curl_buf *copy)
{
    if (copy == NULL)
        return _curl_buf_init();
       
    return _curl_buf_ref(copy);
}


static inline void cb_relese(curl_buf *object)
{
        _curl_buf_uref(object);
}


static inline void _curl_buf_add_data(curl_buf **object, int size, void *buf)
{
    curl_buf *t;
    if (!_curl_buf_isonly(*object)) {
        t = _curl_buf_copy(*object);
        _curl_buf_uref(*object);
        *object = t;
    } else {
        t = *object;
    }

    _curl_buf_data_copy(t, size, buf, t->_size);
    t->_size += size;
    t->_data[t->_size] = 0;
}


#define cb_add_data(object, size, buf) \
    _curl_buf_add_data(&object, size, buf)


static inline char* cb_get_data(curl_buf *object)
{
    return object->_data;
}

static inline int cb_get_size(curl_buf *object)
{
    return object->_size;
}

论坛徽章:
0
2 [报告]
发表于 2012-04-07 14:27 |只看该作者
本帖最后由 三月廿七 于 2012-04-07 14:28 编辑

// 这他妈就是纯傻B嘛,
_data

脑残,鉴定完毕

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
3 [报告]
发表于 2012-04-07 14:43 |只看该作者
没错误处理

论坛徽章:
0
4 [报告]
发表于 2012-04-07 14:55 |只看该作者
本帖最后由 风间星魂 于 2012-04-07 15:03 编辑
hellioncu 发表于 2012-04-07 14:43
没错误处理


请问怎么错误处理。。。
你无论怎么处理只要暴露指针就是一个死。。
c里我倾向是调用者有责任遵守约定。
至于malloc的错误处理由于一些理由倒是从来不做。。

论坛徽章:
0
5 [报告]
发表于 2012-04-07 15:06 |只看该作者
本帖最后由 hbmhalley 于 2012-04-07 15:07 编辑
三月廿七 发表于 2012-04-07 14:27
// 这他妈就是纯傻B嘛,
_data



    同不理解. 求解释

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
6 [报告]
发表于 2012-04-07 16:11 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
7 [报告]
发表于 2012-04-07 16:12 |只看该作者
本帖最后由 风间星魂 于 2012-04-07 16:26 编辑
hbmhalley 发表于 2012-04-07 15:06
同不理解. 求解释


object-c习惯类成员下划线开头,我也继承这个习惯了。
只是命名习惯问题。。。

论坛徽章:
0
8 [报告]
发表于 2012-04-07 16:14 |只看该作者
pmerofc 发表于 2012-04-07 16:11
回复 5# hbmhalley


troll而已。。。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
9 [报告]
发表于 2012-04-07 16:16 |只看该作者
不喜欢这种用 C++语法 写的 C风格代码

论坛徽章:
0
10 [报告]
发表于 2012-04-07 16:20 |只看该作者
bruceteen 发表于 2012-04-07 16:16
不喜欢这种用 C++语法 写的 C风格代码


c++语法? 这里面有任何c++部分么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP