sdl2_frt/premake/util/sdl_string.lua
Philipp Wiesemann 0e45984fa0 Fixed crash if initialization of EGL failed but was tried again later.
The internal function SDL_EGL_LoadLibrary() did not delete and remove a mostly
uninitialized data structure if loading the library first failed. A later try to
use EGL then skipped initialization and assumed it was previously successful
because the data structure now already existed. This led to at least one crash
in the internal function SDL_EGL_ChooseConfig() because a NULL pointer was
dereferenced to make a call to eglBindAPI().
2015-06-21 17:33:46 +02:00

104 lines
3.2 KiB
Lua
Executable File

-- Copyright (C) 1997-2015 Sam Lantinga <slouken@libsdl.org>
--
-- This software is provided 'as-is', without any express or implied
-- warranty. In no event will the authors be held liable for any damages
-- arising from the use of this software.
--
-- Permission is granted to anyone to use this software for any purpose,
-- including commercial applications, and to alter it and redistribute it
-- freely.
--
-- Meta-build system using premake created and maintained by
-- Benjamin Henning <b.henning@digipen.edu>
--[[
sdl_string.lua
Contains a few convenient string utility functions which are not supported in
Lua or not supported as intended.
]]
-- Performs a non-pattern based substring search of one string in another
-- string. It's of O(n^2) complexity. It returns nil if the result cannot be
-- found, otherwise it returns the starting index of the first found occurrence.
string.indexOf = function(str, substr)
local pos = 1
local i = 1
for i = 1, str:len(), 1 do
if str:sub(i, i) == substr:sub(pos, pos) then
-- have we matched the complete string?
if pos == substr:len() then
return i - pos + 1-- starting pos
end
-- matched character...keep going
pos = pos + 1
else
-- restart, no match
pos = 0
end
end
if pos == substr:len() then
return i - pos + 1
end
return nil -- no match
end
-- This is a public-access version of the explode function defined below.
function explode(str, delim)
return str:explode(delim)
end
-- Explodes a string into an array of elements, separated by a non-pattern
-- delimiter. This function is part of the string table, allowing for a
-- member-based invocation for strings.
string.explode = function(str, delim)
local exploded = { }
local needle = string.find(str, delim)
while needle ~= nil do
table.insert(exploded, string.sub(str, 0, needle - 1))
str = string.sub(str, needle + 1)
needle = string.find(str, delim)
end
table.insert(exploded, str)
return exploded
end
-- Similar to table.concat, except it supports more advanced token pasting. This
-- function is vastly used by the main meta-build script (premake4.lua) to
-- generate all the main lines of code for various tables that need to be in the
-- generated lua file.
-- - tbl: table of values to implode into a string
-- - prefix: string to paste before entire result
-- - pre: string to always paste before each entry in table
-- - post: string to always paste after each entry in table
-- - join: string to paste between entries (inclusive)
-- - suffix: string to paste after entire result
-- Returns the imploded string.
function implode(tbl, prefix, pre, post, join, suffix)
local result = ""
-- not the most efficient way to do this, but...
local itbl = { }
for k,v in pairs(tbl) do
itbl[#itbl + 1] = v
end
for i = 1, #itbl, 1 do
if pre ~= nil then
result = result .. pre
end
result = result .. itbl[i]
if post ~= nil then
result = result .. post
end
if i ~= #itbl then
result = result .. join
end
end
if prefix ~= nil then
result = prefix .. result
end
if suffix ~= nil then
result = result .. suffix
end
return result
end