diff --git a/src/box/func.cc b/src/box/func.cc index 21708cb6a0b2945c188ae2e63b0a4714ac43a6d7..73f00a346f9f97d6ea5e97cf23c4da1c054db906 100644 --- a/src/box/func.cc +++ b/src/box/func.cc @@ -90,16 +90,16 @@ func_load(struct func *func) * Extract package name from function name. * E.g. name = foo.bar.baz, function = baz, package = foo.bar */ + const char *sym; const char *package = func->def.name; - const char *package_end = NULL; - const char *sym = package; - while ((sym = strchr(sym, '.'))) - package_end = sym; - if (package_end == NULL) { + const char *package_end = strrchr(package, '.'); + if (package_end != NULL) { + /* module.submodule.function => module.submodule, function */ + sym = package_end + 1; + } else { + /* package == function => function, function */ sym = package; package_end = package + strlen(package); - } else { - sym = package_end + 1; } /* First argument of searchpath: name */ diff --git a/test/app/function1.c b/test/app/function1.c index b73e500823a27fd7398fd08b153020198ea630da..d0308c662bfe1eb1780a4eafffe0dbc36c2b0216 100644 --- a/test/app/function1.c +++ b/test/app/function1.c @@ -1,8 +1,18 @@ #include "tarantool.h" +#include <stdio.h> int function1(struct request *request, struct port *port) { say_info("-- function1 - called --"); + printf("ok - function1\n"); + return 0; +} + +int +test(struct request *request, struct port *port) +{ + say_info("-- test - called --"); + printf("ok - test\n"); return 0; } diff --git a/test/app/function1.result b/test/app/function1.result index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..208183413473d241189f187817cf0d9f79201ca6 100644 --- a/test/app/function1.result +++ b/test/app/function1.result @@ -0,0 +1,2 @@ +ok - function1 +ok - test diff --git a/test/app/function1.test.lua b/test/app/function1.test.lua index f84ff151a4e5bda83b1701ce0c1a095adbb2e412..f63a02f9ae43c26ccd05db7170439295a649c5f0 100755 --- a/test/app/function1.test.lua +++ b/test/app/function1.test.lua @@ -15,8 +15,11 @@ net = require('net.box') box.schema.func.create('function1', {language = "C"}) box.schema.user.grant('guest', 'execute', 'function', 'function1') +box.schema.func.create('function1.test', {language = "C"}) +box.schema.user.grant('guest', 'execute', 'function', 'function1.test') c = net:new(os.getenv("LISTEN")) c:call('function1') +c:call('function1.test') os.exit(0)