diff options
Diffstat (limited to 'src/oid.nobj.lua')
-rw-r--r-- | src/oid.nobj.lua | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/oid.nobj.lua b/src/oid.nobj.lua index cb00071..8121180 100644 --- a/src/oid.nobj.lua +++ b/src/oid.nobj.lua @@ -19,16 +19,46 @@ -- THE SOFTWARE. object "OID" { + export_definitions { + RAWSZ = "GIT_OID_RAWSZ", + HEXSZ = "GIT_OID_HEXSZ", + MINPREFIXLEN = "GIT_OID_MINPREFIXLEN", + }, c_source [[ typedef git_oid OID; ]], userdata_type = 'simple', - constructor "str" { - c_call {"GitError", "err"} "git_oid_mkstr" - { "OID", "&this", "const char *", "hex" }, + constructor "hex" { + c_call {"GitError", "err"} "git_oid_fromstrn" + { "OID", "&this", "const char *", "str", "size_t", "#str" }, }, constructor "raw" { - c_call "void" "git_oid_mkraw" { "OID", "&this", "const unsigned char *", "raw" }, + c_source[[ + if(${raw_len} < GIT_OID_RAWSZ) { + lua_pushnil(L); + lua_pushliteral(L, "Invalid RAW OID"); + return 2; + } + ]], + c_call "void" "git_oid_fromraw" { "OID", "&this", "const unsigned char *", "raw" }, + }, + method "pathfmt" { + var_out{"const char *", "ret"}, + c_source [[ + char buf[GIT_OID_HEXSZ+1+1]; + git_oid_pathfmt(buf, &(${this})); + buf[GIT_OID_HEXSZ] = 0; + ${ret} = buf; +]], + }, + method "fmt" { + var_out{"const char *", "ret"}, + c_source [[ + char buf[GIT_OID_HEXSZ+1]; + git_oid_fmt(buf, &(${this})); + buf[GIT_OID_HEXSZ] = 0; + ${ret} = buf; +]], }, method "__str__" { var_out{"const char *", "ret"}, |