init
This commit is contained in:
8
.editorconfig
Normal file
8
.editorconfig
Normal file
@@ -0,0 +1,8 @@
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[*.v]
|
||||
indent_style = tab
|
||||
8
.gitattributes
vendored
Normal file
8
.gitattributes
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
* text=auto eol=lf
|
||||
*.bat eol=crlf
|
||||
|
||||
*.v linguist-language=V
|
||||
*.vv linguist-language=V
|
||||
*.vsh linguist-language=V
|
||||
v.mod linguist-language=V
|
||||
.vdocignore linguist-language=ignore
|
||||
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
# Binaries for programs and plugins
|
||||
main
|
||||
pidfile
|
||||
*.exe
|
||||
*.exe~
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Ignore binary output folders
|
||||
bin/
|
||||
|
||||
# Ignore common editor/system specific metadata
|
||||
.DS_Store
|
||||
.idea/
|
||||
.vscode/
|
||||
*.iml
|
||||
|
||||
# ENV
|
||||
.env
|
||||
|
||||
# vweb and database
|
||||
*.db
|
||||
*.js
|
||||
22
UNLICENSE
Normal file
22
UNLICENSE
Normal file
@@ -0,0 +1,22 @@
|
||||
This is free and unencumbered software released into the public domain.
|
||||
|
||||
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
|
||||
software, either in source code form or as a compiled binary, for any purpose,
|
||||
commercial or non-commercial, and by any means.
|
||||
|
||||
In jurisdictions that recognize copyright laws, the author or authors of this
|
||||
software dedicate any and all copyright interest in the software to the public
|
||||
domain. We make this dedication for the benefit of the public at large and to
|
||||
the detriment of our heirs and
|
||||
successors. We intend this dedication to be an overt act of relinquishment in
|
||||
perpetuity of all present and future rights to this software under copyright
|
||||
law.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
||||
CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
For more information, please refer to <http://unlicense.org/>
|
||||
61
pidfile.v
Normal file
61
pidfile.v
Normal file
@@ -0,0 +1,61 @@
|
||||
module pidfile
|
||||
|
||||
import os
|
||||
import strconv
|
||||
|
||||
fn runtime_dir() string {
|
||||
if dir := os.getenv_opt('XDG_RUNTIME_DIR') {
|
||||
return dir
|
||||
}
|
||||
euid := os.geteuid()
|
||||
if euid > 0 {
|
||||
return '/run/user/${euid}'
|
||||
}
|
||||
return '/run'
|
||||
}
|
||||
|
||||
@[params]
|
||||
pub struct CreateFileConfig {
|
||||
pub:
|
||||
// Path prefix for pid-file, e.g. `/run/1000`. Defaults to XDG_RUNTIME_DIR if set or
|
||||
// to `/run/user/${EUID}` for normal users and `/run` for root user.
|
||||
prefix string
|
||||
|
||||
// Path that will be created inside the prefix. Has no default value.
|
||||
// For example `myapp` subpath with `/run/1000` prefix becomes to `/run/1000/myapp` path.
|
||||
subpath string
|
||||
|
||||
// If true omit the file extension. Otherwise append the `.pid` extension to filename.
|
||||
no_extension bool
|
||||
}
|
||||
|
||||
// create creates the new pid-file and returns path to it.
|
||||
pub fn create(name string, pid int, config CreateFileConfig) !string {
|
||||
mut filename := name
|
||||
if !name.ends_with('.pid') && !config.no_extension {
|
||||
filename += '.pid'
|
||||
}
|
||||
mut path := runtime_dir()
|
||||
if config.prefix != '' {
|
||||
path = config.prefix
|
||||
}
|
||||
path = os.join_path_single(path, config.subpath)
|
||||
os.mkdir_all(path)!
|
||||
path = os.join_path_single(path, filename)
|
||||
os.write_file(path, pid.str())!
|
||||
return path
|
||||
}
|
||||
|
||||
// write writes the pid into file specified in path.
|
||||
//
|
||||
// If directories in `path` do not exist, they will be created.
|
||||
pub fn write(path string, pid int) ! {
|
||||
os.mkdir_all(os.dir(path))!
|
||||
os.write_file(path, pid.str())!
|
||||
}
|
||||
|
||||
// read reads the pid-file and returns its content as integer.
|
||||
pub fn read(path string) !int {
|
||||
s := os.read_file(path)!
|
||||
return strconv.atoi(s.trim_space())!
|
||||
}
|
||||
Reference in New Issue
Block a user