l_option* const self =
static_cast<l_option*>(luaL_checkudata(L, 1, LUA_KEAOPTION));
vector<uint8_t> bin = self->object->toBinary(true);
- lua_pushlstring(L, reinterpret_cast<char*>(&bin[0]), bin.size());
+ char* ptr = NULL;
+ if (!bin.empty()) {
+ ptr = reinterpret_cast<char*>(&bin[0]);
+ }
+ lua_pushlstring(L, ptr, bin.size());
return (1);
}
l_option* const self =
static_cast<l_option*>(luaL_checkudata(L, 1, LUA_KEAOPTION));
const OptionBuffer& data = self->object->getData();
- lua_pushlstring(L, reinterpret_cast<const char*>(&data[0]), data.size());
+ const char* ptr = NULL;
+ if (!data.empty()) {
+ ptr = reinterpret_cast<const char*>(&data[0]);
+ }
+ lua_pushlstring(L, ptr, data.size());
return (1);
}
if (hwaddr) {
bin = hwaddr->hwaddr_;
}
- lua_pushlstring(L, reinterpret_cast<char*>(&bin[0]), bin.size());
+ char* ptr = NULL;
+ if (!bin.empty()) {
+ ptr = reinterpret_cast<char*>(&bin[0]);
+ }
+ lua_pushlstring(L, ptr, bin.size());
return (1);
}
}
// Start ocaml
char* argv[2];
- argv[0] = &progname[0];
+ if (!progname.empty()) {
+ argv[0] = &progname[0];
+ } else {
+ argv[0] = NULL;
+ }
argv[1] = NULL;
caml_startup(argv);
uint16_t type = static_cast<uint16_t>(Int_val(typ));
OptionBuffer data;
data.resize(static_cast<size_t>(caml_string_length(bytes)));
- memmove(&data[0], String_val(bytes), data.size());
+ if (!data.empty()) {
+ memmove(&data[0], String_val(bytes), data.size());
+ }
result = caml_alloc_custom(opt_ops, sizeof(oc_opt), 0, 1);
oc_opt* const self = static_cast<oc_opt*>(Data_custom_val(result));
self->object.reset(new Option(universe, type, data));
oc_opt* const self = static_cast<oc_opt*>(Data_custom_val(opt));
vector<uint8_t> bin = self->object->toBinary(true);
result = caml_alloc_string(static_cast<mlsize_t>(bin.size()));
- memmove(String_val(result), &bin[0], bin.size());
+ if (!bin.empty()) {
+ memmove(String_val(result), &bin[0], bin.size());
+ }
CAMLreturn (result);
}
oc_opt* const self = static_cast<oc_opt*>(Data_custom_val(opt));
vector<uint8_t> data = self->object->getData();
result = caml_alloc_string(static_cast<mlsize_t>(data.size()));
- memmove(String_val(result), &data[0], data.size());
+ if (!data.empty()) {
+ memmove(String_val(result), &data[0], data.size());
+ }
CAMLreturn (result);
}
oc_opt* const self = static_cast<oc_opt*>(Data_custom_val(opt));
vector<uint8_t> data;
data.resize(static_cast<size_t>(caml_string_length(bytes)));
- memmove(&data[0], String_val(bytes), data.size());
+ if (!data.empty()) {
+ memmove(&data[0], String_val(bytes), data.size());
+ }
self->object->setData(data.begin(), data.end());
CAMLreturn (Val_unit);
}
py_option* const self = static_cast<py_option*>(obj);
vector<uint8_t> bin = self->object->toBinary(ih != 0);
- return (PyBytes_FromStringAndSize(reinterpret_cast<char*>(&bin[0]),
- static_cast<Py_ssize_t>(bin.size())));
+ char* ptr = NULL;
+ if (!bin.empty()) {
+ ptr = reinterpret_cast<char*>(&bin[0]);
+ }
+ Py_ssize_t sz = static_cast<Py_ssize_t>(bin.size());
+ return (PyBytes_FromStringAndSize(ptr, sz));
}
// getType() method
getData(PyObject* obj) {
py_option* const self = static_cast<py_option*>(obj);
const OptionBuffer& data = self->object->getData();
- return (PyBytes_FromStringAndSize(reinterpret_cast<const char*>(&data[0]),
- static_cast<Py_ssize_t>(data.size())));
+ const char* ptr = NULL;
+ if (!data.empty()) {
+ ptr = reinterpret_cast<const char*>(&data[0]);
+ }
+ Py_ssize_t sz = static_cast<Py_ssize_t>(data.size());
+ return (PyBytes_FromStringAndSize(ptr, sz));
}
// addOption(OptionPtr opt) method
if (hwaddr) {
bin = hwaddr->hwaddr_;
}
- return (PyBytes_FromStringAndSize(reinterpret_cast<char*>(&bin[0]),
- static_cast<Py_ssize_t>(bin.size())));
+ char* ptr = NULL;
+ if (!bin.empty()) {
+ ptr = reinterpret_cast<char*>(&bin[0]);
+ }
+ Py_ssize_t sz = static_cast<Py_ssize_t>(bin.size());
+ return (PyBytes_FromStringAndSize(ptr, sz));
}
// Method table