summaryrefslogtreecommitdiff
path: root/src/oid.nobj.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/oid.nobj.lua')
-rw-r--r--src/oid.nobj.lua38
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"},