File: utils.lua

package info (click to toggle)
lua-resty-core 0.1.32-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,268 kB
  • sloc: sh: 207; perl: 143; makefile: 26
file content (46 lines) | stat: -rw-r--r-- 972 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
-- Copyright (C) Yichun Zhang (agentzh)


local ffi = require "ffi"
local base = require "resty.core.base"


local C = ffi.C
local ffi_str = ffi.string
local ffi_copy = ffi.copy
local byte = string.byte
local str_find = string.find
local get_string_buf = base.get_string_buf
local subsystem = ngx.config.subsystem


local _M = {
    version = base.version
}


if subsystem == "http" then
    ffi.cdef[[
    void ngx_http_lua_ffi_str_replace_char(unsigned char *buf, size_t len,
        const unsigned char find, const unsigned char replace);
    ]]


    function _M.str_replace_char(str, find, replace)
        if not str_find(str, find, nil, true) then
            return str
        end

        local len = #str
        local buf = get_string_buf(len)
        ffi_copy(buf, str, len)

        C.ngx_http_lua_ffi_str_replace_char(buf, len, byte(find),
                                            byte(replace))

        return ffi_str(buf, len)
    end
end


return _M