issue #22: module name needs disambiguation

This commit is contained in:
Bryan Cantrill
2012-10-31 01:02:40 -07:00
parent db13b0aeaf
commit 020cbdcd5b
2 changed files with 24 additions and 4 deletions
+4 -2
View File
@@ -32,6 +32,8 @@ if (!DTraceProvider) {
}
exports.DTraceProvider = DTraceProvider;
exports.createDTraceProvider = function(name) {
return new DTraceProvider(name);
exports.createDTraceProvider = function(name, module) {
if (arguments.length == 2)
return (new DTraceProvider(name, module));
return (new DTraceProvider(name));
};
+20 -2
View File
@@ -32,17 +32,35 @@ namespace node {
Handle<Value> DTraceProvider::New(const Arguments& args) {
HandleScope scope;
DTraceProvider *p = new DTraceProvider();
char module[128];
p->Wrap(args.This());
if (args.Length() != 1 || !args[0]->IsString()) {
if (args.Length() < 1 || !args[0]->IsString()) {
return ThrowException(Exception::Error(String::New(
"Must give provider name as argument")));
}
String::AsciiValue name(args[0]->ToString());
if ((p->provider = usdt_create_provider(*name, "modname")) == NULL) {
if (args.Length() == 2) {
if (!args[1]->IsString()) {
return ThrowException(Exception::Error(String::New(
"Must give module name as argument")));
}
String::AsciiValue mod(args[1]->ToString());
(void) snprintf(module, sizeof (module), "%s", *mod);
} else if (args.Length() == 1) {
// If no module name is provided, develop a synthetic module name based
// on our address
(void) snprintf(module, sizeof (module), "mod-%p", p);
} else {
return ThrowException(Exception::Error(String::New(
"Expected only provider name and module as arguments")));
}
if ((p->provider = usdt_create_provider(*name, module)) == NULL) {
return ThrowException(Exception::Error(String::New(
"usdt_create_provider failed")));
}