Puming Zhao wrote: > Hi, I'm new in D programming, and does not have much C experience either. > After reading TDPL book and playing with some sample codes, I came to > decide to try something more `practical`. I began with a Redis client > binding from Hiredis C code. Hiredis is a small lib, and seems very simple > to bind to D. > > My code on github: > > https://github.com/zhaopuming/dredis > > But I went into problems that I don't know how to solve. When running > example.d I went into segment fault, and can't get redisReply from a redis > command. I tried to google it but got nothing. > > So my question is, could some one with more knowledge in redis or C/D look > into my code and see what's wrong ? Or is there already a Redis binding > exists?
in hiredis.d ------------------------ struct redisReply { int type; /* REDIS_REPLY_* */ int integer; /* The integer when type is REDIS_REPLY_INTEGER */ int len; /* Length of string */ char* str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */ size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */ redisReply** element; /* elements vector for REDIS_REPLY_ARRAY */ }; ------------------------ but in hiredis.h ------------------------ typedef struct redisReply { int type; /* REDIS_REPLY_* */ long long integer; /* The integer when type is REDIS_REPLY_INTEGER */ int len; /* Length of string */ char *str; /* Used for both REDIS_REPLY_ERROR and REDIS_REPLY_STRING */ size_t elements; /* number of elements, for REDIS_REPLY_ARRAY */ struct redisReply **element; /* elements vector for REDIS_REPLY_ARRAY */ } redisReply; ------------------------ So you have "int integer;" in D and "long long integer;" in C, which doesn't match. I'm not sure what size "long long" is in C, but I guess you need "long" in D?