From 5f21a453da230d8af0d19c9fbc62dace37a5df60 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Thu, 27 Nov 2025 19:41:30 +0100 Subject: [PATCH 01/31] Update Readme.md after moving back to github/kmscon/kmscon Signed-off-by: Jocelyn Falempe --- .github/workflows/meson.yml | 2 +- README.md | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/.github/workflows/meson.yml b/.github/workflows/meson.yml index 7856c3f9..daf42751 100644 --- a/.github/workflows/meson.yml +++ b/.github/workflows/meson.yml @@ -23,7 +23,7 @@ jobs: - name: Compile and install libtsm env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - LIBTSM: "https://api.github.com/repos/Aetf/libtsm/releases/latest" + LIBTSM: "https://api.github.com/repos/kmscon/libtsm/releases/latest" run: | tar_url=$(curl -s --request GET --header "Authorization: Bearer $GH_TOKEN" --url $LIBTSM | jq -r .tarball_url) curl --request GET -s -L -o libtsm.tar.gz --header "Authorization: Bearer $GH_TOKEN" --url $tar_url diff --git a/README.md b/README.md index 4403091a..1e5830a0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # KMSCON +![Build Status](https://github.com/kmscon/kmscon/actions/workflows/meson.yml/badge.svg?branch=main) + Kmscon is a simple terminal emulator based on linux kernel mode setting (KMS). It is an attempt to replace the in-kernel VT implementation with a userspace console. See kmscon(1) man-page for usage information. @@ -7,7 +9,7 @@ console. See kmscon(1) man-page for usage information. ## Requirements Kmscon requires the following software: - - [libtsm](https://github.com/Aetf/libtsm): terminal emulator state machine + - [libtsm](https://github.com/kmscon/libtsm): terminal emulator state machine - [libudev](https://www.freedesktop.org/software/systemd/man/libudev.html): providing input, video, etc. device hotplug support (>=v172) - [libxkbcommon](https://xkbcommon.org/): providing internationalized keyboard handling - [libdrm](https://gitlab.freedesktop.org/mesa/drm): graphics access to DRM/KMS subsystem @@ -35,7 +37,7 @@ sudo apt install systemd-dev ## Download -Released tarballs can be found at: https://github.com/Aetf/kmscon/releases +Released tarballs can be found at: https://github.com/kmscon/kmscon/releases ## Install @@ -91,7 +93,7 @@ See `man kmscon` for more information. ### Config file The default configuration file is `/etc/kmscon/kmscon.conf`. Any command line option can be put in the config file in -its long form without the leading `--` (double dash). See `man kmscon` for more information. +its long form without the leading `--` (double dash). See `man kmscon` for more information or look at [kmscon.com](scripts/etc/kmscon.conf) ## License @@ -100,5 +102,4 @@ This software is licensed under the terms of an MIT-like license. Please see ## History -This is a personal fork from https://www.freedesktop.org/wiki/Software/kmscon, which hasn't been updated since 2014. - +This project was maintained in [Aetf's](https://github.com/Aetf/kmscon) fork for 11 years, before coming back here in 2025 From 71b3d883272724015eea2c5df39b1cf9d1fff216 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 28 Nov 2025 08:35:11 +0100 Subject: [PATCH 02/31] Remove render-timing option from man pages and help This option was removed long ago with commit 96b28e9 tsm: remove and depend on libtsm Signed-off-by: Jocelyn Falempe --- docs/man/kmscon.1.xml.in | 8 -------- docs/man/kmscon.conf.1.xml.in | 7 ------- src/kmscon_conf.c | 1 - 3 files changed, 16 deletions(-) diff --git a/docs/man/kmscon.1.xml.in b/docs/man/kmscon.1.xml.in index 435cc2b0..87833421 100644 --- a/docs/man/kmscon.1.xml.in +++ b/docs/man/kmscon.1.xml.in @@ -516,14 +516,6 @@ - - - - Display timing information of the render engines. This should - only be used to debug render engines. (default: off) - - - diff --git a/docs/man/kmscon.conf.1.xml.in b/docs/man/kmscon.conf.1.xml.in index 0a3005d5..fab58825 100644 --- a/docs/man/kmscon.conf.1.xml.in +++ b/docs/man/kmscon.conf.1.xml.in @@ -395,13 +395,6 @@ font-name=Ubuntu Mono - - - - Print renderer timing information. (default: off) - - - diff --git a/src/kmscon_conf.c b/src/kmscon_conf.c index 2be56f8c..df2e51da 100644 --- a/src/kmscon_conf.c +++ b/src/kmscon_conf.c @@ -147,7 +147,6 @@ static void print_help() "\t available\n" "\t --gpus={all,aux,primary} [all] GPU selection mode\n" "\t --render-engine [-] Console renderer\n" - "\t --render-timing [off] Print renderer timing information\n" "\t --use-original-mode [on] Use original KMS video mode\n" "\t --mode x [0x0] Set the desired mode for the\n" "\t output. If the specified mode is\n" From 9a0b5f1b9c7788319b43fbc728f88c4817e8e543 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 28 Nov 2025 13:50:46 +0100 Subject: [PATCH 03/31] Fix typo in README.md Signed-off-by: Jocelyn Falempe --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1e5830a0..6e3347cf 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ See `man kmscon` for more information. ### Config file The default configuration file is `/etc/kmscon/kmscon.conf`. Any command line option can be put in the config file in -its long form without the leading `--` (double dash). See `man kmscon` for more information or look at [kmscon.com](scripts/etc/kmscon.conf) +its long form without the leading `--` (double dash). See `man kmscon` for more information or look at [kmscon.conf](scripts/etc/kmscon.conf) ## License From d8aced588431a9192a3c0e3a4b72ce23cea9f05d Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 28 Nov 2025 15:10:00 +0100 Subject: [PATCH 04/31] Remove release github workflow Signed-off-by: Jocelyn Falempe --- .github/workflows/release.yml | 57 ----------------------------------- tools/extract_release_note.py | 47 ----------------------------- 2 files changed, 104 deletions(-) delete mode 100644 .github/workflows/release.yml delete mode 100755 tools/extract_release_note.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index be026b88..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: release -on: - push: - # Enable when testing release infrastructure on a branch. - branches: - - release-* - tags: - - 'v[0-9]+.[0-9]+.[0-9]+' -jobs: - create-release: - name: create-release - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 - with: - python-version: '3.x' - - name: Install meson - run: pip install meson ninja - - name: Install dependencies - run: | - sudo apt-get install -y check libudev-dev libxkbcommon-dev libdrm-dev libgbm-dev libegl1-mesa-dev libgles-dev libpango1.0-dev libsystemd-dev - - name: Install libtsm - run: | - curl -L -o libtsm.tar.gz $(curl -s https://api.github.com/repos/Aetf/libtsm/releases/latest \ - | grep "tarball_url" \ - | awk '{ print $2 }' \ - | sed 's/,$//' \ - | sed 's/"//g' ) - mkdir libtsm - tar -xf libtsm.tar.gz -C libtsm --strip 1 - cd libtsm - meson setup build - cd build - meson compile - sudo meson install - - name: Meson setup - run: meson setup builddir/ - - name: Create source distribution - # no unit tests yet - run: meson dist -C builddir/ - - name: Create release note - run: tools/extract_release_note.py NEWS ${{ github.workspace }}-release-note.txt - - name: Upload Artifact - uses: actions/upload-artifact@v3 - with: - name: release-files - path: | - builddir/meson-dist/* - ${{ github.workspace }}-release-note.txt - - name: Release - uses: softprops/action-gh-release@v1 - # only actually create the release when run on tag - if: startsWith(github.ref, 'refs/tags/') - with: - files: builddir/meson-dist/* - body_path: ${{ github.workspace }}-release-note.txt diff --git a/tools/extract_release_note.py b/tools/extract_release_note.py deleted file mode 100755 index 3a06eafe..00000000 --- a/tools/extract_release_note.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env python3 -# SPDX-FileCopyrightText: 2022 Aetf -# -# SPDX-License-Identifier: MIT -import re -import inspect - -PTN_RELEASE_NOTE = re.compile(r'^CHANGES WITH.+$([\s\S]+?)^CHANGES WITH.+$', re.MULTILINE) - - -def extract(src: str) -> str: - """Find section between the first and the next 'CHANGES WITH xx:' lines, - and strip common prefix whitespace - """ - m = PTN_RELEASE_NOTE.search(src) - if m is not None: - return inspect.cleandoc(m.group(1)) + '\n' - else: - return '' - - -def main(): - import argparse - import sys - - parser = argparse.ArgumentParser() - parser.add_argument( - 'src', - type=argparse.FileType('r'), - nargs='?', - help='input NEWS', - default=sys.stdin, - ) - parser.add_argument( - 'dest', - type=argparse.FileType('w'), - nargs='?', - help='output', - default=sys.stdout, - ) - args = parser.parse_args() - - args.dest.write(extract(args.src.read())) - - -if __name__ == '__main__': - main() From 7d46650dbb0826f9b89de42f879be879391c14fd Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 11:51:45 +0100 Subject: [PATCH 05/31] Bump to version 9.2.1 There are two issues with v9.2.0: - the version was not updated in meson.build - the git tag is a lightweight tag, so ignored by git describe. Signed-off-by: Jocelyn Falempe --- NEWS | 47 +++++++++++++++++++++++++++++++++++++++++++++++ meson.build | 2 +- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 04f76374..78f17250 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,52 @@ = KMSCON Release News = +## CHANGES WITH 9.2.1 + * Bug fixes: + - Remove release github workflow @kdj0c in https://github.com/kmscon/kmscon/pull/155 + - Fix kmscon version @kdj0c in https://github.com/kmscon/kmscon/pull/158 + +## CHANGES WITH 9.2.0 + * New features! + - Add kmscon-launch-gui to start gui from kmscon @kdj0c in https://github.com/Aetf/kmscon/pull/118 + - Add retry count and retry time to login program by @michael-oberpriller in https://github.com/Aetf/kmscon/pull/134 + - Add rotation support by @kdj0c in https://github.com/Aetf/kmscon/pull/147 + - Add mouse support by @kdj0c in https://github.com/Aetf/kmscon/pull/149 + - Double width overflow support by @michael-oberpriller in https://github.com/Aetf/kmscon/pull/135 + + * Bug fixes + - Fix build of conf.c with xkbcommon by @kdj0c in https://github.com/Aetf/kmscon/pull/116 + - Add basic CI for all pull request by @kdj0c in https://github.com/Aetf/kmscon/pull/117 + - github-ci: update package list before installing by @kdj0c in https://github.com/Aetf/kmscon/pull/119 + - Hide hardware cursor on vt switching by @michael-oberpriller in https://github.com/Aetf/kmscon/pull/123 + - Fix github CI, after renaming develop to main by @kdj0c in https://github.com/Aetf/kmscon/pull/127 + - Make sure the main thread gets SIGCHLD by @Vogtinator in https://github.com/Aetf/kmscon/pull/106 + - Revert hup workaround by @kdj0c in https://github.com/Aetf/kmscon/pull/126 + - Readme: add systemd-dev requirement on debian systems by @kdj0c in https://github.com/Aetf/kmscon/pull/128 + - Remove custom SELinux module by @Vogtinator in https://github.com/Aetf/kmscon/pull/130 + - Add a man-page for the kmscon.conf file. by @kdj0c in https://github.com/Aetf/kmscon/pull/131 + - Disable session-control when running with real VTs by @michael-oberpriller in https://github.com/Aetf/kmscon/pull/137 + - Pango: use font cache to check if the font overflows by @kdj0c in https://github.com/Aetf/kmscon/pull/141 + - Pango: align stride to 4 bytes by @kdj0c in https://github.com/Aetf/kmscon/pull/142 + - Update CI as libtsm has switched to meson by @kdj0c in https://github.com/Aetf/kmscon/pull/144 + - Fix character overflow with JetBrainsMono Nerd Font Mono by @kdj0c in https://github.com/Aetf/kmscon/pull/146 + - kmscon-launch-gui: don't use eval by @martinetd in https://github.com/Aetf/kmscon/pull/156 + - Add a default kmscon.conf in /etc by @kdj0c in https://github.com/Aetf/kmscon/pull/154 + - Build video_drm3d as a module by @kdj0c in https://github.com/Aetf/kmscon/pull/153 + - Fix kmscon using 100% CPU when trying to read systemd seats configuration by @kdj0c in https://github.com/Aetf/kmscon/pull/157 + - Set env variable KMS_START_SCRIPT and TERM_SESSION_TYPE by @kdj0c in https://github.com/Aetf/kmscon/pull/160 + - print backends by @kdj0c in https://github.com/Aetf/kmscon/pull/165 + - Remove the pixman renderer by @kdj0c in https://github.com/Aetf/kmscon/pull/163 + - Remove bblit renderer, and make bbulk built-ins by @kdj0c in https://github.com/Aetf/kmscon/pull/166 + - Update Readme.md after moving back to github/kmscon/kmscon by @kdj0c https://github.com/kmscon/kmscon/pull/152 + - Remove render timing by @kdj0c https://github.com/kmscon/kmscon/pull/153 + - Fix typo in README.md by @kdj0c https://github.com/kmscon/kmscon/pull/154 + +## New Contributors +- @martinetd made their first contribution in https://github.com/Aetf/kmscon/pull/156 + +**Full Changelog**: https://github.com/kmscon/kmscon/compare/v9.1.0...v9.2.0 + + CHANGES WITH 9.1.0: * New features! - Add selinux permissions (#109) diff --git a/meson.build b/meson.build index f31a0b6b..97399ddf 100644 --- a/meson.build +++ b/meson.build @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT project('kmscon', 'c', - version: '9.1.0', + version: '9.2.1', license: 'MIT', # meson 0.58: f-string # meson 0.62: dependency libdl From 8a9cb88a7bb57801c1127ccb26e5d5a1f3706ac9 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Thu, 4 Dec 2025 00:10:47 +0100 Subject: [PATCH 06/31] Substitute shell variable from env when starting login That way, you can specify the right TERM value for agetty using $$TERM in the systemd unit file. Signed-off-by: Jocelyn Falempe --- src/pty.c | 7 +++++- src/shl_misc.h | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) diff --git a/src/pty.c b/src/pty.c index 3039db3f..ee0cf01b 100644 --- a/src/pty.c +++ b/src/pty.c @@ -256,6 +256,8 @@ exec_child(const char *term, const char *colorterm, char **argv, { char **env; char **def_argv; + char **argv_parsed; + int ret; if (env_reset) { env = malloc(sizeof(char*)); @@ -292,8 +294,11 @@ exec_child(const char *term, const char *colorterm, char **argv, } else { setenv("TERM_SESSION_TYPE", "fb", 1); } + ret = shl_replace_array_with_env(&argv_parsed, argv); + if (ret) + argv_parsed = argv; - execve(argv[0], argv, environ); + execve(argv_parsed[0], argv_parsed, environ); log_err("failed to exec child %s: %m", argv[0]); diff --git a/src/shl_misc.h b/src/shl_misc.h index b994bd3b..72751ea7 100644 --- a/src/shl_misc.h +++ b/src/shl_misc.h @@ -413,6 +413,66 @@ static inline int shl_split_command_string(const char *arg, char ***out, return 0; } +static inline char *shl_replace_var(char *in) +{ + if (!in) + return NULL; + if (*in != '$') + return in; + in++; + /* if start with $$, remove 1 $ for escaping */ + if (*in == '$') + return in; + return getenv(in); +} + +static inline int shl_replace_array_with_env(char ***out, char **argv) +{ + char **t, *off; + char **nargv; + unsigned int size, i, j, len; + + if (!out || !argv) + return -EINVAL; + + for (len = 0; argv[len]; ++len) + /* empty */ ; + + nargv = malloc(sizeof(*nargv) * (len + 1)); + if (!nargv) + return -EINVAL; + + size = 0; + for (i = 0; i < len; ++i) { + ++size; + nargv[i] = shl_replace_var(argv[i]); + size += strlen(nargv[i]); + } + nargv[len] = NULL; + ++i; + + size += i * sizeof(char*); + + t = malloc(size); + if (!t) { + free(nargv); + return -ENOMEM; + } + *out = t; + + off = (char*)t + i * sizeof(char*); + for (i = 0; i < len; ++i) { + *t++ = off; + for (j = 0; nargv[i][j]; ++j) + *off++ = nargv[i][j]; + *off++ = 0; + } + *t = NULL; + + free(nargv); + return 0; +} + static inline int shl_dup_array_size(char ***out, char **argv, size_t len) { char **t, *off; From bbd427c8fb0a1292f9077224aa223296becfce63 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Thu, 4 Dec 2025 00:15:01 +0100 Subject: [PATCH 07/31] kmscon systemd services: specify TERM for agetty Otherwise agetty will overwrite TERM with vt102 Signed-off-by: Jocelyn Falempe --- scripts/systemd/kmscon.service.in | 2 +- scripts/systemd/kmsconvt@.service.in | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/systemd/kmscon.service.in b/scripts/systemd/kmscon.service.in index ad5600da..ee4ae460 100644 --- a/scripts/systemd/kmscon.service.in +++ b/scripts/systemd/kmscon.service.in @@ -6,7 +6,7 @@ After=systemd-user-sessions.service After=rc-local.service [Service] -ExecStart=@bindir@/kmscon --login -- /sbin/agetty -o '-p -- \\u' --noclear -- - +ExecStart=@bindir@/kmscon --login -- /sbin/agetty -o '-p -- \\u' --noclear -- - $$TERM [Install] WantedBy=multi-user.target diff --git a/scripts/systemd/kmsconvt@.service.in b/scripts/systemd/kmsconvt@.service.in index a496e261..b1e9c3ec 100644 --- a/scripts/systemd/kmsconvt@.service.in +++ b/scripts/systemd/kmsconvt@.service.in @@ -38,7 +38,7 @@ IgnoreOnIsolate=yes ConditionPathExists=/dev/tty0 [Service] -ExecStart=@bindir@/kmscon --vt=%I --seats=seat0 --no-switchvt --login -- /sbin/agetty -o '-p -- \\u' --noclear -- - +ExecStart=@bindir@/kmscon --vt=%I --seats=seat0 --no-switchvt --login -- /sbin/agetty -o '-p -- \\u' --noclear -- - $$TERM UtmpIdentifier=%I TTYPath=/dev/%I TTYReset=yes From 4336f6798293b1810751541c2a6c7a8c6a3fe9b3 Mon Sep 17 00:00:00 2001 From: Anthony Ruhier Date: Fri, 5 Dec 2025 01:01:30 +0100 Subject: [PATCH 08/31] Remove bashism in kmscon-launch-gui.sh \x1B] is not recognized by sh or dash, but should be \033] instead. It makes this script to fail to run a GUI with dash or sh. Example: > sh $ printf "\x1B]setBackground\a" \x1B]setBackground$ $ printf "\033]setBackground\a" $ --- scripts/kmscon-launch-gui.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/kmscon-launch-gui.sh b/scripts/kmscon-launch-gui.sh index 19c2d026..ac3cb8c5 100644 --- a/scripts/kmscon-launch-gui.sh +++ b/scripts/kmscon-launch-gui.sh @@ -11,7 +11,7 @@ if [ -d /sys/class/tty/tty0 ]; then fi if [ "${TERM_PROGRAM}" != "tmux" ]; then - printf "\x1B]setBackground\a" + printf "\033]setBackground\a" else printf "\033Ptmux;\033\033]setBackground\a\033\\" fi @@ -26,7 +26,7 @@ if [ -n "${kms_tty}" ]; then fi if [ "${TERM_PROGRAM}" != "tmux" ]; then - printf "\x1B]setForeground\a" + printf "\033]setForeground\a" else printf "\033Ptmux;\033\033]setForeground\a\033\\" fi From 9a7e140db8c3deefaa42ab7354249964f02d12bb Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 14:28:33 +0100 Subject: [PATCH 09/31] Add a .clang-format to have consistent formating This configuration is close to the current code, and minimize changes. Signed-off-by: Jocelyn Falempe --- .clang-format | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..737cfae3 --- /dev/null +++ b/.clang-format @@ -0,0 +1,17 @@ +BasedOnStyle: LLVM +IndentWidth: 8 +UseTab: Always +BreakBeforeBraces: Linux +AllowShortIfStatementsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Empty +IndentCaseLabels: false +ColumnLimit: 100 +ContinuationIndentWidth: 8 +IncludeCategories: + - Regex: '<.*>' + Priority: -1 + SortPriority: -1 + - Regex: '".*' + Priority: 0 + SortPriority: 0 + From c19a9addda88e0a3b5683a0ab5472abef1d9bd7a Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 14:29:51 +0100 Subject: [PATCH 10/31] Format code with clang-format Signed-off-by: Jocelyn Falempe --- src/conf.c | 176 ++++++++++--------------- src/conf.h | 81 ++++++------ src/eloop.c | 170 ++++++++++-------------- src/eloop.h | 97 ++++++-------- src/font.c | 46 +++---- src/font.h | 38 ++---- src/font_8x16.c | 14 +- src/font_pango.c | 60 ++++----- src/font_rotate.c | 21 ++- src/font_rotate.h | 6 +- src/font_unifont.c | 22 ++-- src/genunifont.c | 23 +--- src/kmscon_conf.c | 190 +++++++++++++-------------- src/kmscon_conf.h | 5 +- src/kmscon_dummy.c | 22 ++-- src/kmscon_dummy.h | 6 +- src/kmscon_main.c | 156 +++++++++------------- src/kmscon_mod_gltex.c | 4 +- src/kmscon_mod_pango.c | 2 +- src/kmscon_mod_unifont.c | 2 +- src/kmscon_seat.c | 226 +++++++++++++------------------- src/kmscon_seat.h | 37 ++---- src/kmscon_terminal.c | 197 ++++++++++++---------------- src/kmscon_terminal.h | 6 +- src/pty.c | 56 ++++---- src/pty.h | 12 +- src/shl_array.h | 13 +- src/shl_dlist.h | 73 ++++------- src/shl_gl.h | 11 +- src/shl_gl_math.c | 7 +- src/shl_gl_shader.c | 37 ++---- src/shl_hashtable.h | 28 ++-- src/shl_hook.h | 47 +++---- src/shl_llog.h | 141 +++++++------------- src/shl_log.c | 177 +++++++++---------------- src/shl_log.h | 108 ++++++--------- src/shl_misc.h | 80 +++++------ src/shl_module.c | 49 +++---- src/shl_module_interface.h | 33 ++--- src/shl_register.h | 59 ++++----- src/shl_ring.h | 6 +- src/text.c | 41 ++---- src/text.h | 56 ++++---- src/text_bbulk.c | 23 ++-- src/text_gltex.c | 100 ++++++-------- src/uterm_drm2d_internal.h | 10 +- src/uterm_drm2d_render.c | 25 ++-- src/uterm_drm2d_video.c | 55 ++++---- src/uterm_drm3d_internal.h | 16 +-- src/uterm_drm3d_render.c | 76 +++++------ src/uterm_drm3d_video.c | 135 +++++++++---------- src/uterm_drm_shared.c | 112 +++++++--------- src/uterm_drm_shared_internal.h | 18 +-- src/uterm_fbdev_internal.h | 10 +- src/uterm_fbdev_render.c | 101 ++++++-------- src/uterm_fbdev_video.c | 110 +++++++--------- src/uterm_input.c | 132 +++++++------------ src/uterm_input.h | 70 ++++------ src/uterm_input_internal.h | 25 +--- src/uterm_input_pointer.c | 27 ++-- src/uterm_input_uxkb.c | 162 ++++++++--------------- src/uterm_mod_drm3d.c | 2 +- src/uterm_monitor.c | 136 ++++++++----------- src/uterm_monitor.h | 15 +-- src/uterm_systemd.c | 10 +- src/uterm_systemd_internal.h | 8 +- src/uterm_video.c | 72 ++++------ src/uterm_video.h | 59 ++++----- src/uterm_video_internal.h | 92 +++++++------ src/uterm_vt.c | 120 ++++++----------- src/uterm_vt.h | 13 +- 71 files changed, 1765 insertions(+), 2610 deletions(-) diff --git a/src/conf.c b/src/conf.c index 890e599a..8ee46a66 100644 --- a/src/conf.c +++ b/src/conf.c @@ -54,8 +54,7 @@ struct conf_ctx { void *mem; }; -int conf_ctx_new(struct conf_ctx **out, const struct conf_option *opts, - size_t onum, void *mem) +int conf_ctx_new(struct conf_ctx **out, const struct conf_option *opts, size_t onum, void *mem) { struct conf_ctx *ctx; size_t size; @@ -70,7 +69,7 @@ int conf_ctx_new(struct conf_ctx **out, const struct conf_option *opts, return -ENOMEM; } memset(ctx, 0, size); - ctx->opts = (void*)((char*)ctx + sizeof(*ctx)); + ctx->opts = (void *)((char *)ctx + sizeof(*ctx)); ctx->onum = onum; ctx->mem = mem; memcpy(ctx->opts, opts, onum * sizeof(*opts)); @@ -186,15 +185,13 @@ int conf_ctx_parse_argv(struct conf_ctx *ctx, int argc, char **argv) short_options = malloc(sizeof(char) * (ctx->onum + 1) * 2); if (!short_options) { - log_error("out of memory to parse cmd-line arguments (%d): %m", - errno); + log_error("out of memory to parse cmd-line arguments (%d): %m", errno); return -ENOMEM; } long_options = malloc(sizeof(struct option) * ctx->onum * 2); if (!long_options) { - log_error("out of memory to parse cmd-line arguments (%d): %m", - errno); + log_error("out of memory to parse cmd-line arguments (%d): %m", errno); free(short_options); return -ENOMEM; } @@ -212,8 +209,7 @@ int conf_ctx_parse_argv(struct conf_ctx *ctx, int argc, char **argv) if (ctx->opts[i].long_name) { /* skip the "no-" prefix */ opt->name = &ctx->opts[i].long_name[3]; - opt->has_arg = !!(ctx->opts[i].type->flags & - CONF_HAS_ARG); + opt->has_arg = !!(ctx->opts[i].type->flags & CONF_HAS_ARG); opt->flag = NULL; opt->val = 100000 + i; ++opt; @@ -232,24 +228,19 @@ int conf_ctx_parse_argv(struct conf_ctx *ctx, int argc, char **argv) opterr = 0; while (1) { - c = getopt_long(argc, argv, short_options, - long_options, NULL); + c = getopt_long(argc, argv, short_options, long_options, NULL); if (c <= 0) { break; } else if (c == ':') { - fprintf(stderr, "Missing argument for: %s\n", - argv[optind - 1]); + fprintf(stderr, "Missing argument for: %s\n", argv[optind - 1]); return -EFAULT; } else if (c == '?') { if (optopt && optopt < 100000) - fprintf(stderr, "Unknown argument: -%c\n", - optopt); + fprintf(stderr, "Unknown argument: -%c\n", optopt); else if (!optopt) - fprintf(stderr, "Unknown argument: %s\n", - argv[optind - 1]); + fprintf(stderr, "Unknown argument: %s\n", argv[optind - 1]); else - fprintf(stderr, "Option takes no arg: %s\n", - argv[optind - 1]); + fprintf(stderr, "Option takes no arg: %s\n", argv[optind - 1]); return -EFAULT; } else if (c < 100000) { for (i = 0; i < ctx->onum; ++i) { @@ -316,16 +307,14 @@ int conf_ctx_parse_argv(struct conf_ctx *ctx, int argc, char **argv) } if (optind < argc) { - fprintf(stderr, "Unparsed remaining args starting with: %s\n", - argv[optind]); + fprintf(stderr, "Unparsed remaining args starting with: %s\n", argv[optind]); return -EFAULT; } return 0; } -static int parse_kv_pair(struct conf_option *opts, size_t len, - const char *key, const char *value) +static int parse_kv_pair(struct conf_option *opts, size_t len, const char *key, const char *value) { unsigned int i; int ret; @@ -356,12 +345,10 @@ static int parse_kv_pair(struct conf_option *opts, size_t len, } if (opt->type->flags & CONF_HAS_ARG && !value) { - log_error("config option '%s' requires an argument", - key); + log_error("config option '%s' requires an argument", key); return -EFAULT; } else if (!(opt->type->flags & CONF_HAS_ARG) && value) { - log_error("config option '%s' does not take arguments", - key); + log_error("config option '%s' does not take arguments", key); return -EFAULT; } @@ -398,8 +385,7 @@ static void strip_spaces(char **buf) *tail-- = 0; } -static int parse_line(struct conf_option *opts, size_t olen, - char **buf, size_t *size) +static int parse_line(struct conf_option *opts, size_t olen, char **buf, size_t *size) { char *key; char *value = NULL; @@ -415,9 +401,7 @@ static int parse_line(struct conf_option *opts, size_t olen, key = line; while (len) { c = *line; - if (c == '\n' || - c == '#' || - c == '=') + if (c == '\n' || c == '#' || c == '=') break; ++line; --len; @@ -443,8 +427,7 @@ static int parse_line(struct conf_option *opts, size_t olen, value = line; while (len) { c = *line; - if (c == '\n' || - c == '#') + if (c == '\n' || c == '#') break; ++line; --len; @@ -474,7 +457,7 @@ static int parse_line(struct conf_option *opts, size_t olen, done: strip_spaces(&key); - + klen = strlen(key); if (klen > 0) { if (value) @@ -496,8 +479,7 @@ static int parse_line(struct conf_option *opts, size_t olen, return 0; } -static int parse_buffer(struct conf_option *opts, size_t len, - char *buf, size_t size) +static int parse_buffer(struct conf_option *opts, size_t len, char *buf, size_t size) { int ret = 0; struct conf_option *o; @@ -526,8 +508,7 @@ static int parse_buffer(struct conf_option *opts, size_t len, /* This reads the file at \path in memory and parses it as if it was given as * command line options. */ -static int conf_parse_file(struct conf_option *opts, size_t len, - const char *path) +static int conf_parse_file(struct conf_option *opts, size_t len, const char *path) { int fd, ret; size_t size, pos; @@ -559,7 +540,8 @@ static int conf_parse_file(struct conf_option *opts, size_t len, if (size - pos < CONF_BUFSIZE) { tmp = realloc(buf, size + CONF_BUFSIZE + 1); if (!tmp) { - log_error("cannot allocate enough memory to parse config file %s (%d): %m", + log_error("cannot allocate enough memory to parse config file %s " + "(%d): %m", path, errno); ret = -ENOMEM; goto out_free; @@ -570,8 +552,7 @@ static int conf_parse_file(struct conf_option *opts, size_t len, ret = read(fd, &buf[pos], CONF_BUFSIZE); if (ret < 0) { - log_error("cannot read from config file %s (%d): %m", - path, errno); + log_error("cannot read from config file %s (%d): %m", path, errno); ret = -EFAULT; goto out_free; } @@ -631,10 +612,10 @@ int conf_ctx_parse_file(struct conf_ctx *ctx, const char *format, ...) static void conf_free_value(struct conf_option *opt) { - if (*(void**)opt->mem) { - if (*(void**)opt->mem != opt->def) - free(*(void**)opt->mem); - *(void**)opt->mem = NULL; + if (*(void **)opt->mem) { + if (*(void **)opt->mem != opt->def) + free(*(void **)opt->mem); + *(void **)opt->mem = NULL; } } @@ -642,24 +623,23 @@ static void conf_free_value(struct conf_option *opt) static void conf_default_bool(struct conf_option *opt) { - *(bool*)opt->mem = (bool)opt->def; + *(bool *)opt->mem = (bool)opt->def; } static void conf_free_bool(struct conf_option *opt) { - *(bool*)opt->mem = false; + *(bool *)opt->mem = false; } static int conf_parse_bool(struct conf_option *opt, bool on, const char *arg) { - *(bool*)opt->mem = on; + *(bool *)opt->mem = on; return 0; } -static int conf_copy_bool(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_bool(struct conf_option *opt, const struct conf_option *src) { - *(bool*)opt->mem = *(bool*)src->mem; + *(bool *)opt->mem = *(bool *)src->mem; return 0; } @@ -675,24 +655,23 @@ const struct conf_type conf_bool = { static int conf_parse_int(struct conf_option *opt, bool on, const char *arg) { - *(int*)opt->mem = atoi(arg); + *(int *)opt->mem = atoi(arg); return 0; } static void conf_free_int(struct conf_option *opt) { - *(int*)opt->mem = 0; + *(int *)opt->mem = 0; } static void conf_default_int(struct conf_option *opt) { - *(int*)opt->mem = (int)(unsigned long)opt->def; + *(int *)opt->mem = (int)(unsigned long)opt->def; } -static int conf_copy_int(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_int(struct conf_option *opt, const struct conf_option *src) { - *(int*)opt->mem = *(int*)src->mem; + *(int *)opt->mem = *(int *)src->mem; return 0; } @@ -708,24 +687,23 @@ const struct conf_type conf_int = { static void conf_default_uint(struct conf_option *opt) { - *(unsigned int*)opt->mem = (unsigned int)(unsigned long)opt->def; + *(unsigned int *)opt->mem = (unsigned int)(unsigned long)opt->def; } static void conf_free_uint(struct conf_option *opt) { - *(unsigned int*)opt->mem = 0; + *(unsigned int *)opt->mem = 0; } static int conf_parse_uint(struct conf_option *opt, bool on, const char *arg) { - *(unsigned int*)opt->mem = atoi(arg); + *(unsigned int *)opt->mem = atoi(arg); return 0; } -static int conf_copy_uint(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_uint(struct conf_option *opt, const struct conf_option *src) { - *(unsigned int*)opt->mem = *(unsigned int*)src->mem; + *(unsigned int *)opt->mem = *(unsigned int *)src->mem; return 0; } @@ -742,7 +720,7 @@ const struct conf_type conf_uint = { static void conf_default_string(struct conf_option *opt) { opt->type->free(opt); - *(void**)opt->mem = opt->def; + *(void **)opt->mem = opt->def; } static int conf_parse_string(struct conf_option *opt, bool on, const char *arg) @@ -752,25 +730,24 @@ static int conf_parse_string(struct conf_option *opt, bool on, const char *arg) return -ENOMEM; opt->type->free(opt); - *(void**)opt->mem = val; + *(void **)opt->mem = val; return 0; } -static int conf_copy_string(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_string(struct conf_option *opt, const struct conf_option *src) { char *val; - if (!*(void**)src->mem) { + if (!*(void **)src->mem) { val = NULL; } else { - val = strdup(*(void**)src->mem); + val = strdup(*(void **)src->mem); if (!val) return -ENOMEM; } opt->type->free(opt); - *(void**)opt->mem = val; + *(void **)opt->mem = val; return 0; } @@ -787,11 +764,10 @@ const struct conf_type conf_string = { static void conf_default_string_list(struct conf_option *opt) { opt->type->free(opt); - *(void**)opt->mem = opt->def; + *(void **)opt->mem = opt->def; } -static int conf_parse_string_list(struct conf_option *opt, bool on, - const char *arg) +static int conf_parse_string_list(struct conf_option *opt, bool on, const char *arg) { int ret; char **list; @@ -801,26 +777,25 @@ static int conf_parse_string_list(struct conf_option *opt, bool on, return ret; opt->type->free(opt); - *(char***)opt->mem = list; + *(char ***)opt->mem = list; return 0; } -static int conf_copy_string_list(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_string_list(struct conf_option *opt, const struct conf_option *src) { int ret; char **t; - if (!(void***)src->mem) { + if (!(void ***)src->mem) { t = NULL; } else { - ret = shl_dup_array(&t, *(char***)src->mem); + ret = shl_dup_array(&t, *(char ***)src->mem); if (ret) return ret; } opt->type->free(opt); - *(char***)opt->mem = t; + *(char ***)opt->mem = t; return 0; } @@ -837,7 +812,7 @@ const struct conf_type conf_string_list = { static void conf_default_grab(struct conf_option *opt) { opt->type->free(opt); - *(void**)opt->mem = opt->def; + *(void **)opt->mem = opt->def; } static void conf_free_grab(struct conf_option *opt) @@ -845,8 +820,8 @@ static void conf_free_grab(struct conf_option *opt) struct conf_grab *grab; unsigned int i; - grab = *(void**)opt->mem; - *(void**)opt->mem = NULL; + grab = *(void **)opt->mem; + *(void **)opt->mem = NULL; if (!grab || grab == opt->def) return; @@ -860,8 +835,7 @@ static void conf_free_grab(struct conf_option *opt) free(grab); } -static int parse_single_grab(char *arg, unsigned int *mods, - uint32_t *keysym, bool allow_mods) +static int parse_single_grab(char *arg, unsigned int *mods, uint32_t *keysym, bool allow_mods) { char *tmp, *start, *end; char buf[128]; @@ -890,8 +864,7 @@ static int parse_single_grab(char *arg, unsigned int *mods, *mods |= SHL_SHIFT_MASK; } else if (!strcasecmp(start, "lock")) { *mods |= SHL_LOCK_MASK; - } else if (!strcasecmp(start, "control") || - !strcasecmp(start, "ctrl")) { + } else if (!strcasecmp(start, "control") || !strcasecmp(start, "ctrl")) { *mods |= SHL_CONTROL_MASK; } else if (!strcasecmp(start, "alt")) { *mods |= SHL_ALT_MASK; @@ -925,8 +898,7 @@ static int parse_single_grab(char *arg, unsigned int *mods, *keysym = xkb_keysym_from_name(start, 0); if (!*keysym) { - *keysym = xkb_keysym_from_name(start, - XKB_KEYSYM_CASE_INSENSITIVE); + *keysym = xkb_keysym_from_name(start, XKB_KEYSYM_CASE_INSENSITIVE); if (!*keysym) { log_error("invalid key '%s'", start); return -EFAULT; @@ -1001,12 +973,10 @@ static int conf_parse_grab(struct conf_option *opt, bool on, const char *arg) k = 0; for (j = 0; j < key_num; ++j) { - ret = parse_single_grab(keys[j], &grab->mods[l], - &grab->keysyms[l][k], + ret = parse_single_grab(keys[j], &grab->mods[l], &grab->keysyms[l][k], j == 0); if (ret < 0) { - log_error("cannot parse grab '%s' in '%s'", - list[i], arg); + log_error("cannot parse grab '%s' in '%s'", list[i], arg); free(keys); goto err_all; } @@ -1023,7 +993,7 @@ static int conf_parse_grab(struct conf_option *opt, bool on, const char *arg) free(list); opt->type->free(opt); - *(void**)opt->mem = grab; + *(void **)opt->mem = grab; return 0; err_all: @@ -1039,18 +1009,17 @@ static int conf_parse_grab(struct conf_option *opt, bool on, const char *arg) return ret; } -static int conf_copy_grab(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_grab(struct conf_option *opt, const struct conf_option *src) { struct conf_grab *grab, *s; int ret; unsigned int i; - s = *(void**)src->mem; + s = *(void **)src->mem; if (!s) { opt->type->free(opt); - *(void**)opt->mem = NULL; + *(void **)opt->mem = NULL; return 0; } @@ -1073,8 +1042,7 @@ static int conf_copy_grab(struct conf_option *opt, ret = -ENOMEM; goto err_grab; } - memcpy(grab->num_syms, s->num_syms, - sizeof(*grab->num_syms) * grab->num); + memcpy(grab->num_syms, s->num_syms, sizeof(*grab->num_syms) * grab->num); grab->keysyms = malloc(sizeof(*grab->keysyms) * grab->num); if (!grab->keysyms) { @@ -1085,18 +1053,16 @@ static int conf_copy_grab(struct conf_option *opt, } for (i = 0; i < grab->num; ++i) { - grab->keysyms[i] = malloc(sizeof(*s->keysyms[i]) * - s->num_syms[i]); + grab->keysyms[i] = malloc(sizeof(*s->keysyms[i]) * s->num_syms[i]); if (!grab->keysyms[i]) { ret = -ENOMEM; goto err_all; } - memcpy(grab->keysyms[i], s->keysyms[i], - sizeof(*s->keysyms[i]) * s->num_syms[i]); + memcpy(grab->keysyms[i], s->keysyms[i], sizeof(*s->keysyms[i]) * s->num_syms[i]); } opt->type->free(opt); - *(void**)opt->mem = grab; + *(void **)opt->mem = grab; return 0; err_all: diff --git a/src/conf.h b/src/conf.h index 0f24ce49..c1a40d04 100644 --- a/src/conf.h +++ b/src/conf.h @@ -44,14 +44,14 @@ struct conf_ctx; /* Conf Types */ -#define CONF_HAS_ARG 0x0001 +#define CONF_HAS_ARG 0x0001 struct conf_type { unsigned int flags; - void (*set_default) (struct conf_option *opt); - void (*free) (struct conf_option *opt); - int (*parse) (struct conf_option *opt, bool on, const char *arg); - int (*copy) (struct conf_option *opt, const struct conf_option *src); + void (*set_default)(struct conf_option *opt); + void (*free)(struct conf_option *opt); + int (*parse)(struct conf_option *opt, bool on, const char *arg); + int (*copy)(struct conf_option *opt, const struct conf_option *src); }; /* @@ -107,21 +107,19 @@ struct conf_grab { uint32_t **keysyms; }; -static inline bool conf_grab_matches(const struct conf_grab *grab, - unsigned int ev_mods, - unsigned int ev_num_syms, - const uint32_t *ev_syms) +static inline bool conf_grab_matches(const struct conf_grab *grab, unsigned int ev_mods, + unsigned int ev_num_syms, const uint32_t *ev_syms) { - return shl_grab_has_match(ev_mods, ev_num_syms, ev_syms, - grab->num, grab->mods, grab->num_syms, - grab->keysyms); + return shl_grab_has_match(ev_mods, ev_num_syms, ev_syms, grab->num, grab->mods, + grab->num_syms, grab->keysyms); } -#define CONF_SINGLE_GRAB(_mods, _sym) { \ - .num = 1, \ - .mods = (unsigned int[]) { (_mods) }, \ - .num_syms = (unsigned int[]) { 1 }, \ - .keysyms = (uint32_t*[]) { (uint32_t[]) { (_sym) } }, \ +#define CONF_SINGLE_GRAB(_mods, _sym) \ + { \ + .num = 1, \ + .mods = (unsigned int[]){(_mods)}, \ + .num_syms = (unsigned int[]){1}, \ + .keysyms = (uint32_t *[]){(uint32_t[]){(_sym)}}, \ } /* @@ -134,8 +132,7 @@ static inline bool conf_grab_matches(const struct conf_grab *grab, struct conf_ctx; -int conf_ctx_new(struct conf_ctx **out, const struct conf_option *opts, - size_t onum, void *mem); +int conf_ctx_new(struct conf_ctx **out, const struct conf_option *opts, size_t onum, void *mem); void conf_ctx_free(struct conf_ctx *ctx); void conf_ctx_reset(struct conf_ctx *ctx); void *conf_ctx_get_mem(struct conf_ctx *ctx); @@ -151,52 +148,54 @@ int conf_ctx_parse_file(struct conf_ctx *ctx, const char *format, ...); * this structure. */ -#define CONF_LOCKED 0x0001 +#define CONF_LOCKED 0x0001 struct conf_option { unsigned int flags; char short_name; const char *long_name; const struct conf_type *type; - int (*aftercheck) (struct conf_option *opt, int argc, - char **argv, int idx); - int (*copy) (struct conf_option *opt, const struct conf_option *src); - int (*file) (struct conf_option *opt, bool on, const char *arg); + int (*aftercheck)(struct conf_option *opt, int argc, char **argv, int idx); + int (*copy)(struct conf_option *opt, const struct conf_option *src); + int (*file)(struct conf_option *opt, bool on, const char *arg); void *mem; void *def; }; -#define CONF_OPTION(_flags, _short, _long, _type, _aftercheck, _copy, _file, _mem, _def) \ - { _flags, _short, "no-" _long, _type, _aftercheck, _copy, _file, _mem, _def } +#define CONF_OPTION(_flags, _short, _long, _type, _aftercheck, _copy, _file, _mem, _def) \ + {_flags, _short, "no-" _long, _type, _aftercheck, _copy, _file, _mem, _def} -#define CONF_OPTION_BOOL_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ - CONF_OPTION(0, _short, _long, &conf_bool, _aftercheck, _copy, _file, _mem, (void*)(long)_def) -#define CONF_OPTION_BOOL(_short, _long, _mem, _def) \ +#define CONF_OPTION_BOOL_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ + CONF_OPTION(0, _short, _long, &conf_bool, _aftercheck, _copy, _file, _mem, \ + (void *)(long)_def) +#define CONF_OPTION_BOOL(_short, _long, _mem, _def) \ CONF_OPTION_BOOL_FULL(_short, _long, NULL, NULL, NULL, _mem, _def) -#define CONF_OPTION_INT_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ - CONF_OPTION(0, _short, _long, &conf_int, _aftercheck, _copy, _file, _mem, (void*)(long)_def) -#define CONF_OPTION_INT(_short, _long, _mem, _def) \ +#define CONF_OPTION_INT_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ + CONF_OPTION(0, _short, _long, &conf_int, _aftercheck, _copy, _file, _mem, \ + (void *)(long)_def) +#define CONF_OPTION_INT(_short, _long, _mem, _def) \ CONF_OPTION_INT_FULL(_short, _long, NULL, NULL, NULL, _mem, _def) -#define CONF_OPTION_UINT_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ - CONF_OPTION(0, _short, _long, &conf_uint, _aftercheck, _copy, _file, _mem, (void*)(unsigned long)_def) -#define CONF_OPTION_UINT(_short, _long, _mem, _def) \ +#define CONF_OPTION_UINT_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ + CONF_OPTION(0, _short, _long, &conf_uint, _aftercheck, _copy, _file, _mem, \ + (void *)(unsigned long)_def) +#define CONF_OPTION_UINT(_short, _long, _mem, _def) \ CONF_OPTION_UINT_FULL(_short, _long, NULL, NULL, NULL, _mem, _def) -#define CONF_OPTION_STRING_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ +#define CONF_OPTION_STRING_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ CONF_OPTION(0, _short, _long, &conf_string, _aftercheck, _copy, _file, _mem, _def) -#define CONF_OPTION_STRING(_short, _long, _mem, _def) \ +#define CONF_OPTION_STRING(_short, _long, _mem, _def) \ CONF_OPTION_STRING_FULL(_short, _long, NULL, NULL, NULL, _mem, _def) -#define CONF_OPTION_STRING_LIST_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ +#define CONF_OPTION_STRING_LIST_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ CONF_OPTION(0, _short, _long, &conf_string_list, _aftercheck, _copy, _file, _mem, _def) -#define CONF_OPTION_STRING_LIST(_short, _long, _mem, _def) \ +#define CONF_OPTION_STRING_LIST(_short, _long, _mem, _def) \ CONF_OPTION_STRING_LIST_FULL(_short, _long, NULL, NULL, NULL, _mem, _def) -#define CONF_OPTION_GRAB_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ +#define CONF_OPTION_GRAB_FULL(_short, _long, _aftercheck, _copy, _file, _mem, _def) \ CONF_OPTION(0, _short, _long, &conf_grab, _aftercheck, _copy, _file, _mem, _def) -#define CONF_OPTION_GRAB(_short, _long, _mem, _def) \ +#define CONF_OPTION_GRAB(_short, _long, _mem, _def) \ CONF_OPTION_GRAB_FULL(_short, _long, NULL, NULL, NULL, _mem, _def) #endif /* CONF_CONF_H */ diff --git a/src/eloop.c b/src/eloop.c index b3f4a910..337f210d 100644 --- a/src/eloop.c +++ b/src/eloop.c @@ -329,8 +329,7 @@ struct ev_signal_shared { * can use signalfd only. */ -static void sig_child(struct ev_eloop *loop, struct signalfd_siginfo *info, - void *data) +static void sig_child(struct ev_eloop *loop, struct signalfd_siginfo *info, void *data) { pid_t pid; int status; @@ -346,14 +345,12 @@ static void sig_child(struct ev_eloop *loop, struct signalfd_siginfo *info, break; } else if (WIFEXITED(status)) { if (WEXITSTATUS(status) != 0) - llog_debug(loop, "child %d exited with status %d", - pid, WEXITSTATUS(status)); + llog_debug(loop, "child %d exited with status %d", pid, + WEXITSTATUS(status)); else - llog_debug(loop, "child %d exited successfully", - pid); + llog_debug(loop, "child %d exited successfully", pid); } else if (WIFSIGNALED(status)) { - llog_debug(loop, "child %d exited by signal %d", pid, - WTERMSIG(status)); + llog_debug(loop, "child %d exited by signal %d", pid, WTERMSIG(status)); } d.pid = pid; @@ -391,8 +388,7 @@ static void shared_signal_cb(struct ev_fd *fd, int mask, void *data) * * Returns: 0 on success, otherwise negative error code */ -static int signal_new(struct ev_signal_shared **out, struct ev_eloop *loop, - int signum) +static int signal_new(struct ev_signal_shared **out, struct ev_eloop *loop, int signum) { sigset_t mask; int ret, fd; @@ -421,8 +417,7 @@ static int signal_new(struct ev_signal_shared **out, struct ev_eloop *loop, goto err_hook; } - ret = ev_eloop_new_fd(loop, &sig->fd, fd, EV_READABLE, - shared_signal_cb, sig); + ret = ev_eloop_new_fd(loop, &sig->fd, fd, EV_READABLE, shared_signal_cb, sig); if (ret) goto err_sig; @@ -507,8 +502,7 @@ static void eloop_event(struct ev_fd *fd, int mask, void *data) llog_warn(eloop, "HUP/ERR on eloop source"); } -static int write_eventfd(llog_submit_t llog, void *llog_data, int fd, - uint64_t val) +static int write_eventfd(llog_submit_t llog, void *llog_data, int fd, uint64_t val) { int ret; @@ -516,25 +510,22 @@ static int write_eventfd(llog_submit_t llog, void *llog_data, int fd, return llog_dEINVAL(llog, llog_data); if (val == 0xffffffffffffffffULL) { - llog_dwarning(llog, llog_data, - "increasing counter with invalid value %" PRIu64, + llog_dwarning(llog, llog_data, "increasing counter with invalid value %" PRIu64, val); - return -EINVAL;; + return -EINVAL; + ; } ret = write(fd, &val, sizeof(val)); if (ret < 0) { if (errno == EAGAIN) - llog_dwarning(llog, llog_data, - "eventfd overflow while writing %" PRIu64, + llog_dwarning(llog, llog_data, "eventfd overflow while writing %" PRIu64, val); else - llog_dwarning(llog, llog_data, - "eventfd write error (%d): %m", errno); + llog_dwarning(llog, llog_data, "eventfd write error (%d): %m", errno); return -EFAULT; } else if (ret != sizeof(val)) { - llog_dwarning(llog, llog_data, - "wrote %d bytes instead of 8 to eventdfd", ret); + llog_dwarning(llog, llog_data, "wrote %d bytes instead of 8 to eventdfd", ret); return -EFAULT; } @@ -557,22 +548,19 @@ static void eloop_idle_event(struct ev_eloop *loop, unsigned int mask) ret = read(loop->idle_fd, &val, sizeof(val)); if (ret < 0) { if (errno != EAGAIN) { - llog_warning(loop, "reading eventfd failed (%d): %m", - errno); + llog_warning(loop, "reading eventfd failed (%d): %m", errno); goto err_out; } } else if (ret == 0) { llog_warning(loop, "EOF on eventfd"); goto err_out; } else if (ret != sizeof(val)) { - llog_warning(loop, "read %d bytes instead of 8 on eventfd", - ret); + llog_warning(loop, "read %d bytes instead of 8 on eventfd", ret); goto err_out; } else if (val > 0) { shl_hook_call(loop->idlers, loop, NULL); if (shl_hook_num(loop->idlers) > 0) - write_eventfd(loop->llog, loop->llog_data, - loop->idle_fd, 1); + write_eventfd(loop->llog, loop->llog_data, loop->idle_fd, 1); } return; @@ -580,8 +568,8 @@ static void eloop_idle_event(struct ev_eloop *loop, unsigned int mask) err_out: ret = epoll_ctl(loop->efd, EPOLL_CTL_DEL, loop->idle_fd, NULL); if (ret) - llog_warning(loop, "cannot remove fd %d from epollset (%d): %m", - loop->idle_fd, errno); + llog_warning(loop, "cannot remove fd %d from epollset (%d): %m", loop->idle_fd, + errno); } /** @@ -616,8 +604,7 @@ int ev_eloop_new(struct ev_eloop **out, ev_log_t log, void *log_data) shl_dlist_init(&loop->sig_list); loop->cur_fds_size = 32; - loop->cur_fds = malloc(sizeof(struct epoll_event) * - loop->cur_fds_size); + loop->cur_fds = malloc(sizeof(struct epoll_event) * loop->cur_fds_size); if (!loop->cur_fds) { ret = llog_ENOMEM(loop); goto err_free; @@ -646,8 +633,8 @@ int ev_eloop_new(struct ev_eloop **out, ev_log_t log, void *log_data) goto err_posts; } - ret = ev_fd_new(&loop->fd, loop->efd, EV_READABLE, eloop_event, loop, - loop->llog, loop->llog_data); + ret = ev_fd_new(&loop->fd, loop->efd, EV_READABLE, eloop_event, loop, loop->llog, + loop->llog_data); if (ret) goto err_close; @@ -664,8 +651,7 @@ int ev_eloop_new(struct ev_eloop **out, ev_log_t log, void *log_data) ret = epoll_ctl(loop->efd, EPOLL_CTL_ADD, loop->idle_fd, &ep); if (ret) { - llog_warning(loop, "cannot add fd %d to epoll set (%d): %m", - loop->idle_fd, errno); + llog_warning(loop, "cannot add fd %d to epoll set (%d): %m", loop->idle_fd, errno); ret = -EFAULT; goto err_idle_fd; } @@ -738,16 +724,14 @@ void ev_eloop_unref(struct ev_eloop *loop) ev_eloop_unregister_signal_cb(loop, SIGCHLD, sig_child, loop); while (loop->sig_list.next != &loop->sig_list) { - sig = shl_dlist_entry(loop->sig_list.next, - struct ev_signal_shared, - list); + sig = shl_dlist_entry(loop->sig_list.next, struct ev_signal_shared, list); signal_free(sig); } ret = epoll_ctl(loop->efd, EPOLL_CTL_DEL, loop->idle_fd, NULL); if (ret) - llog_warning(loop, "cannot remove fd %d from epollset (%d): %m", - loop->idle_fd, errno); + llog_warning(loop, "cannot remove fd %d from epollset (%d): %m", loop->idle_fd, + errno); close(loop->idle_fd); ev_fd_unref(loop->fd); @@ -840,10 +824,7 @@ int ev_eloop_dispatch(struct ev_eloop *loop, int timeout) shl_hook_call(loop->pres, loop, NULL); - count = epoll_wait(loop->efd, - loop->cur_fds, - loop->cur_fds_size, - timeout); + count = epoll_wait(loop->efd, loop->cur_fds, loop->cur_fds_size, timeout); if (count < 0) { if (errno == EINTR) { ret = 0; @@ -875,11 +856,10 @@ int ev_eloop_dispatch(struct ev_eloop *loop, int timeout) } if (count == loop->cur_fds_size) { - ep = realloc(loop->cur_fds, sizeof(struct epoll_event) * - loop->cur_fds_size * 2); + ep = realloc(loop->cur_fds, sizeof(struct epoll_event) * loop->cur_fds_size * 2); if (!ep) { llog_warning(loop, "cannot reallocate dispatch cache to size %zu", - loop->cur_fds_size * 2); + loop->cur_fds_size * 2); } else { loop->cur_fds = ep; loop->cur_fds_size *= 2; @@ -1113,8 +1093,8 @@ void ev_eloop_rm_eloop(struct ev_eloop *rm) * Returns: 0 on success, otherwise negative error code */ SHL_EXPORT -int ev_fd_new(struct ev_fd **out, int rfd, int mask, ev_fd_cb cb, void *data, - ev_log_t log, void *log_data) +int ev_fd_new(struct ev_fd **out, int rfd, int mask, ev_fd_cb cb, void *data, ev_log_t log, + void *log_data) { struct ev_fd *fd; @@ -1195,8 +1175,7 @@ static int fd_epoll_add(struct ev_fd *fd) ret = epoll_ctl(fd->loop->efd, EPOLL_CTL_ADD, fd->fd, &ep); if (ret) { - llog_warning(fd, "cannot add fd %d to epoll set (%d): %m", - fd->fd, errno); + llog_warning(fd, "cannot add fd %d to epoll set (%d): %m", fd->fd, errno); return -EFAULT; } @@ -1212,8 +1191,7 @@ static void fd_epoll_remove(struct ev_fd *fd) ret = epoll_ctl(fd->loop->efd, EPOLL_CTL_DEL, fd->fd, NULL); if (ret && errno != EBADF) - llog_warning(fd, "cannot remove fd %d from epoll set (%d): %m", - fd->fd, errno); + llog_warning(fd, "cannot remove fd %d from epoll set (%d): %m", fd->fd, errno); } static int fd_epoll_update(struct ev_fd *fd) @@ -1233,10 +1211,9 @@ static int fd_epoll_update(struct ev_fd *fd) ep.events |= EPOLLET; ep.data.ptr = fd; - ret = epoll_ctl(fd->loop->efd, EPOLL_CTL_MOD, fd->fd, &ep); + ret = epoll_ctl(fd->loop->efd, EPOLL_CTL_MOD, fd->fd, &ep); if (ret) { - llog_warning(fd, "cannot update epoll fd %d (%d): %m", - fd->fd, errno); + llog_warning(fd, "cannot update epoll fd %d (%d): %m", fd->fd, errno); return -EFAULT; } @@ -1388,8 +1365,8 @@ int ev_fd_update(struct ev_fd *fd, int mask) * Returns: 0 on success, otherwise negative error code */ SHL_EXPORT -int ev_eloop_new_fd(struct ev_eloop *loop, struct ev_fd **out, int rfd, - int mask, ev_fd_cb cb, void *data) +int ev_eloop_new_fd(struct ev_eloop *loop, struct ev_fd **out, int rfd, int mask, ev_fd_cb cb, + void *data) { struct ev_fd *fd; int ret; @@ -1514,8 +1491,7 @@ static int timer_drain(struct ev_timer *timer, uint64_t *out) if (errno == EAGAIN) { return 0; } else { - llog_warning(timer, "cannot read timerfd (%d): %m", - errno); + llog_warning(timer, "cannot read timerfd (%d): %m", errno); return errno; } } else if (len == 0) { @@ -1578,8 +1554,8 @@ static const struct itimerspec ev_timer_zero; * Returns: 0 on success, negative error on failure */ SHL_EXPORT -int ev_timer_new(struct ev_timer **out, const struct itimerspec *spec, - ev_timer_cb cb, void *data, ev_log_t log, void *log_data) +int ev_timer_new(struct ev_timer **out, const struct itimerspec *spec, ev_timer_cb cb, void *data, + ev_log_t log, void *log_data) { struct ev_timer *timer; int ret; @@ -1615,8 +1591,8 @@ int ev_timer_new(struct ev_timer **out, const struct itimerspec *spec, goto err_close; } - ret = ev_fd_new(&timer->efd, timer->fd, EV_READABLE, timer_cb, timer, - timer->llog, timer->llog_data); + ret = ev_fd_new(&timer->efd, timer->fd, EV_READABLE, timer_cb, timer, timer->llog, + timer->llog_data); if (ret) goto err_close; @@ -1817,9 +1793,8 @@ int ev_timer_drain(struct ev_timer *timer, uint64_t *expirations) * Returns: 0 on success, negative error code on failure. */ SHL_EXPORT -int ev_eloop_new_timer(struct ev_eloop *loop, struct ev_timer **out, - const struct itimerspec *spec, ev_timer_cb cb, - void *data) +int ev_eloop_new_timer(struct ev_eloop *loop, struct ev_timer **out, const struct itimerspec *spec, + ev_timer_cb cb, void *data) { struct ev_timer *timer; int ret; @@ -1959,8 +1934,8 @@ static void counter_event(struct ev_fd *fd, int mask, void *data) * Returns: 0 on success, negative error code on failure. */ SHL_EXPORT -int ev_counter_new(struct ev_counter **out, ev_counter_cb cb, void *data, - ev_log_t log, void *log_data) +int ev_counter_new(struct ev_counter **out, ev_counter_cb cb, void *data, ev_log_t log, + void *log_data) { struct ev_counter *cnt; int ret; @@ -1985,8 +1960,8 @@ int ev_counter_new(struct ev_counter **out, ev_counter_cb cb, void *data, goto err_free; } - ret = ev_fd_new(&cnt->efd, cnt->fd, EV_READABLE, counter_event, cnt, - cnt->llog, cnt->llog_data); + ret = ev_fd_new(&cnt->efd, cnt->fd, EV_READABLE, counter_event, cnt, cnt->llog, + cnt->llog_data); if (ret) goto err_close; @@ -2111,8 +2086,7 @@ bool ev_counter_is_bound(struct ev_counter *cnt) * object. */ SHL_EXPORT -void ev_counter_set_cb_data(struct ev_counter *cnt, ev_counter_cb cb, - void *data) +void ev_counter_set_cb_data(struct ev_counter *cnt, ev_counter_cb cb, void *data) { if (!cnt) return; @@ -2151,8 +2125,8 @@ int ev_counter_inc(struct ev_counter *cnt, uint64_t val) * Returns: 0 on success, negative error code on failure. */ SHL_EXPORT -int ev_eloop_new_counter(struct ev_eloop *eloop, struct ev_counter **out, - ev_counter_cb cb, void *data) +int ev_eloop_new_counter(struct ev_eloop *eloop, struct ev_counter **out, ev_counter_cb cb, + void *data) { int ret; struct ev_counter *cnt; @@ -2245,8 +2219,8 @@ void ev_eloop_rm_counter(struct ev_counter *cnt) * Returns: 0 on success, negative error code on failure. */ SHL_EXPORT -int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum, - ev_signal_shared_cb cb, void *data) +int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum, ev_signal_shared_cb cb, + void *data) { struct ev_signal_shared *sig = NULL; int ret; @@ -2257,7 +2231,8 @@ int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum, if (signum < 0 || !cb) return llog_EINVAL(loop); - shl_dlist_for_each(iter, &loop->sig_list) { + shl_dlist_for_each(iter, &loop->sig_list) + { sig = shl_dlist_entry(iter, struct ev_signal_shared, list); if (sig->signum == signum) break; @@ -2292,8 +2267,8 @@ int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum, * removed. It doesn't matter which callback is removed as both are identical. */ SHL_EXPORT -void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum, - ev_signal_shared_cb cb, void *data) +void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum, ev_signal_shared_cb cb, + void *data) { struct ev_signal_shared *sig; struct shl_dlist *iter; @@ -2301,7 +2276,8 @@ void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum, if (!loop) return; - shl_dlist_for_each(iter, &loop->sig_list) { + shl_dlist_for_each(iter, &loop->sig_list) + { sig = shl_dlist_entry(iter, struct ev_signal_shared, list); if (sig->signum == signum) { shl_hook_rm_cast(sig->hook, cb, data); @@ -2323,8 +2299,7 @@ void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum, */ SHL_EXPORT -int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb, - void *data) +int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb, void *data) { int ret; bool empty; @@ -2338,8 +2313,7 @@ int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb, return ret; if (empty) { - ret = ev_eloop_register_signal_cb(loop, SIGCHLD, sig_child, - loop); + ret = ev_eloop_register_signal_cb(loop, SIGCHLD, sig_child, loop); if (ret) { shl_hook_rm_cast(loop->chlds, cb, data); return ret; @@ -2350,8 +2324,7 @@ int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb, } SHL_EXPORT -void ev_eloop_unregister_child_cb(struct ev_eloop *loop, ev_child_cb cb, - void *data) +void ev_eloop_unregister_child_cb(struct ev_eloop *loop, ev_child_cb cb, void *data) { if (!loop || !shl_hook_num(loop->chlds)) return; @@ -2382,8 +2355,7 @@ void ev_eloop_unregister_child_cb(struct ev_eloop *loop, ev_child_cb cb, * Returns: 0 on success, negative error code on failure. */ SHL_EXPORT -int ev_eloop_register_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data, unsigned int flags) +int ev_eloop_register_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data, unsigned int flags) { int ret; bool os = flags & EV_ONESHOT; @@ -2422,8 +2394,8 @@ int ev_eloop_register_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, * they are identical. */ SHL_EXPORT -void ev_eloop_unregister_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data, unsigned int flags) +void ev_eloop_unregister_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data, + unsigned int flags) { if (!eloop || (flags & ~EV_IDLE_ALL)) return; @@ -2455,8 +2427,7 @@ void ev_eloop_unregister_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, * Returns: 0 on success, negative error code on failure. */ SHL_EXPORT -int ev_eloop_register_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data) +int ev_eloop_register_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data) { if (!eloop) return -EINVAL; @@ -2476,8 +2447,7 @@ int ev_eloop_register_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, * they are identical. */ SHL_EXPORT -void ev_eloop_unregister_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data) +void ev_eloop_unregister_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data) { if (!eloop) return; @@ -2506,8 +2476,7 @@ void ev_eloop_unregister_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, * Returns: 0 on success, negative error code on failure. */ SHL_EXPORT -int ev_eloop_register_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data) +int ev_eloop_register_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data) { if (!eloop) return -EINVAL; @@ -2527,8 +2496,7 @@ int ev_eloop_register_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, * they are identical. */ SHL_EXPORT -void ev_eloop_unregister_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data) +void ev_eloop_unregister_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data) { if (!eloop) return; diff --git a/src/eloop.h b/src/eloop.h index 92cb91f5..c0e0c14c 100644 --- a/src/eloop.h +++ b/src/eloop.h @@ -61,14 +61,8 @@ struct ev_counter; * This is the type of a logging callback function. You can always pass NULL * instead of such a function to disable logging. */ -typedef void (*ev_log_t) (void *data, - const char *file, - int line, - const char *func, - const char *subs, - unsigned int sev, - const char *format, - va_list args); +typedef void (*ev_log_t)(void *data, const char *file, int line, const char *func, const char *subs, + unsigned int sev, const char *format, va_list args); /** * ev_fd_cb: @@ -78,7 +72,7 @@ typedef void (*ev_log_t) (void *data, * * This is the callback-type for file-descriptor event sources. */ -typedef void (*ev_fd_cb) (struct ev_fd *fd, int mask, void *data); +typedef void (*ev_fd_cb)(struct ev_fd *fd, int mask, void *data); /** * ev_timer_cb: @@ -89,8 +83,7 @@ typedef void (*ev_fd_cb) (struct ev_fd *fd, int mask, void *data); * This is the callback-type for timer event sources. If the process was too * busy to be woken up as fast as possible, then @num may be bigger than 1. */ -typedef void (*ev_timer_cb) - (struct ev_timer *timer, uint64_t num, void *data); +typedef void (*ev_timer_cb)(struct ev_timer *timer, uint64_t num, void *data); /** * ev_counter_cb: @@ -102,8 +95,7 @@ typedef void (*ev_timer_cb) * may be bigger if the timer was increased multiple times or by bigger values. * The counter is reset to 0 before this callback is called. */ -typedef void (*ev_counter_cb) - (struct ev_counter *cnt, uint64_t num, void *data); +typedef void (*ev_counter_cb)(struct ev_counter *cnt, uint64_t num, void *data); /** * ev_signal_shared_cb: @@ -113,8 +105,8 @@ typedef void (*ev_counter_cb) * * This is the callback-type for shared signal events. */ -typedef void (*ev_signal_shared_cb) - (struct ev_eloop *eloop, struct signalfd_siginfo *info, void *data); +typedef void (*ev_signal_shared_cb)(struct ev_eloop *eloop, struct signalfd_siginfo *info, + void *data); /** * ev_child_data: @@ -137,8 +129,7 @@ struct ev_child_data { * * This is the callback-type for child-reaper events. */ -typedef void (*ev_child_cb) - (struct ev_eloop *eloop, struct ev_child_data *chld, void *data); +typedef void (*ev_child_cb)(struct ev_eloop *eloop, struct ev_child_data *chld, void *data); /** * ev_idle_cb: @@ -148,7 +139,7 @@ typedef void (*ev_child_cb) * * This is the callback-type for idle-source events. */ -typedef void (*ev_idle_cb) (struct ev_eloop *eloop, void *unused, void *data); +typedef void (*ev_idle_cb)(struct ev_eloop *eloop, void *unused, void *data); /** * ev_eloop_flags: @@ -190,8 +181,8 @@ void ev_eloop_rm_eloop(struct ev_eloop *rm); /* fd sources */ -int ev_fd_new(struct ev_fd **out, int fd, int mask, ev_fd_cb cb, void *data, - ev_log_t log, void *log_data); +int ev_fd_new(struct ev_fd **out, int fd, int mask, ev_fd_cb cb, void *data, ev_log_t log, + void *log_data); void ev_fd_ref(struct ev_fd *fd); void ev_fd_unref(struct ev_fd *fd); @@ -202,15 +193,15 @@ bool ev_fd_is_bound(struct ev_fd *fd); void ev_fd_set_cb_data(struct ev_fd *fd, ev_fd_cb cb, void *data); int ev_fd_update(struct ev_fd *fd, int mask); -int ev_eloop_new_fd(struct ev_eloop *loop, struct ev_fd **out, int rfd, - int mask, ev_fd_cb cb, void *data); +int ev_eloop_new_fd(struct ev_eloop *loop, struct ev_fd **out, int rfd, int mask, ev_fd_cb cb, + void *data); int ev_eloop_add_fd(struct ev_eloop *loop, struct ev_fd *fd); void ev_eloop_rm_fd(struct ev_fd *fd); /* timer sources */ -int ev_timer_new(struct ev_timer **out, const struct itimerspec *spec, - ev_timer_cb cb, void *data, ev_log_t log, void *log_data); +int ev_timer_new(struct ev_timer **out, const struct itimerspec *spec, ev_timer_cb cb, void *data, + ev_log_t log, void *log_data); void ev_timer_ref(struct ev_timer *timer); void ev_timer_unref(struct ev_timer *timer); @@ -222,16 +213,15 @@ void ev_timer_set_cb_data(struct ev_timer *timer, ev_timer_cb cb, void *data); int ev_timer_update(struct ev_timer *timer, const struct itimerspec *spec); int ev_timer_drain(struct ev_timer *timer, uint64_t *expirations); -int ev_eloop_new_timer(struct ev_eloop *loop, struct ev_timer **out, - const struct itimerspec *spec, ev_timer_cb cb, - void *data); +int ev_eloop_new_timer(struct ev_eloop *loop, struct ev_timer **out, const struct itimerspec *spec, + ev_timer_cb cb, void *data); int ev_eloop_add_timer(struct ev_eloop *loop, struct ev_timer *timer); void ev_eloop_rm_timer(struct ev_timer *timer); /* counter sources */ -int ev_counter_new(struct ev_counter **out, ev_counter_cb, void *data, - ev_log_t log, void *log_data); +int ev_counter_new(struct ev_counter **out, ev_counter_cb, void *data, ev_log_t log, + void *log_data); void ev_counter_ref(struct ev_counter *cnt); void ev_counter_unref(struct ev_counter *cnt); @@ -239,55 +229,48 @@ int ev_counter_enable(struct ev_counter *cnt); void ev_counter_disable(struct ev_counter *cnt); bool ev_counter_is_enabled(struct ev_counter *cnt); bool ev_counter_is_bound(struct ev_counter *cnt); -void ev_counter_set_cb_data(struct ev_counter *cnt, ev_counter_cb cb, - void *data); +void ev_counter_set_cb_data(struct ev_counter *cnt, ev_counter_cb cb, void *data); int ev_counter_inc(struct ev_counter *cnt, uint64_t val); -int ev_eloop_new_counter(struct ev_eloop *eloop, struct ev_counter **out, - ev_counter_cb cb, void *data); +int ev_eloop_new_counter(struct ev_eloop *eloop, struct ev_counter **out, ev_counter_cb cb, + void *data); int ev_eloop_add_counter(struct ev_eloop *eloop, struct ev_counter *cnt); void ev_eloop_rm_counter(struct ev_counter *cnt); /* signal sources */ -int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum, - ev_signal_shared_cb cb, void *data); -void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum, - ev_signal_shared_cb cb, void *data); +int ev_eloop_register_signal_cb(struct ev_eloop *loop, int signum, ev_signal_shared_cb cb, + void *data); +void ev_eloop_unregister_signal_cb(struct ev_eloop *loop, int signum, ev_signal_shared_cb cb, + void *data); /* child reaper sources */ -int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb, - void *data); -void ev_eloop_unregister_child_cb(struct ev_eloop *loop, ev_child_cb cb, - void *data); +int ev_eloop_register_child_cb(struct ev_eloop *loop, ev_child_cb cb, void *data); +void ev_eloop_unregister_child_cb(struct ev_eloop *loop, ev_child_cb cb, void *data); /* idle sources */ enum ev_idle_flags { - EV_NORMAL = 0x00, - EV_ONESHOT = 0x01, - EV_SINGLE = 0x02, - EV_IDLE_ALL = EV_ONESHOT | EV_SINGLE, + EV_NORMAL = 0x00, + EV_ONESHOT = 0x01, + EV_SINGLE = 0x02, + EV_IDLE_ALL = EV_ONESHOT | EV_SINGLE, }; -int ev_eloop_register_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data, unsigned int flags); -void ev_eloop_unregister_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data, unsigned int flags); +int ev_eloop_register_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data, + unsigned int flags); +void ev_eloop_unregister_idle_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data, + unsigned int flags); /* pre dispatch callbacks */ -int ev_eloop_register_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data); -void ev_eloop_unregister_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data); +int ev_eloop_register_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data); +void ev_eloop_unregister_pre_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data); /* post dispatch callbacks */ -int ev_eloop_register_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data); -void ev_eloop_unregister_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, - void *data); +int ev_eloop_register_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data); +void ev_eloop_unregister_post_cb(struct ev_eloop *eloop, ev_idle_cb cb, void *data); #endif /* EV_ELOOP_H */ diff --git a/src/font.c b/src/font.c index cb7de85f..977f0ff9 100644 --- a/src/font.c +++ b/src/font.c @@ -57,10 +57,10 @@ #include #include #include "font.h" -#include "shl_module.h" #include "shl_dlist.h" #include "shl_log.h" #include "shl_misc.h" +#include "shl_module.h" #include "shl_register.h" #define LOG_SUBSYSTEM "font" @@ -89,8 +89,7 @@ void kmscon_font_attr_normalize(struct kmscon_font_attr *attr) return; if (!*attr->name) - memcpy(attr->name, KMSCON_FONT_DEFAULT_NAME, - sizeof(KMSCON_FONT_DEFAULT_NAME)); + memcpy(attr->name, KMSCON_FONT_DEFAULT_NAME, sizeof(KMSCON_FONT_DEFAULT_NAME)); if (!attr->ppi) attr->ppi = KMSCON_FONT_DEFAULT_PPI; @@ -116,8 +115,7 @@ void kmscon_font_attr_normalize(struct kmscon_font_attr *attr) * Returns: true if they match, otherwise false */ SHL_EXPORT -bool kmscon_font_attr_match(const struct kmscon_font_attr *a1, - const struct kmscon_font_attr *a2) +bool kmscon_font_attr_match(const struct kmscon_font_attr *a1, const struct kmscon_font_attr *a2) { if (!a1 || !a2) return false; @@ -169,11 +167,9 @@ int kmscon_font_register(const struct kmscon_font_ops *ops) log_debug("register font backend %s", ops->name); - ret = shl_register_add_cb(&font_reg, ops->name, (void*)ops, - kmscon_font_destroy); + ret = shl_register_add_cb(&font_reg, ops->name, (void *)ops, kmscon_font_destroy); if (ret) { - log_error("cannot register font backend %s: %d", ops->name, - ret); + log_error("cannot register font backend %s: %d", ops->name, ret); return ret; } @@ -195,8 +191,8 @@ void kmscon_font_unregister(const char *name) shl_register_remove(&font_reg, name); } -static int new_font(struct kmscon_font *font, - const struct kmscon_font_attr *attr, const char *backend) +static int new_font(struct kmscon_font *font, const struct kmscon_font_attr *attr, + const char *backend) { struct shl_register_record *record; const char *name = backend ? backend : ""; @@ -306,8 +302,7 @@ static int new_font(struct kmscon_font *font, * * Returns: 0 on success, error code on failure */ -int kmscon_font_find(struct kmscon_font **out, - const struct kmscon_font_attr *attr, +int kmscon_font_find(struct kmscon_font **out, const struct kmscon_font_attr *attr, const char *backend) { struct kmscon_font *font; @@ -316,9 +311,8 @@ int kmscon_font_find(struct kmscon_font **out, if (!out || !attr) return -EINVAL; - log_debug("searching for: be: %s nm: %s ppi: %u pt: %u b: %d i: %d he: %u wt: %u", - backend, attr->name, attr->ppi, attr->points, - attr->bold, attr->italic, attr->height, + log_debug("searching for: be: %s nm: %s ppi: %u pt: %u b: %d i: %d he: %u wt: %u", backend, + attr->name, attr->ppi, attr->points, attr->bold, attr->italic, attr->height, attr->width); font = malloc(sizeof(*font)); @@ -335,10 +329,9 @@ int kmscon_font_find(struct kmscon_font **out, goto err_free; } - log_debug("using: be: %s nm: %s ppi: %u pt: %u b: %d i: %d he: %u wt: %u", - font->ops->name, font->attr.name, font->attr.ppi, - font->attr.points, font->attr.bold, font->attr.italic, - font->attr.height, font->attr.width); + log_debug("using: be: %s nm: %s ppi: %u pt: %u b: %d i: %d he: %u wt: %u", font->ops->name, + font->attr.name, font->attr.ppi, font->attr.points, font->attr.bold, + font->attr.italic, font->attr.height, font->attr.width); *out = font; return 0; @@ -397,8 +390,7 @@ void kmscon_font_unref(struct kmscon_font *font) * Returns: 0 on success, negative error code on failure */ SHL_EXPORT -int kmscon_font_render(struct kmscon_font *font, - uint64_t id, const uint32_t *ch, size_t len, +int kmscon_font_render(struct kmscon_font *font, uint64_t id, const uint32_t *ch, size_t len, const struct kmscon_glyph **out) { if (!font || !out || !ch || !len) @@ -419,8 +411,7 @@ int kmscon_font_render(struct kmscon_font *font, * Returns: 0 on success, negative error code on failure */ SHL_EXPORT -int kmscon_font_render_empty(struct kmscon_font *font, - const struct kmscon_glyph **out) +int kmscon_font_render_empty(struct kmscon_font *font, const struct kmscon_glyph **out) { if (!font || !out) return -EINVAL; @@ -441,8 +432,7 @@ int kmscon_font_render_empty(struct kmscon_font *font, * Returns: 0 on success ,engative error code on failure */ SHL_EXPORT -int kmscon_font_render_inval(struct kmscon_font *font, - const struct kmscon_glyph **out) +int kmscon_font_render_inval(struct kmscon_font *font, const struct kmscon_glyph **out) { if (!font || !out) return -EINVAL; @@ -460,9 +450,7 @@ int kmscon_font_render_inval(struct kmscon_font *font, * * Returns: true when overflow needed, false when no overflow needed or on error */ -bool kmscon_font_get_overflow(struct kmscon_font *font, - uint64_t id, const uint32_t *ch, - size_t len) +bool kmscon_font_get_overflow(struct kmscon_font *font, uint64_t id, const uint32_t *ch, size_t len) { if (!font || !font->ops->get_overflow) return false; diff --git a/src/font.h b/src/font.h index 4c181c62..f72981cb 100644 --- a/src/font.h +++ b/src/font.h @@ -58,8 +58,7 @@ struct kmscon_font_attr { }; void kmscon_font_attr_normalize(struct kmscon_font_attr *attr); -bool kmscon_font_attr_match(const struct kmscon_font_attr *a1, - const struct kmscon_font_attr *a2); +bool kmscon_font_attr_match(const struct kmscon_font_attr *a1, const struct kmscon_font_attr *a2); struct kmscon_glyph { struct uterm_video_buffer buf; @@ -78,39 +77,28 @@ struct kmscon_font { struct kmscon_font_ops { const char *name; struct shl_module *owner; - int (*init) (struct kmscon_font *out, - const struct kmscon_font_attr *attr); - void (*destroy) (struct kmscon_font *font); - int (*render) (struct kmscon_font *font, - uint64_t id, const uint32_t *ch, size_t len, - const struct kmscon_glyph **out); - int (*render_empty) (struct kmscon_font *font, - const struct kmscon_glyph **out); - int (*render_inval) (struct kmscon_font *font, - const struct kmscon_glyph **out); - bool (*get_overflow) (struct kmscon_font *font, - uint64_t id, const uint32_t *ch, - size_t len); + int (*init)(struct kmscon_font *out, const struct kmscon_font_attr *attr); + void (*destroy)(struct kmscon_font *font); + int (*render)(struct kmscon_font *font, uint64_t id, const uint32_t *ch, size_t len, + const struct kmscon_glyph **out); + int (*render_empty)(struct kmscon_font *font, const struct kmscon_glyph **out); + int (*render_inval)(struct kmscon_font *font, const struct kmscon_glyph **out); + bool (*get_overflow)(struct kmscon_font *font, uint64_t id, const uint32_t *ch, size_t len); }; int kmscon_font_register(const struct kmscon_font_ops *ops); void kmscon_font_unregister(const char *name); -int kmscon_font_find(struct kmscon_font **out, - const struct kmscon_font_attr *attr, +int kmscon_font_find(struct kmscon_font **out, const struct kmscon_font_attr *attr, const char *backend); void kmscon_font_ref(struct kmscon_font *font); void kmscon_font_unref(struct kmscon_font *font); -int kmscon_font_render(struct kmscon_font *font, - uint64_t id, const uint32_t *ch, size_t len, +int kmscon_font_render(struct kmscon_font *font, uint64_t id, const uint32_t *ch, size_t len, const struct kmscon_glyph **out); -int kmscon_font_render_empty(struct kmscon_font *font, - const struct kmscon_glyph **out); -int kmscon_font_render_inval(struct kmscon_font *font, - const struct kmscon_glyph **out); -bool kmscon_font_get_overflow(struct kmscon_font *font, - uint64_t id, const uint32_t *ch, +int kmscon_font_render_empty(struct kmscon_font *font, const struct kmscon_glyph **out); +int kmscon_font_render_inval(struct kmscon_font *font, const struct kmscon_glyph **out); +bool kmscon_font_get_overflow(struct kmscon_font *font, uint64_t id, const uint32_t *ch, size_t len); /* modularized backends */ diff --git a/src/font_8x16.c b/src/font_8x16.c index 65f85f0a..422427bc 100644 --- a/src/font_8x16.c +++ b/src/font_8x16.c @@ -56,8 +56,7 @@ /* forward declaration; see end of file for real array */ static const struct kmscon_glyph kmscon_font_8x16_glyphs[256]; -static int kmscon_font_8x16_init(struct kmscon_font *out, - const struct kmscon_font_attr *attr) +static int kmscon_font_8x16_init(struct kmscon_font *out, const struct kmscon_font_attr *attr) { static const char name[] = "static-8x16"; @@ -80,9 +79,8 @@ static void kmscon_font_8x16_destroy(struct kmscon_font *font) log_debug("unloading static 8x16 font"); } -static int kmscon_font_8x16_render(struct kmscon_font *font, - uint64_t id, const uint32_t *ch, size_t len, - const struct kmscon_glyph **out) +static int kmscon_font_8x16_render(struct kmscon_font *font, uint64_t id, const uint32_t *ch, + size_t len, const struct kmscon_glyph **out) { if (len > 1 || *ch >= 256) return -ERANGE; @@ -91,15 +89,13 @@ static int kmscon_font_8x16_render(struct kmscon_font *font, return 0; } -static int kmscon_font_8x16_render_empty(struct kmscon_font *font, - const struct kmscon_glyph **out) +static int kmscon_font_8x16_render_empty(struct kmscon_font *font, const struct kmscon_glyph **out) { *out = &kmscon_font_8x16_glyphs[0]; return 0; } -static int kmscon_font_8x16_render_inval(struct kmscon_font *font, - const struct kmscon_glyph **out) +static int kmscon_font_8x16_render_inval(struct kmscon_font *font, const struct kmscon_glyph **out) { *out = &kmscon_font_8x16_glyphs['?']; return 0; diff --git a/src/font_pango.c b/src/font_pango.c index e90423ad..b729b2ca 100644 --- a/src/font_pango.c +++ b/src/font_pango.c @@ -109,8 +109,8 @@ static void manager__unref() } } -static int get_glyph(struct face *face, struct kmscon_glyph **out, - uint64_t id, const uint32_t *ch, size_t len, const struct kmscon_font_attr *attr) +static int get_glyph(struct face *face, struct kmscon_glyph **out, uint64_t id, const uint32_t *ch, + size_t len, const struct kmscon_font_attr *attr) { struct kmscon_glyph *glyph; PangoLayout *layout; @@ -131,7 +131,7 @@ static int get_glyph(struct face *face, struct kmscon_glyph **out, return -ERANGE; pthread_mutex_lock(&face->glyph_lock); - res = shl_hashtable_find(face->glyphs, (void**)&glyph, id); + res = shl_hashtable_find(face->glyphs, (void **)&glyph, id); pthread_mutex_unlock(&face->glyph_lock); if (res) { *out = glyph; @@ -164,20 +164,16 @@ static int get_glyph(struct face *face, struct kmscon_glyph **out, /* underline if requested */ if (attr->underline) { - pango_attr_list_change(attrlist, - pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)); + pango_attr_list_change(attrlist, pango_attr_underline_new(PANGO_UNDERLINE_SINGLE)); } else { - pango_attr_list_change(attrlist, - pango_attr_underline_new(PANGO_UNDERLINE_NONE)); + pango_attr_list_change(attrlist, pango_attr_underline_new(PANGO_UNDERLINE_NONE)); } /* italic if requested */ if (attr->italic) { - pango_attr_list_change(attrlist, - pango_attr_style_new(PANGO_STYLE_ITALIC)); + pango_attr_list_change(attrlist, pango_attr_style_new(PANGO_STYLE_ITALIC)); } else { - pango_attr_list_change(attrlist, - pango_attr_style_new(PANGO_STYLE_NORMAL)); + pango_attr_list_change(attrlist, pango_attr_style_new(PANGO_STYLE_NORMAL)); } val = tsm_ucs4_to_utf8_alloc(ch, len, &ulen); @@ -199,7 +195,8 @@ static int get_glyph(struct face *face, struct kmscon_glyph **out, pango_layout_line_get_extents(line, &logical_rec, &rec); pango_extents_to_pixels(&rec, &logical_rec); - glyph->width = (logical_rec.x + logical_rec.width > rec.x + face->real_attr.width) ? 2 : cwidth; + glyph->width = + (logical_rec.x + logical_rec.width > rec.x + face->real_attr.width) ? 2 : cwidth; glyph->buf.width = face->real_attr.width * glyph->width; glyph->buf.height = face->real_attr.height; glyph->buf.stride = glyph->buf.width; @@ -269,7 +266,8 @@ static int manager_get_face(struct face **out, struct kmscon_font_attr *attr) manager_lock(); - shl_dlist_for_each(iter, &manager__list) { + shl_dlist_for_each(iter, &manager__list) + { face = shl_dlist_entry(iter, struct face, list); if (kmscon_font_attr_match(&face->attr, attr)) { ++face->ref; @@ -299,8 +297,7 @@ static int manager_get_face(struct face **out, struct kmscon_font_attr *attr) goto err_free; } - ret = shl_hashtable_new(&face->glyphs, shl_direct_hash, - shl_direct_equal, free_glyph); + ret = shl_hashtable_new(&face->glyphs, shl_direct_hash, shl_direct_equal, free_glyph); if (ret) { log_error("cannot allocate hashtable"); goto err_lock; @@ -311,12 +308,11 @@ static int manager_get_face(struct face **out, struct kmscon_font_attr *attr) pango_context_set_language(face->ctx, pango_language_get_default()); desc = pango_font_description_from_string(attr->name); - pango_font_description_set_absolute_size(desc, - PANGO_SCALE * face->attr.height); + pango_font_description_set_absolute_size(desc, PANGO_SCALE * face->attr.height); pango_font_description_set_weight(desc, - attr->bold ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL); + attr->bold ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL); pango_font_description_set_style(desc, - attr->italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL); + attr->italic ? PANGO_STYLE_ITALIC : PANGO_STYLE_NORMAL); pango_font_description_set_variant(desc, PANGO_VARIANT_NORMAL); pango_font_description_set_stretch(desc, PANGO_STRETCH_NORMAL); pango_font_description_set_gravity(desc, PANGO_GRAVITY_SOUTH); @@ -349,7 +345,8 @@ static int manager_get_face(struct face **out, struct kmscon_font_attr *attr) /* The real metrics probably differ from the requested metrics so try * again to find a suitable cached font. */ - shl_dlist_for_each(iter, &manager__list) { + shl_dlist_for_each(iter, &manager__list) + { f = shl_dlist_entry(iter, struct face, list); if (kmscon_font_attr_match(&f->real_attr, &face->real_attr)) { ++f->ref; @@ -405,8 +402,7 @@ static void block_sigchild(void) pthread_sigmask(SIG_BLOCK, &mask, NULL); } -static int kmscon_font_pango_init(struct kmscon_font *out, - const struct kmscon_font_attr *attr) +static int kmscon_font_pango_init(struct kmscon_font *out, const struct kmscon_font_attr *attr) { struct face *face = NULL; int ret; @@ -437,9 +433,8 @@ static void kmscon_font_pango_destroy(struct kmscon_font *font) manager_put_face(face); } -static int kmscon_font_pango_render(struct kmscon_font *font, uint64_t id, - const uint32_t *ch, size_t len, - const struct kmscon_glyph **out) +static int kmscon_font_pango_render(struct kmscon_font *font, uint64_t id, const uint32_t *ch, + size_t len, const struct kmscon_glyph **out) { struct kmscon_glyph *glyph; int ret; @@ -452,25 +447,20 @@ static int kmscon_font_pango_render(struct kmscon_font *font, uint64_t id, return 0; } -static int kmscon_font_pango_render_empty(struct kmscon_font *font, - const struct kmscon_glyph **out) +static int kmscon_font_pango_render_empty(struct kmscon_font *font, const struct kmscon_glyph **out) { static const uint32_t empty_char = ' '; return kmscon_font_pango_render(font, empty_char, &empty_char, 1, out); } -static int kmscon_font_pango_render_inval(struct kmscon_font *font, - const struct kmscon_glyph **out) +static int kmscon_font_pango_render_inval(struct kmscon_font *font, const struct kmscon_glyph **out) { static const uint32_t question_mark = '?'; - return kmscon_font_pango_render(font, question_mark, &question_mark, 1, - out); + return kmscon_font_pango_render(font, question_mark, &question_mark, 1, out); } -static bool kmscon_font_pango_get_overflow(struct kmscon_font *font, - uint64_t id, - const uint32_t *ch, - size_t len) +static bool kmscon_font_pango_get_overflow(struct kmscon_font *font, uint64_t id, + const uint32_t *ch, size_t len) { struct face *face = font->data; unsigned int cwidth; diff --git a/src/font_rotate.c b/src/font_rotate.c index 7fe2daa2..e39053c8 100644 --- a/src/font_rotate.c +++ b/src/font_rotate.c @@ -26,18 +26,17 @@ #include "font_rotate.h" #include "shl_misc.h" - SHL_EXPORT -int kmscon_rotate_create_tables(struct shl_hashtable **normal, struct shl_hashtable **bold, shl_free_cb free_glyph) +SHL_EXPORT +int kmscon_rotate_create_tables(struct shl_hashtable **normal, struct shl_hashtable **bold, + shl_free_cb free_glyph) { int ret; - ret = shl_hashtable_new(normal, shl_direct_hash, - shl_direct_equal, free_glyph); + ret = shl_hashtable_new(normal, shl_direct_hash, shl_direct_equal, free_glyph); if (ret) return ret; - ret = shl_hashtable_new(bold, shl_direct_hash, - shl_direct_equal, free_glyph); + ret = shl_hashtable_new(bold, shl_direct_hash, shl_direct_equal, free_glyph); if (ret) shl_hashtable_free(*normal); return ret; @@ -51,7 +50,8 @@ void kmscon_rotate_free_tables(struct shl_hashtable *normal, struct shl_hashtabl } SHL_EXPORT -int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph *glyph, enum Orientation orientation, uint8_t align) +int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph *glyph, + enum Orientation orientation, uint8_t align) { int width; int height; @@ -68,7 +68,7 @@ int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph height = buf->width; } - stride = align * ((width + (align - 1)) / align); + stride = align * ((width + (align - 1)) / align); vb->data = malloc(stride * height); if (!vb->data) @@ -93,7 +93,7 @@ int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph } src += buf->stride; } - break; + break; case OR_UPSIDE_DOWN: src += (buf->height - 1) * buf->stride; for (i = 0; i < buf->height; i++) { @@ -106,7 +106,7 @@ int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph case OR_LEFT: for (i = 0; i < buf->height; i++) { for (j = 0; j < buf->width; j++) { - dst[(height -j -1) * stride + i] = src[j]; + dst[(height - j - 1) * stride + i] = src[j]; } src += buf->stride; } @@ -117,4 +117,3 @@ int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph vb->format = buf->format; return 0; } - diff --git a/src/font_rotate.h b/src/font_rotate.h index aa687ab0..b49f76e3 100644 --- a/src/font_rotate.h +++ b/src/font_rotate.h @@ -26,6 +26,8 @@ #include "shl_hashtable.h" #include "text.h" -int kmscon_rotate_create_tables(struct shl_hashtable **normal, struct shl_hashtable **bold, shl_free_cb free_glyph); +int kmscon_rotate_create_tables(struct shl_hashtable **normal, struct shl_hashtable **bold, + shl_free_cb free_glyph); void kmscon_rotate_free_tables(struct shl_hashtable *normal, struct shl_hashtable *bold); -int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph *glyph, enum Orientation orientation, uint8_t align); +int kmscon_rotate_glyph(struct uterm_video_buffer *vb, const struct kmscon_glyph *glyph, + enum Orientation orientation, uint8_t align); diff --git a/src/font_unifont.c b/src/font_unifont.c index db30d3fd..230ac160 100644 --- a/src/font_unifont.c +++ b/src/font_unifont.c @@ -39,15 +39,15 @@ */ #include +#include #include #include #include -#include #include "font.h" +#include "font_unifont_data.bin.h" #include "shl_hashtable.h" #include "shl_log.h" #include "uterm_video.h" -#include "font_unifont_data.bin.h" #define LOG_SUBSYSTEM "font_unifont" @@ -115,14 +115,13 @@ static int find_glyph(uint32_t ch, const struct kmscon_glyph **out) pthread_mutex_lock(&cache_mutex); if (!cache) { - ret = shl_hashtable_new(&cache, shl_direct_hash, - shl_direct_equal, free_glyph); + ret = shl_hashtable_new(&cache, shl_direct_hash, shl_direct_equal, free_glyph); if (ret) { log_error("cannot create unifont hashtable: %d", ret); goto out_unlock; } } else { - res = shl_hashtable_find(cache, (void**)out, ch); + res = shl_hashtable_find(cache, (void **)out, ch); if (res) { ret = 0; goto out_unlock; @@ -134,8 +133,8 @@ static int find_glyph(uint32_t ch, const struct kmscon_glyph **out) goto out_unlock; } - start = (const struct unifont_data*)_binary_font_unifont_data_start; - end = (const struct unifont_data*)_binary_font_unifont_data_end; + start = (const struct unifont_data *)_binary_font_unifont_data_start; + end = (const struct unifont_data *)_binary_font_unifont_data_end; d = &start[ch]; if (d >= end) { @@ -203,8 +202,7 @@ static int find_glyph(uint32_t ch, const struct kmscon_glyph **out) return ret; } -static int kmscon_font_unifont_init(struct kmscon_font *out, - const struct kmscon_font_attr *attr) +static int kmscon_font_unifont_init(struct kmscon_font *out, const struct kmscon_font_attr *attr) { static const char name[] = "static-unifont"; @@ -215,7 +213,6 @@ static int kmscon_font_unifont_init(struct kmscon_font *out, return -EFAULT; } - memset(&out->attr, 0, sizeof(out->attr)); memcpy(out->attr.name, name, sizeof(name)); out->attr.bold = false; @@ -235,9 +232,8 @@ static void kmscon_font_unifont_destroy(struct kmscon_font *font) cache_unref(); } -static int kmscon_font_unifont_render(struct kmscon_font *font, uint64_t id, - const uint32_t *ch, size_t len, - const struct kmscon_glyph **out) +static int kmscon_font_unifont_render(struct kmscon_font *font, uint64_t id, const uint32_t *ch, + size_t len, const struct kmscon_glyph **out) { if (len > 1) return -ERANGE; diff --git a/src/genunifont.c b/src/genunifont.c index ca464eab..d9bc895f 100644 --- a/src/genunifont.c +++ b/src/genunifont.c @@ -68,8 +68,7 @@ static void print_unifont_glyph(FILE *out, const struct unifont_glyph *g) case 64: break; default: - fprintf(stderr, "genunifont: invalid data size %d for %x", - g->len, g->codepoint); + fprintf(stderr, "genunifont: invalid data size %d for %x", g->len, g->codepoint); return; } @@ -79,7 +78,7 @@ static void print_unifont_glyph(FILE *out, const struct unifont_glyph *g) val |= hex_val(g->data[i + 1]); fprintf(out, "%c", val); } - for ( ; i < 64; i += 2) + for (; i < 64; i += 2) fprintf(out, "%c", 0); } @@ -112,10 +111,7 @@ static int build_unifont_glyph(struct unifont_glyph *g, const char *buf) static int parse_single_file(FILE *out, FILE *in) { static const struct unifont_glyph replacement = { - .codepoint = 0, - .len = 32, - .data = "0000007E665A5A7A76767E76767E0000" - }; + .codepoint = 0, .len = 32, .data = "0000007E665A5A7A76767E76767E0000"}; char buf[MAX_DATA_SIZE]; struct unifont_glyph *g, **iter, *list, *last; int ret, num; @@ -185,8 +181,7 @@ static int parse_single_file(FILE *out, FILE *in) iter = &(*iter)->next; if (*iter && (*iter)->codepoint == g->codepoint) { - fprintf(stderr, "glyph %d used twice\n", - g->codepoint); + fprintf(stderr, "glyph %d used twice\n", g->codepoint); free(g); return -EFAULT; } @@ -231,22 +226,19 @@ int main(int argc, char **argv) out = fopen(argv[1], "wb"); if (!out) { - fprintf(stderr, "genunifont: cannot open output %s: %m\n", - argv[1]); + fprintf(stderr, "genunifont: cannot open output %s: %m\n", argv[1]); ret = EXIT_FAILURE; goto err_out; } in = fopen(argv[2], "rb"); if (!in) { - fprintf(stderr, "genunifont: cannot open %s: %m\n", - argv[2]); + fprintf(stderr, "genunifont: cannot open %s: %m\n", argv[2]); ret = EXIT_FAILURE; } else { ret = parse_single_file(out, in); if (ret) { - fprintf(stderr, "genunifont: parsing input %s failed", - argv[2]); + fprintf(stderr, "genunifont: parsing input %s failed", argv[2]); ret = EXIT_FAILURE; } else { ret = EXIT_SUCCESS; @@ -254,7 +246,6 @@ int main(int argc, char **argv) fclose(in); } - fclose(out); err_out: return ret; diff --git a/src/kmscon_conf.c b/src/kmscon_conf.c index df2e51da..47c56a5b 100644 --- a/src/kmscon_conf.c +++ b/src/kmscon_conf.c @@ -220,8 +220,7 @@ static void print_help() */ } -#define KMSCON_CONF_FROM_FIELD(_mem, _name) \ - shl_offsetof((_mem), struct kmscon_conf_t, _name) +#define KMSCON_CONF_FROM_FIELD(_mem, _name) shl_offsetof((_mem), struct kmscon_conf_t, _name) /* * VT Type @@ -265,12 +264,11 @@ static int conf_parse_vt(struct conf_option *opt, bool on, const char *arg) } opt->type->free(opt); - *(void**)opt->mem = str; + *(void **)opt->mem = str; return 0; } -static int conf_copy_vt(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_vt(struct conf_option *opt, const struct conf_option *src) { return conf_string.copy(opt, src); } @@ -292,7 +290,7 @@ static const struct conf_type conf_vt = { * special handling that the command-line does. */ -static char *def_argv[] = { "/bin/login", "-p", NULL }; +static char *def_argv[] = {"/bin/login", "-p", NULL}; static void conf_default_login(struct conf_option *opt) { @@ -322,8 +320,7 @@ static int conf_parse_login(struct conf_option *opt, bool on, const char *arg) return 0; } -static int conf_copy_login(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_login(struct conf_option *opt, const struct conf_option *src) { struct kmscon_conf_t *conf = KMSCON_CONF_FROM_FIELD(opt->mem, login); struct kmscon_conf_t *s = KMSCON_CONF_FROM_FIELD(src->mem, login); @@ -352,8 +349,7 @@ static const struct conf_type conf_login = { .copy = conf_copy_login, }; -static int aftercheck_login(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_login(struct conf_option *opt, int argc, char **argv, int idx) { struct kmscon_conf_t *conf = KMSCON_CONF_FROM_FIELD(opt->mem, login); int ret = 0; @@ -373,8 +369,7 @@ static int aftercheck_login(struct conf_option *opt, int argc, char **argv, conf->argv = t; ret = argc - idx; } else if (!conf->argv) { - ret = shl_dup_array_size(&t, def_argv, - sizeof(def_argv) / sizeof(*def_argv)); + ret = shl_dup_array_size(&t, def_argv, sizeof(def_argv) / sizeof(*def_argv)); if (ret) return ret; @@ -449,8 +444,7 @@ static int conf_parse_gpus(struct conf_option *opt, bool on, const char *arg) return 0; } -static int conf_copy_gpus(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_gpus(struct conf_option *opt, const struct conf_option *src) { return conf_uint.copy(opt, src); } @@ -481,13 +475,13 @@ static int conf_parse_color(struct conf_option *opt, bool on, const char *arg) ret = shl_split_string(arg, &list, &list_num, ',', true); if (ret) { - log_error("cannot split '%s' config-option argument", - opt->long_name + 3); + log_error("cannot split '%s' config-option argument", opt->long_name + 3); return ret; } if (list_num != 3) { log_error("%u values given for '%s' config-option argument, " - "3 expected", list_num, opt->long_name + 3); + "3 expected", + list_num, opt->long_name + 3); ret = -EFAULT; goto out_free; } @@ -503,7 +497,7 @@ static int conf_parse_color(struct conf_option *opt, bool on, const char *arg) ret = -EFAULT; goto out_free; } - ((uint8_t*)opt->mem)[i] = val; + ((uint8_t *)opt->mem)[i] = val; } out_free: @@ -511,8 +505,7 @@ static int conf_parse_color(struct conf_option *opt, bool on, const char *arg) return ret; } -static int conf_copy_color(struct conf_option *opt, - const struct conf_option *src) +static int conf_copy_color(struct conf_option *opt, const struct conf_option *src) { memcpy(opt->mem, src->mem, 3); return 0; @@ -531,8 +524,9 @@ static const struct conf_type conf_color = { .copy = conf_copy_color, }; -#define CONF_OPTION_COLOR(_long, _mem_palette, _offset) \ - CONF_OPTION(0, 0, _long, &conf_color, NULL, NULL, NULL, &(_mem_palette)[_offset], &def_palette[_offset]) +#define CONF_OPTION_COLOR(_long, _mem_palette, _offset) \ + CONF_OPTION(0, 0, _long, &conf_color, NULL, NULL, NULL, &(_mem_palette)[_offset], \ + &def_palette[_offset]) /* * Custom Afterchecks @@ -541,8 +535,7 @@ static const struct conf_type conf_color = { * Some of them also need copy-helpers because they copy more than one value. */ -static int aftercheck_debug(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_debug(struct conf_option *opt, int argc, char **argv, int idx) { struct kmscon_conf_t *conf = KMSCON_CONF_FROM_FIELD(opt->mem, debug); @@ -553,8 +546,7 @@ static int aftercheck_debug(struct conf_option *opt, int argc, char **argv, return 0; } -static int aftercheck_help(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_help(struct conf_option *opt, int argc, char **argv, int idx) { struct kmscon_conf_t *conf = KMSCON_CONF_FROM_FIELD(opt->mem, help); @@ -567,8 +559,7 @@ static int aftercheck_help(struct conf_option *opt, int argc, char **argv, return 0; } -static int aftercheck_drm(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_drm(struct conf_option *opt, int argc, char **argv, int idx) { #ifndef BUILD_ENABLE_VIDEO_DRM2D #ifndef BUILD_ENABLE_VIDEO_DRM3D @@ -588,8 +579,7 @@ static int aftercheck_drm(struct conf_option *opt, int argc, char **argv, return 0; } -static int aftercheck_vt(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_vt(struct conf_option *opt, int argc, char **argv, int idx) { struct kmscon_conf_t *conf = KMSCON_CONF_FROM_FIELD(opt->mem, vt); @@ -597,7 +587,8 @@ static int aftercheck_vt(struct conf_option *opt, int argc, char **argv, return 0; if (!kmscon_conf_is_single_seat(conf)) { - log_error("you cannot use global --vt if --seats contains not exactly one seat, ignoring --vt"); + log_error("you cannot use global --vt if --seats contains not exactly one seat, " + "ignoring --vt"); free(conf->vt); conf->vt = NULL; return -EFAULT; @@ -606,8 +597,7 @@ static int aftercheck_vt(struct conf_option *opt, int argc, char **argv, return 0; } -static int aftercheck_listen(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_listen(struct conf_option *opt, int argc, char **argv, int idx) { struct kmscon_conf_t *conf = KMSCON_CONF_FROM_FIELD(opt->mem, listen); @@ -623,67 +613,59 @@ static int aftercheck_listen(struct conf_option *opt, int argc, char **argv, * speeds up config-parser considerably. */ -static char *def_seats[] = { "current", NULL }; +static char *def_seats[] = {"current", NULL}; -static struct conf_grab def_grab_scroll_up = - CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Up); +static struct conf_grab def_grab_scroll_up = CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Up); -static struct conf_grab def_grab_scroll_down = - CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Down); +static struct conf_grab def_grab_scroll_down = CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Down); -static struct conf_grab def_grab_page_up = - CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Prior); +static struct conf_grab def_grab_page_up = CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Prior); -static struct conf_grab def_grab_page_down = - CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Next); +static struct conf_grab def_grab_page_down = CONF_SINGLE_GRAB(SHL_SHIFT_MASK, XKB_KEY_Next); -static struct conf_grab def_grab_zoom_in = - CONF_SINGLE_GRAB(SHL_CONTROL_MASK, XKB_KEY_plus); +static struct conf_grab def_grab_zoom_in = CONF_SINGLE_GRAB(SHL_CONTROL_MASK, XKB_KEY_plus); -static struct conf_grab def_grab_zoom_out = - CONF_SINGLE_GRAB(SHL_CONTROL_MASK, XKB_KEY_minus); +static struct conf_grab def_grab_zoom_out = CONF_SINGLE_GRAB(SHL_CONTROL_MASK, XKB_KEY_minus); static struct conf_grab def_grab_session_next = - CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Right); + CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Right); static struct conf_grab def_grab_session_prev = - CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Left); + CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Left); static struct conf_grab def_grab_session_dummy = - CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Escape); + CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Escape); static struct conf_grab def_grab_session_close = - CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_BackSpace); + CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_BackSpace); static struct conf_grab def_grab_terminal_new = - CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Return); + CONF_SINGLE_GRAB(SHL_CONTROL_MASK | SHL_LOGO_MASK, XKB_KEY_Return); -static struct conf_grab def_grab_rotate_cw = - CONF_SINGLE_GRAB(SHL_LOGO_MASK, XKB_KEY_plus); +static struct conf_grab def_grab_rotate_cw = CONF_SINGLE_GRAB(SHL_LOGO_MASK, XKB_KEY_plus); -static struct conf_grab def_grab_rotate_ccw = - CONF_SINGLE_GRAB(SHL_LOGO_MASK, XKB_KEY_minus); +static struct conf_grab def_grab_rotate_ccw = CONF_SINGLE_GRAB(SHL_LOGO_MASK, XKB_KEY_minus); static palette_t def_palette = { - [TSM_COLOR_BLACK] = { 0, 0, 0 }, /* black */ - [TSM_COLOR_RED] = { 205, 0, 0 }, /* red */ - [TSM_COLOR_GREEN] = { 0, 205, 0 }, /* green */ - [TSM_COLOR_YELLOW] = { 205, 205, 0 }, /* yellow */ - [TSM_COLOR_BLUE] = { 0, 0, 238 }, /* blue */ - [TSM_COLOR_MAGENTA] = { 205, 0, 205 }, /* magenta */ - [TSM_COLOR_CYAN] = { 0, 205, 205 }, /* cyan */ - [TSM_COLOR_LIGHT_GREY] = { 229, 229, 229 }, /* light grey */ - [TSM_COLOR_DARK_GREY] = { 127, 127, 127 }, /* dark grey */ - [TSM_COLOR_LIGHT_RED] = { 255, 0, 0 }, /* light red */ - [TSM_COLOR_LIGHT_GREEN] = { 0, 255, 0 }, /* light green */ - [TSM_COLOR_LIGHT_YELLOW] = { 255, 255, 0 }, /* light yellow */ - [TSM_COLOR_LIGHT_BLUE] = { 92, 92, 255 }, /* light blue */ - [TSM_COLOR_LIGHT_MAGENTA] = { 255, 0, 255 }, /* light magenta */ - [TSM_COLOR_LIGHT_CYAN] = { 0, 255, 255 }, /* light cyan */ - [TSM_COLOR_WHITE] = { 255, 255, 255 }, /* white */ - - [TSM_COLOR_FOREGROUND] = { 229, 229, 229 }, /* light grey */ - [TSM_COLOR_BACKGROUND] = { 0, 0, 0 }, /* black */ + [TSM_COLOR_BLACK] = {0, 0, 0}, /* black */ + [TSM_COLOR_RED] = {205, 0, 0}, /* red */ + [TSM_COLOR_GREEN] = {0, 205, 0}, /* green */ + [TSM_COLOR_YELLOW] = {205, 205, 0}, /* yellow */ + [TSM_COLOR_BLUE] = {0, 0, 238}, /* blue */ + [TSM_COLOR_MAGENTA] = {205, 0, 205}, /* magenta */ + [TSM_COLOR_CYAN] = {0, 205, 205}, /* cyan */ + [TSM_COLOR_LIGHT_GREY] = {229, 229, 229}, /* light grey */ + [TSM_COLOR_DARK_GREY] = {127, 127, 127}, /* dark grey */ + [TSM_COLOR_LIGHT_RED] = {255, 0, 0}, /* light red */ + [TSM_COLOR_LIGHT_GREEN] = {0, 255, 0}, /* light green */ + [TSM_COLOR_LIGHT_YELLOW] = {255, 255, 0}, /* light yellow */ + [TSM_COLOR_LIGHT_BLUE] = {92, 92, 255}, /* light blue */ + [TSM_COLOR_LIGHT_MAGENTA] = {255, 0, 255}, /* light magenta */ + [TSM_COLOR_LIGHT_CYAN] = {0, 255, 255}, /* light cyan */ + [TSM_COLOR_WHITE] = {255, 255, 255}, /* white */ + + [TSM_COLOR_FOREGROUND] = {229, 229, 229}, /* light grey */ + [TSM_COLOR_BACKGROUND] = {0, 0, 0}, /* black */ }; int kmscon_conf_new(struct conf_ctx **out) @@ -704,10 +686,12 @@ int kmscon_conf_new(struct conf_ctx **out) /* Global Options */ CONF_OPTION_BOOL_FULL('h', "help", aftercheck_help, NULL, NULL, &conf->help, false), CONF_OPTION_BOOL('v', "verbose", &conf->verbose, false), - CONF_OPTION_BOOL_FULL(0, "debug", aftercheck_debug, NULL, NULL, &conf->debug, false), + CONF_OPTION_BOOL_FULL(0, "debug", aftercheck_debug, NULL, NULL, &conf->debug, + false), CONF_OPTION_BOOL(0, "silent", &conf->silent, false), CONF_OPTION_STRING('c', "configdir", &conf->configdir, BUILD_CONFIG_DIR), - CONF_OPTION_BOOL_FULL(0, "listen", aftercheck_listen, NULL, NULL, &conf->listen, false), + CONF_OPTION_BOOL_FULL(0, "listen", aftercheck_listen, NULL, NULL, &conf->listen, + false), /* Seat Options */ CONF_OPTION(0, 0, "vt", &conf_vt, aftercheck_vt, NULL, NULL, &conf->vt, NULL), @@ -720,7 +704,8 @@ int kmscon_conf_new(struct conf_ctx **out) CONF_OPTION_BOOL(0, "terminal-session", &conf->terminal_session, true), /* Terminal Options */ - CONF_OPTION(0, 'l', "login", &conf_login, aftercheck_login, NULL, file_login, &conf->login, false), + CONF_OPTION(0, 'l', "login", &conf_login, aftercheck_login, NULL, file_login, + &conf->login, false), CONF_OPTION_STRING('t', "term", &conf->term, "xterm-256color"), CONF_OPTION_BOOL(0, "reset-env", &conf->reset_env, true), CONF_OPTION_UINT(0, "sb-size", &conf->sb_size, 1000), @@ -738,23 +723,31 @@ int kmscon_conf_new(struct conf_ctx **out) /* Grabs / Keyboard-Shortcuts */ CONF_OPTION_GRAB(0, "grab-scroll-up", &conf->grab_scroll_up, &def_grab_scroll_up), - CONF_OPTION_GRAB(0, "grab-scroll-down", &conf->grab_scroll_down, &def_grab_scroll_down), + CONF_OPTION_GRAB(0, "grab-scroll-down", &conf->grab_scroll_down, + &def_grab_scroll_down), CONF_OPTION_GRAB(0, "grab-page-up", &conf->grab_page_up, &def_grab_page_up), CONF_OPTION_GRAB(0, "grab-page-down", &conf->grab_page_down, &def_grab_page_down), CONF_OPTION_GRAB(0, "grab-zoom-in", &conf->grab_zoom_in, &def_grab_zoom_in), CONF_OPTION_GRAB(0, "grab-zoom-out", &conf->grab_zoom_out, &def_grab_zoom_out), - CONF_OPTION_GRAB(0, "grab-session-next", &conf->grab_session_next, &def_grab_session_next), - CONF_OPTION_GRAB(0, "grab-session-prev", &conf->grab_session_prev, &def_grab_session_prev), - CONF_OPTION_GRAB(0, "grab-session-dummy", &conf->grab_session_dummy, &def_grab_session_dummy), - CONF_OPTION_GRAB(0, "grab-session-close", &conf->grab_session_close, &def_grab_session_close), - CONF_OPTION_GRAB(0, "grab-terminal-new", &conf->grab_terminal_new, &def_grab_terminal_new), + CONF_OPTION_GRAB(0, "grab-session-next", &conf->grab_session_next, + &def_grab_session_next), + CONF_OPTION_GRAB(0, "grab-session-prev", &conf->grab_session_prev, + &def_grab_session_prev), + CONF_OPTION_GRAB(0, "grab-session-dummy", &conf->grab_session_dummy, + &def_grab_session_dummy), + CONF_OPTION_GRAB(0, "grab-session-close", &conf->grab_session_close, + &def_grab_session_close), + CONF_OPTION_GRAB(0, "grab-terminal-new", &conf->grab_terminal_new, + &def_grab_terminal_new), CONF_OPTION_GRAB(0, "grab-rotate-cw", &conf->grab_rotate_cw, &def_grab_rotate_cw), - CONF_OPTION_GRAB(0, "grab-rotate-ccw", &conf->grab_rotate_ccw, &def_grab_rotate_ccw), + CONF_OPTION_GRAB(0, "grab-rotate-ccw", &conf->grab_rotate_ccw, + &def_grab_rotate_ccw), /* Video Options */ CONF_OPTION_BOOL_FULL(0, "drm", aftercheck_drm, NULL, NULL, &conf->drm, true), CONF_OPTION_BOOL(0, "hwaccel", &conf->hwaccel, false), - CONF_OPTION(0, 0, "gpus", &conf_gpus, NULL, NULL, NULL, &conf->gpus, KMSCON_GPU_ALL), + CONF_OPTION(0, 0, "gpus", &conf_gpus, NULL, NULL, NULL, &conf->gpus, + KMSCON_GPU_ALL), CONF_OPTION_STRING(0, "render-engine", &conf->render_engine, NULL), CONF_OPTION_BOOL(0, "use-original-mode", &conf->use_original_mode, true), CONF_OPTION_STRING(0, "mode", &conf->mode, NULL), @@ -778,18 +771,20 @@ int kmscon_conf_new(struct conf_ctx **out) CONF_OPTION_COLOR("palette-light-grey", conf->custom_palette, TSM_COLOR_LIGHT_GREY), CONF_OPTION_COLOR("palette-dark-grey", conf->custom_palette, TSM_COLOR_DARK_GREY), CONF_OPTION_COLOR("palette-light-red", conf->custom_palette, TSM_COLOR_LIGHT_RED), - CONF_OPTION_COLOR("palette-light-green", conf->custom_palette, TSM_COLOR_LIGHT_GREEN), - CONF_OPTION_COLOR("palette-light-yellow", conf->custom_palette, TSM_COLOR_LIGHT_YELLOW), + CONF_OPTION_COLOR("palette-light-green", conf->custom_palette, + TSM_COLOR_LIGHT_GREEN), + CONF_OPTION_COLOR("palette-light-yellow", conf->custom_palette, + TSM_COLOR_LIGHT_YELLOW), CONF_OPTION_COLOR("palette-light-blue", conf->custom_palette, TSM_COLOR_LIGHT_BLUE), - CONF_OPTION_COLOR("palette-light-magenta", conf->custom_palette, TSM_COLOR_LIGHT_MAGENTA), + CONF_OPTION_COLOR("palette-light-magenta", conf->custom_palette, + TSM_COLOR_LIGHT_MAGENTA), CONF_OPTION_COLOR("palette-light-cyan", conf->custom_palette, TSM_COLOR_LIGHT_CYAN), CONF_OPTION_COLOR("palette-white", conf->custom_palette, TSM_COLOR_WHITE), CONF_OPTION_COLOR("palette-foreground", conf->custom_palette, TSM_COLOR_FOREGROUND), CONF_OPTION_COLOR("palette-background", conf->custom_palette, TSM_COLOR_BACKGROUND), }; - ret = conf_ctx_new(&ctx, options, sizeof(options) / sizeof(*options), - conf); + ret = conf_ctx_new(&ctx, options, sizeof(options) / sizeof(*options), conf); if (ret) { free(conf); return ret; @@ -831,8 +826,7 @@ int kmscon_conf_load_main(struct conf_ctx *ctx, int argc, char **argv) if (!conf->debug && !conf->verbose && conf->silent) log_set_config(&LOG_CONFIG_WARNING(0, 0, 0, 0)); else - log_set_config(&LOG_CONFIG_INFO(conf->debug, - conf->verbose)); + log_set_config(&LOG_CONFIG_INFO(conf->debug, conf->verbose)); ret = conf_ctx_parse_file(ctx, "%s/kmscon.conf", conf->configdir); if (ret) @@ -846,14 +840,14 @@ int kmscon_conf_load_main(struct conf_ctx *ctx, int argc, char **argv) if (!conf->debug && !conf->verbose && conf->silent) log_set_config(&LOG_CONFIG_WARNING(0, 0, 0, 0)); else - log_set_config(&LOG_CONFIG_INFO(conf->debug, - conf->verbose)); + log_set_config(&LOG_CONFIG_INFO(conf->debug, conf->verbose)); /* You can't set a mode, and use_original_mode at the same time * specified mode takes priority. */ if (conf->use_original_mode && conf->mode != NULL) { - log_error("Cannot use --mode if --use-original-mode is enabled. Try --no-use-original-mode.\n"); + log_error("Cannot use --mode if --use-original-mode is enabled. Try " + "--no-use-original-mode.\n"); conf->use_original_mode = false; } log_print_init("kmscon"); @@ -861,8 +855,7 @@ int kmscon_conf_load_main(struct conf_ctx *ctx, int argc, char **argv) return 0; } -int kmscon_conf_load_seat(struct conf_ctx *ctx, const struct conf_ctx *main, - const char *seat) +int kmscon_conf_load_seat(struct conf_ctx *ctx, const struct conf_ctx *main, const char *seat) { int ret; struct kmscon_conf_t *conf; @@ -879,8 +872,7 @@ int kmscon_conf_load_seat(struct conf_ctx *ctx, const struct conf_ctx *main, if (ret) return ret; - ret = conf_ctx_parse_file(ctx, "%s/%s.seat.conf", conf->configdir, - seat); + ret = conf_ctx_parse_file(ctx, "%s/%s.seat.conf", conf->configdir, seat); if (ret) return ret; diff --git a/src/kmscon_conf.h b/src/kmscon_conf.h index 1964d22a..b3836f12 100644 --- a/src/kmscon_conf.h +++ b/src/kmscon_conf.h @@ -31,10 +31,10 @@ #ifndef KMSCON_MAIN_H #define KMSCON_MAIN_H +#include #include #include #include -#include #include "conf.h" #include "shl_dlist.h" @@ -178,8 +178,7 @@ struct kmscon_conf_t { int kmscon_conf_new(struct conf_ctx **out); void kmscon_conf_free(struct conf_ctx *ctx); int kmscon_conf_load_main(struct conf_ctx *ctx, int argc, char **argv); -int kmscon_conf_load_seat(struct conf_ctx *ctx, const struct conf_ctx *main, - const char *seat); +int kmscon_conf_load_seat(struct conf_ctx *ctx, const struct conf_ctx *main, const char *seat); static inline bool kmscon_conf_is_current_seat(struct kmscon_conf_t *conf) { diff --git a/src/kmscon_dummy.c b/src/kmscon_dummy.c index 9d9b5b0f..dc14f731 100644 --- a/src/kmscon_dummy.c +++ b/src/kmscon_dummy.c @@ -61,8 +61,8 @@ static void dummy_redraw(struct kmscon_dummy *dummy, struct display *d) uterm_display_swap(d->disp, false); } -static int dummy_session_event(struct kmscon_session *session, - struct kmscon_session_event *ev, void *data) +static int dummy_session_event(struct kmscon_session *session, struct kmscon_session_event *ev, + void *data) { struct kmscon_dummy *dummy = data; struct display *d; @@ -82,7 +82,8 @@ static int dummy_session_event(struct kmscon_session *session, dummy_redraw(dummy, d); break; case KMSCON_SESSION_DISPLAY_GONE: - shl_dlist_for_each(iter, &dummy->displays) { + shl_dlist_for_each(iter, &dummy->displays) + { d = shl_dlist_entry(iter, struct display, list); if (d->disp != ev->disp) continue; @@ -93,7 +94,8 @@ static int dummy_session_event(struct kmscon_session *session, } break; case KMSCON_SESSION_DISPLAY_REFRESH: - shl_dlist_for_each(iter, &dummy->displays) { + shl_dlist_for_each(iter, &dummy->displays) + { d = shl_dlist_entry(iter, struct display, list); if (d->disp != ev->disp) continue; @@ -105,7 +107,8 @@ static int dummy_session_event(struct kmscon_session *session, break; case KMSCON_SESSION_ACTIVATE: dummy->active = true; - shl_dlist_for_each(iter, &dummy->displays) { + shl_dlist_for_each(iter, &dummy->displays) + { d = shl_dlist_entry(iter, struct display, list); dummy_redraw(dummy, d); } @@ -115,8 +118,7 @@ static int dummy_session_event(struct kmscon_session *session, break; case KMSCON_SESSION_UNREGISTER: while (!shl_dlist_empty(&dummy->displays)) { - d = shl_dlist_entry(dummy->displays.prev, - struct display, list); + d = shl_dlist_entry(dummy->displays.prev, struct display, list); shl_dlist_unlink(&d->list); free(d); } @@ -128,8 +130,7 @@ static int dummy_session_event(struct kmscon_session *session, return 0; } -int kmscon_dummy_register(struct kmscon_session **out, - struct kmscon_seat *seat) +int kmscon_dummy_register(struct kmscon_session **out, struct kmscon_seat *seat) { struct kmscon_dummy *dummy; int ret; @@ -143,8 +144,7 @@ int kmscon_dummy_register(struct kmscon_session **out, memset(dummy, 0, sizeof(*dummy)); shl_dlist_init(&dummy->displays); - ret = kmscon_seat_register_session(seat, &dummy->session, - dummy_session_event, dummy); + ret = kmscon_seat_register_session(seat, &dummy->session, dummy_session_event, dummy); if (ret) { log_error("cannot register session for dummy: %d", ret); goto err_free; diff --git a/src/kmscon_dummy.h b/src/kmscon_dummy.h index 9ffbe8d0..b4f3aa24 100644 --- a/src/kmscon_dummy.h +++ b/src/kmscon_dummy.h @@ -36,13 +36,11 @@ #ifdef BUILD_ENABLE_SESSION_DUMMY -int kmscon_dummy_register(struct kmscon_session **out, - struct kmscon_seat *seat); +int kmscon_dummy_register(struct kmscon_session **out, struct kmscon_seat *seat); #else /* !BUILD_ENABLE_SESSION_DUMMY */ -static inline int kmscon_dummy_register(struct kmscon_session **out, - struct kmscon_seat *seat) +static inline int kmscon_dummy_register(struct kmscon_session **out, struct kmscon_seat *seat) { return -EOPNOTSUPP; } diff --git a/src/kmscon_main.c b/src/kmscon_main.c index 7bb74c21..0b995b3d 100644 --- a/src/kmscon_main.c +++ b/src/kmscon_main.c @@ -34,11 +34,11 @@ #include "conf.h" #include "eloop.h" #include "kmscon_conf.h" -#include "shl_module.h" #include "kmscon_seat.h" #include "shl_dlist.h" #include "shl_log.h" #include "shl_misc.h" +#include "shl_module.h" #include "text.h" #include "uterm_input.h" #include "uterm_monitor.h" @@ -85,8 +85,7 @@ const char be_drm3d[] = "drm3d"; const char be_drm2d[] = "drm2d"; const char be_fbdev[] = "fbdev"; -static int app_seat_event(struct kmscon_seat *s, unsigned int event, - void *data) +static int app_seat_event(struct kmscon_seat *s, unsigned int event, void *data) { struct app_seat *seat = data; struct kmscon_app *app = seat->app; @@ -97,13 +96,15 @@ static int app_seat_event(struct kmscon_seat *s, unsigned int event, case KMSCON_SEAT_FOREGROUND: seat->awake = true; - shl_dlist_for_each(iter, &seat->videos) { + shl_dlist_for_each(iter, &seat->videos) + { vid = shl_dlist_entry(iter, struct app_video, list); uterm_video_wake_up(vid->video); } break; case KMSCON_SEAT_BACKGROUND: - shl_dlist_for_each(iter, &seat->videos) { + shl_dlist_for_each(iter, &seat->videos) + { vid = shl_dlist_entry(iter, struct app_video, list); uterm_video_sleep(vid->video); } @@ -112,8 +113,7 @@ static int app_seat_event(struct kmscon_seat *s, unsigned int event, break; case KMSCON_SEAT_SLEEP: if (app->vt_exit_count > 0) { - log_debug("deactivating VT on exit, %d to go", - app->vt_exit_count - 1); + log_debug("deactivating VT on exit, %d to go", app->vt_exit_count - 1); if (!--app->vt_exit_count) ev_eloop_exit(app->eloop); } @@ -129,8 +129,7 @@ static int app_seat_event(struct kmscon_seat *s, unsigned int event, if (!app->conf->listen) { --app->running_seats; if (!app->running_seats) { - log_debug("seat HUP on %s in default-mode; exiting...", - seat->name); + log_debug("seat HUP on %s in default-mode; exiting...", seat->name); ev_eloop_exit(app->eloop); } else { log_debug("seat HUP on %s in default-mode; %u more running seats", @@ -146,8 +145,7 @@ static int app_seat_event(struct kmscon_seat *s, unsigned int event, * seat here and ignore it. * You can destroy and recreate the seat to make kmscon * pick it up again in listen-mode. */ - log_warning("seat HUP on %s in listen-mode; dropping seat...", - seat->name); + log_warning("seat HUP on %s in listen-mode; dropping seat...", seat->name); } break; @@ -156,8 +154,7 @@ static int app_seat_event(struct kmscon_seat *s, unsigned int event, return 0; } -static int app_seat_new(struct kmscon_app *app, const char *sname, - struct uterm_monitor_seat *useat) +static int app_seat_new(struct kmscon_app *app, const char *sname, struct uterm_monitor_seat *useat) { struct app_seat *seat; int ret; @@ -187,8 +184,7 @@ static int app_seat_new(struct kmscon_app *app, const char *sname, } if (!found) { - log_info("ignoring new seat %s as not specified in seat-list", - sname); + log_info("ignoring new seat %s as not specified in seat-list", sname); return -ERANGE; } @@ -215,15 +211,13 @@ static int app_seat_new(struct kmscon_app *app, const char *sname, if (!app->conf->listen) types |= UTERM_VT_REAL; - ret = kmscon_seat_new(&seat->seat, app->conf_ctx, app->eloop, app->vtm, - types, sname, app_seat_event, seat); + ret = kmscon_seat_new(&seat->seat, app->conf_ctx, app->eloop, app->vtm, types, sname, + app_seat_event, seat); if (ret) { if (ret == -ERANGE) - log_debug("ignoring seat %s as it already has a seat manager", - sname); + log_debug("ignoring seat %s as it already has a seat manager", sname); else - log_error("cannot create seat object on seat %s: %d", - sname, ret); + log_error("cannot create seat object on seat %s: %d", sname, ret); goto err_name; } seat->conf_ctx = kmscon_seat_get_conf(seat->seat); @@ -255,8 +249,7 @@ static void app_seat_free(struct app_seat *seat) free(seat); } -static void app_seat_video_event(struct uterm_video *video, - struct uterm_video_hotplug *ev, +static void app_seat_video_event(struct uterm_video *video, struct uterm_video_hotplug *ev, void *data) { struct app_video *vid = data; @@ -271,24 +264,20 @@ static void app_seat_video_event(struct uterm_video *video, break; case UTERM_REFRESH: if (!vid->seat->app->exiting) - kmscon_seat_refresh_display(vid->seat->seat, - ev->display); + kmscon_seat_refresh_display(vid->seat->seat, ev->display); break; } } -static bool app_seat_gpu_is_ignored(struct app_seat *seat, - unsigned int type, - bool drm_backed, - bool primary, - bool aux, - const char *node) +static bool app_seat_gpu_is_ignored(struct app_seat *seat, unsigned int type, bool drm_backed, + bool primary, bool aux, const char *node) { switch (type) { case UTERM_MONITOR_FBDEV: if (seat->conf->drm) { if (drm_backed) { - log_info("ignoring video device %s on seat %s as it is a DRM-fbdev device", + log_info("ignoring video device %s on seat %s as it is a DRM-fbdev " + "device", node, seat->name); return true; } @@ -296,25 +285,25 @@ static bool app_seat_gpu_is_ignored(struct app_seat *seat, break; case UTERM_MONITOR_DRM: if (!seat->conf->drm) { - log_info("ignoring video device %s on seat %s as it is a DRM device", - node, seat->name); + log_info("ignoring video device %s on seat %s as it is a DRM device", node, + seat->name); return true; } break; default: - log_info("ignoring unknown video device %s on seat %s", - node, seat->name); + log_info("ignoring unknown video device %s on seat %s", node, seat->name); return true; } if (seat->conf->gpus == KMSCON_GPU_PRIMARY && !primary) { - log_info("ignoring video device %s on seat %s as it is no primary GPU", - node, seat->name); + log_info("ignoring video device %s on seat %s as it is no primary GPU", node, + seat->name); return true; } if (seat->conf->gpus == KMSCON_GPU_AUX && !primary && !aux) { - log_info("ignoring video device %s on seat %s as it is neither a primary nor auxiliary GPU", + log_info("ignoring video device %s on seat %s as it is neither a primary nor " + "auxiliary GPU", node, seat->name); return true; } @@ -322,11 +311,8 @@ static bool app_seat_gpu_is_ignored(struct app_seat *seat, return false; } -static int app_seat_add_video(struct app_seat *seat, - unsigned int type, - unsigned int flags, - const char *node, - struct uterm_monitor_dev *udev) +static int app_seat_add_video(struct app_seat *seat, unsigned int type, unsigned int flags, + const char *node, struct uterm_monitor_dev *udev) { int ret; const char *backend; @@ -335,19 +321,16 @@ static int app_seat_add_video(struct app_seat *seat, if (seat->app->exiting) return -EBUSY; - if (app_seat_gpu_is_ignored(seat, type, - flags & UTERM_MONITOR_DRM_BACKED, - flags & UTERM_MONITOR_PRIMARY, - flags & UTERM_MONITOR_AUX, - node)) + if (app_seat_gpu_is_ignored(seat, type, flags & UTERM_MONITOR_DRM_BACKED, + flags & UTERM_MONITOR_PRIMARY, flags & UTERM_MONITOR_AUX, node)) return -ERANGE; log_debug("new video device %s on seat %s", node, seat->name); vid = malloc(sizeof(*vid)); if (!vid) { - log_error("cannot allocate memory for video device %s on seat %s", - node, seat->name); + log_error("cannot allocate memory for video device %s on seat %s", node, + seat->name); return -ENOMEM; } memset(vid, 0, sizeof(*vid)); @@ -356,8 +339,7 @@ static int app_seat_add_video(struct app_seat *seat, vid->node = strdup(node); if (!vid->node) { - log_error("cannot copy video device name %s on seat %s", - node, seat->name); + log_error("cannot copy video device name %s on seat %s", node, seat->name); ret = -ENOMEM; goto err_free; } @@ -374,21 +356,23 @@ static int app_seat_add_video(struct app_seat *seat, unsigned int desired_width = 0; unsigned int desired_height = 0; if (seat->conf->mode != NULL) { - int items_parsed = sscanf(seat->conf->mode, "%ux%u", &desired_width, &desired_height); + int items_parsed = + sscanf(seat->conf->mode, "%ux%u", &desired_width, &desired_height); if (items_parsed != 2) { - log_warning("The argument to --mode is not in the format x. Ignoring"); + log_warning("The argument to --mode is not in the format x. " + "Ignoring"); desired_width = 0; desired_height = 0; } } - ret = uterm_video_new(&vid->video, seat->app->eloop, node, backend, - desired_width, desired_height); + ret = uterm_video_new(&vid->video, seat->app->eloop, node, backend, desired_width, + desired_height); if (ret) { if (backend == be_drm3d) { log_info("cannot create drm3d device %s on seat %s (%d); trying drm2d mode", vid->node, seat->name, ret); - ret = uterm_video_new(&vid->video, seat->app->eloop, - node, be_drm2d, desired_width, desired_height); + ret = uterm_video_new(&vid->video, seat->app->eloop, node, be_drm2d, + desired_width, desired_height); if (ret) goto err_node; } else { @@ -398,8 +382,8 @@ static int app_seat_add_video(struct app_seat *seat, ret = uterm_video_register_cb(vid->video, app_seat_video_event, vid); if (ret) { - log_error("cannot register video callback for device %s on seat %s: %d", - vid->node, seat->name, ret); + log_error("cannot register video callback for device %s on seat %s: %d", vid->node, + seat->name, ret); goto err_video; } @@ -440,9 +424,7 @@ static void app_seat_remove_video(struct app_seat *seat, struct app_video *vid) free(vid); } -static void app_monitor_event(struct uterm_monitor *mon, - struct uterm_monitor_event *ev, - void *data) +static void app_monitor_event(struct uterm_monitor *mon, struct uterm_monitor_event *ev, void *data) { struct kmscon_app *app = data; struct app_seat *seat; @@ -467,15 +449,13 @@ static void app_monitor_event(struct uterm_monitor *mon, switch (ev->dev_type) { case UTERM_MONITOR_DRM: case UTERM_MONITOR_FBDEV: - ret = app_seat_add_video(seat, ev->dev_type, - ev->dev_flags, - ev->dev_node, ev->dev); + ret = app_seat_add_video(seat, ev->dev_type, ev->dev_flags, ev->dev_node, + ev->dev); if (ret) return; break; case UTERM_MONITOR_INPUT: - log_debug("new input device %s on seat %s", - ev->dev_node, seat->name); + log_debug("new input device %s on seat %s", ev->dev_node, seat->name); kmscon_seat_add_input(seat->seat, ev->dev_node, seat->conf->mouse); break; } @@ -492,8 +472,7 @@ static void app_monitor_event(struct uterm_monitor *mon, app_seat_remove_video(seat, ev->dev_data); break; case UTERM_MONITOR_INPUT: - log_debug("free input device %s on seat %s", - ev->dev_node, seat->name); + log_debug("free input device %s on seat %s", ev->dev_node, seat->name); kmscon_seat_remove_input(seat->seat, ev->dev_node); break; } @@ -510,8 +489,8 @@ static void app_monitor_event(struct uterm_monitor *mon, if (!vid) return; - log_debug("video hotplug event on device %s on seat %s", - vid->node, seat->name); + log_debug("video hotplug event on device %s on seat %s", vid->node, + seat->name); uterm_video_poll(vid->video); break; } @@ -519,9 +498,7 @@ static void app_monitor_event(struct uterm_monitor *mon, } } -static void app_sig_generic(struct ev_eloop *eloop, - struct signalfd_siginfo *info, - void *data) +static void app_sig_generic(struct ev_eloop *eloop, struct signalfd_siginfo *info, void *data) { struct kmscon_app *app = data; @@ -529,22 +506,15 @@ static void app_sig_generic(struct ev_eloop *eloop, ev_eloop_exit(app->eloop); } -static void app_sig_ignore(struct ev_eloop *eloop, - struct signalfd_siginfo *info, - void *data) -{ -} +static void app_sig_ignore(struct ev_eloop *eloop, struct signalfd_siginfo *info, void *data) {} static void destroy_app(struct kmscon_app *app) { uterm_monitor_unref(app->mon); uterm_vt_master_unref(app->vtm); - ev_eloop_unregister_signal_cb(app->eloop, SIGPIPE, app_sig_ignore, - app); - ev_eloop_unregister_signal_cb(app->eloop, SIGINT, app_sig_generic, - app); - ev_eloop_unregister_signal_cb(app->eloop, SIGTERM, app_sig_generic, - app); + ev_eloop_unregister_signal_cb(app->eloop, SIGPIPE, app_sig_ignore, app); + ev_eloop_unregister_signal_cb(app->eloop, SIGINT, app_sig_generic, app); + ev_eloop_unregister_signal_cb(app->eloop, SIGTERM, app_sig_generic, app); ev_eloop_unref(app->eloop); } @@ -560,22 +530,19 @@ static int setup_app(struct kmscon_app *app) goto err_app; } - ret = ev_eloop_register_signal_cb(app->eloop, SIGTERM, - app_sig_generic, app); + ret = ev_eloop_register_signal_cb(app->eloop, SIGTERM, app_sig_generic, app); if (ret) { log_error("cannot register SIGTERM signal handler: %d", ret); goto err_app; } - ret = ev_eloop_register_signal_cb(app->eloop, SIGINT, - app_sig_generic, app); + ret = ev_eloop_register_signal_cb(app->eloop, SIGINT, app_sig_generic, app); if (ret) { log_error("cannot register SIGINT signal handler: %d", ret); goto err_app; } - ret = ev_eloop_register_signal_cb(app->eloop, SIGPIPE, - app_sig_ignore, app); + ret = ev_eloop_register_signal_cb(app->eloop, SIGPIPE, app_sig_ignore, app); if (ret) { log_error("cannot register SIGPIPE signal handler: %d", ret); goto err_app; @@ -676,8 +643,7 @@ int main(int argc, char **argv) kmscon_conf_free(conf_ctx); err_out: if (ret) - log_err("cannot initialize kmscon, errno %d: %s", - ret, strerror(-ret)); + log_err("cannot initialize kmscon, errno %d: %s", ret, strerror(-ret)); log_info("exiting"); return -ret; } diff --git a/src/kmscon_mod_gltex.c b/src/kmscon_mod_gltex.c index 841786a5..55f1f829 100644 --- a/src/kmscon_mod_gltex.c +++ b/src/kmscon_mod_gltex.c @@ -30,9 +30,9 @@ #include #include -#include "text.h" -#include "shl_module_interface.h" #include "shl_log.h" +#include "shl_module_interface.h" +#include "text.h" #define LOG_SUBSYSTEM "mod_gltex" diff --git a/src/kmscon_mod_pango.c b/src/kmscon_mod_pango.c index bb42f0c3..7d156138 100644 --- a/src/kmscon_mod_pango.c +++ b/src/kmscon_mod_pango.c @@ -31,8 +31,8 @@ #include #include #include "font.h" -#include "shl_module_interface.h" #include "shl_log.h" +#include "shl_module_interface.h" #define LOG_SUBSYSTEM "mod_pango" diff --git a/src/kmscon_mod_unifont.c b/src/kmscon_mod_unifont.c index a2625527..77485925 100644 --- a/src/kmscon_mod_unifont.c +++ b/src/kmscon_mod_unifont.c @@ -31,8 +31,8 @@ #include #include #include "font.h" -#include "shl_module_interface.h" #include "shl_log.h" +#include "shl_module_interface.h" #define LOG_SUBSYSTEM "mod_unifont" diff --git a/src/kmscon_seat.c b/src/kmscon_seat.c index ade4433c..837afae8 100644 --- a/src/kmscon_seat.c +++ b/src/kmscon_seat.c @@ -100,8 +100,7 @@ struct kmscon_seat { void *data; }; -static int session_call(struct kmscon_session *sess, unsigned int event, - struct uterm_display *disp) +static int session_call(struct kmscon_session *sess, unsigned int event, struct uterm_display *disp) { struct kmscon_session_event ev; @@ -126,20 +125,17 @@ static int session_call_deactivate(struct kmscon_session *sess) return session_call(sess, KMSCON_SESSION_DEACTIVATE, NULL); } -static void session_call_display_new(struct kmscon_session *sess, - struct uterm_display *disp) +static void session_call_display_new(struct kmscon_session *sess, struct uterm_display *disp) { session_call(sess, KMSCON_SESSION_DISPLAY_NEW, disp); } -static void session_call_display_gone(struct kmscon_session *sess, - struct uterm_display *disp) +static void session_call_display_gone(struct kmscon_session *sess, struct uterm_display *disp) { session_call(sess, KMSCON_SESSION_DISPLAY_GONE, disp); } -static void session_call_display_refresh(struct kmscon_session *sess, - struct uterm_display *disp) +static void session_call_display_refresh(struct kmscon_session *sess, struct uterm_display *disp) { session_call(sess, KMSCON_SESSION_DISPLAY_REFRESH, disp); } @@ -160,8 +156,7 @@ static void activate_display(struct kmscon_display *d) * configuration files. */ if (uterm_display_get_state(d->disp) == UTERM_DISPLAY_INACTIVE) { if (seat->conf->use_original_mode) - ret = uterm_display_activate(d->disp, - uterm_display_get_original(d->disp)); + ret = uterm_display_activate(d->disp, uterm_display_get_original(d->disp)); else ret = uterm_display_activate(d->disp, NULL); @@ -174,10 +169,10 @@ static void activate_display(struct kmscon_display *d) ret = uterm_display_set_dpms(d->disp, UTERM_DPMS_ON); if (ret) - log_warning("cannot set DPMS state to on for display: %d", - ret); + log_warning("cannot set DPMS state to on for display: %d", ret); - shl_dlist_for_each_safe(iter, tmp, &seat->sessions) { + shl_dlist_for_each_safe(iter, tmp, &seat->sessions) + { s = shl_dlist_entry(iter, struct kmscon_session, list); session_call_display_new(s, d->disp); } @@ -198,15 +193,15 @@ static int seat_go_foreground(struct kmscon_seat *seat, bool force) if (seat->cb) { ret = seat->cb(seat, KMSCON_SEAT_FOREGROUND, seat->data); if (ret) { - log_warning("cannot put seat %s into foreground: %d", - seat->name, ret); + log_warning("cannot put seat %s into foreground: %d", seat->name, ret); return ret; } } seat->foreground = true; - shl_dlist_for_each(iter, &seat->displays) { + shl_dlist_for_each(iter, &seat->displays) + { d = shl_dlist_entry(iter, struct kmscon_display, list); activate_display(d); } @@ -226,8 +221,7 @@ static int seat_go_background(struct kmscon_seat *seat, bool force) if (seat->cb) { ret = seat->cb(seat, KMSCON_SEAT_BACKGROUND, seat->data); if (ret) { - log_warning("cannot put seat %s into background: %d", - seat->name, ret); + log_warning("cannot put seat %s into background: %d", seat->name, ret); return ret; } } @@ -255,8 +249,7 @@ static int seat_go_asleep(struct kmscon_seat *seat, bool force) if (seat->cb) { ret = seat->cb(seat, KMSCON_SEAT_SLEEP, seat->data); if (ret) { - log_warning("cannot put seat %s asleep: %d", - seat->name, ret); + log_warning("cannot put seat %s asleep: %d", seat->name, ret); if (!force) return ret; } @@ -278,8 +271,7 @@ static int seat_go_awake(struct kmscon_seat *seat) if (seat->cb) { ret = seat->cb(seat, KMSCON_SEAT_WAKE_UP, seat->data); if (ret) { - log_warning("cannot wake up seat %s: %d", seat->name, - ret); + log_warning("cannot wake up seat %s: %d", seat->name, ret); return ret; } } @@ -301,8 +293,7 @@ static int seat_run(struct kmscon_seat *seat) return 0; if (!seat->scheduled_sess) { - log_debug("no session scheduled to run (num %zu)", - seat->session_count); + log_debug("no session scheduled to run (num %zu)", seat->session_count); return -ENOENT; } session = seat->scheduled_sess; @@ -310,15 +301,15 @@ static int seat_run(struct kmscon_seat *seat) if (session->foreground && !seat->foreground) { ret = seat_go_foreground(seat, false); if (ret) { - log_warning("cannot put seat %s into foreground for session %p", - seat->name, session); + log_warning("cannot put seat %s into foreground for session %p", seat->name, + session); return ret; } } else if (!session->foreground && seat->foreground) { ret = seat_go_background(seat, false); if (ret) { - log_warning("cannot put seat %s into background for session %p", - seat->name, session); + log_warning("cannot put seat %s into background for session %p", seat->name, + session); return ret; } } @@ -355,11 +346,9 @@ static int seat_pause(struct kmscon_seat *seat, bool force) ret = session_call_deactivate(seat->current_sess); if (ret) { if (ret == -EINPROGRESS) - log_debug("pending deactivation for session %p", - seat->current_sess); + log_debug("pending deactivation for session %p", seat->current_sess); else - log_warning("cannot deactivate session %p: %d", - seat->current_sess, ret); + log_warning("cannot deactivate session %p: %d", seat->current_sess, ret); if (!force) return ret; } @@ -387,7 +376,8 @@ static void seat_reschedule(struct kmscon_seat *seat) else start = &seat->sessions; - shl_dlist_for_each_but_one(iter, start, &seat->sessions) { + shl_dlist_for_each_but_one(iter, start, &seat->sessions) + { sess = shl_dlist_entry(iter, struct kmscon_session, list); if (sess == seat->dummy_sess || !sess->enabled) continue; @@ -403,8 +393,7 @@ static void seat_reschedule(struct kmscon_seat *seat) static bool seat_has_schedule(struct kmscon_seat *seat) { - return seat->scheduled_sess && - seat->scheduled_sess != seat->current_sess; + return seat->scheduled_sess && seat->scheduled_sess != seat->current_sess; } static int seat_switch(struct kmscon_seat *seat) @@ -432,11 +421,11 @@ static void seat_next(struct kmscon_seat *seat) return; next = NULL; - if (!seat->current_sess && seat->dummy_sess && - seat->dummy_sess->enabled) + if (!seat->current_sess && seat->dummy_sess && seat->dummy_sess->enabled) next = seat->dummy_sess; - shl_dlist_for_each_but_one(iter, cur, &seat->sessions) { + shl_dlist_for_each_but_one(iter, cur, &seat->sessions) + { s = shl_dlist_entry(iter, struct kmscon_session, list); if (!s->enabled || seat->dummy_sess == s) continue; @@ -465,11 +454,11 @@ static void seat_prev(struct kmscon_seat *seat) return; prev = NULL; - if (!seat->current_sess && seat->dummy_sess && - seat->dummy_sess->enabled) + if (!seat->current_sess && seat->dummy_sess && seat->dummy_sess->enabled) prev = seat->dummy_sess; - shl_dlist_for_each_reverse_but_one(iter, cur, &seat->sessions) { + shl_dlist_for_each_reverse_but_one(iter, cur, &seat->sessions) + { s = shl_dlist_entry(iter, struct kmscon_session, list); if (!s->enabled || seat->dummy_sess == s) continue; @@ -485,8 +474,7 @@ static void seat_prev(struct kmscon_seat *seat) seat_switch(seat); } -static int seat_add_display(struct kmscon_seat *seat, - struct uterm_display *disp) +static int seat_add_display(struct kmscon_seat *seat, struct uterm_display *disp) { struct kmscon_display *d; @@ -505,8 +493,7 @@ static int seat_add_display(struct kmscon_seat *seat, return 0; } -static void seat_remove_display(struct kmscon_seat *seat, - struct kmscon_display *d) +static void seat_remove_display(struct kmscon_seat *seat, struct kmscon_display *d) { struct shl_dlist *iter, *tmp; struct kmscon_session *s; @@ -516,7 +503,8 @@ static void seat_remove_display(struct kmscon_seat *seat, shl_dlist_unlink(&d->list); if (d->activated) { - shl_dlist_for_each_safe(iter, tmp, &seat->sessions) { + shl_dlist_for_each_safe(iter, tmp, &seat->sessions) + { s = shl_dlist_entry(iter, struct kmscon_session, list); session_call_display_gone(s, d->disp); } @@ -526,8 +514,7 @@ static void seat_remove_display(struct kmscon_seat *seat, free(d); } -static void seat_refresh_display(struct kmscon_seat *seat, - struct kmscon_display *d) +static void seat_refresh_display(struct kmscon_seat *seat, struct kmscon_display *d) { struct shl_dlist *iter; struct kmscon_session *s; @@ -535,15 +522,15 @@ static void seat_refresh_display(struct kmscon_seat *seat, log_debug("refresh display %p from seat %s", d->disp, seat->name); if (d->activated) { - shl_dlist_for_each(iter, &seat->sessions) { + shl_dlist_for_each(iter, &seat->sessions) + { s = shl_dlist_entry(iter, struct kmscon_session, list); session_call_display_refresh(s, d->disp); } } } -static int seat_vt_event(struct uterm_vt *vt, struct uterm_vt_event *ev, - void *data) +static int seat_vt_event(struct uterm_vt *vt, struct uterm_vt_event *ev, void *data) { struct kmscon_seat *seat = data; int ret; @@ -576,8 +563,7 @@ static int seat_vt_event(struct uterm_vt *vt, struct uterm_vt_event *ev, return 0; } -static void seat_input_event(struct uterm_input *input, - struct uterm_input_key_event *ev, +static void seat_input_event(struct uterm_input *input, struct uterm_input_key_event *ev, void *data) { struct kmscon_seat *seat = data; @@ -587,24 +573,22 @@ static void seat_input_event(struct uterm_input *input, if (ev->handled || !seat->awake) return; - if (conf_grab_matches(seat->conf->grab_session_next, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(seat->conf->grab_session_next, ev->mods, ev->num_syms, ev->keysyms)) { ev->handled = true; if (!seat->conf->session_control) return; seat_next(seat); return; } - if (conf_grab_matches(seat->conf->grab_session_prev, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(seat->conf->grab_session_prev, ev->mods, ev->num_syms, ev->keysyms)) { ev->handled = true; if (!seat->conf->session_control) return; seat_prev(seat); return; } - if (conf_grab_matches(seat->conf->grab_session_dummy, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(seat->conf->grab_session_dummy, ev->mods, ev->num_syms, + ev->keysyms)) { ev->handled = true; if (!seat->conf->session_control) return; @@ -612,8 +596,8 @@ static void seat_input_event(struct uterm_input *input, seat_switch(seat); return; } - if (conf_grab_matches(seat->conf->grab_session_close, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(seat->conf->grab_session_close, ev->mods, ev->num_syms, + ev->keysyms)) { ev->handled = true; if (!seat->conf->session_control) return; @@ -638,13 +622,11 @@ static void seat_input_event(struct uterm_input *input, kmscon_session_unregister(s); return; } - if (conf_grab_matches(seat->conf->grab_terminal_new, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(seat->conf->grab_terminal_new, ev->mods, ev->num_syms, ev->keysyms)) { ev->handled = true; if (!seat->conf->session_control) return; - ret = kmscon_terminal_register(&s, seat, - uterm_vt_get_num(seat->vt)); + ret = kmscon_terminal_register(&s, seat, uterm_vt_get_num(seat->vt)); if (ret == -EOPNOTSUPP) { log_notice("terminal support not compiled in"); } else if (ret) { @@ -678,14 +660,9 @@ static const char *find_locale(void) return locale; } -int kmscon_seat_new(struct kmscon_seat **out, - struct conf_ctx *main_conf, - struct ev_eloop *eloop, - struct uterm_vt_master *vtm, - unsigned int vt_types, - const char *seatname, - kmscon_seat_cb_t cb, - void *data) +int kmscon_seat_new(struct kmscon_seat **out, struct conf_ctx *main_conf, struct ev_eloop *eloop, + struct uterm_vt_master *vtm, unsigned int vt_types, const char *seatname, + kmscon_seat_cb_t cb, void *data) { struct kmscon_seat *seat; int ret; @@ -723,8 +700,7 @@ int kmscon_seat_new(struct kmscon_seat **out, ret = kmscon_conf_load_seat(seat->conf_ctx, main_conf, seat->name); if (ret) { - log_error("cannot parse seat configuration on seat %s: %d", - seat->name, ret); + log_error("cannot parse seat configuration on seat %s: %d", seat->name, ret); goto err_conf; } @@ -737,30 +713,23 @@ int kmscon_seat_new(struct kmscon_seat **out, if (seat->conf->xkb_keymap && *seat->conf->xkb_keymap) { ret = shl_read_file(seat->conf->xkb_keymap, &keymap, NULL); if (ret) - log_error("cannot read keymap file %s: %d", - seat->conf->xkb_keymap, ret); + log_error("cannot read keymap file %s: %d", seat->conf->xkb_keymap, ret); } compose_file = NULL; compose_file_len = 0; if (seat->conf->xkb_compose_file && *seat->conf->xkb_compose_file) { - ret = shl_read_file(seat->conf->xkb_compose_file, - &compose_file, &compose_file_len); + ret = shl_read_file(seat->conf->xkb_compose_file, &compose_file, &compose_file_len); if (ret) - log_error("cannot read compose file %s: %d", - seat->conf->xkb_compose_file, ret); + log_error("cannot read compose file %s: %d", seat->conf->xkb_compose_file, + ret); } - ret = uterm_input_new(&seat->input, seat->eloop, - seat->conf->xkb_model, - seat->conf->xkb_layout, - seat->conf->xkb_variant, - seat->conf->xkb_options, - locale, keymap, compose_file, - compose_file_len, - seat->conf->xkb_repeat_delay, - seat->conf->xkb_repeat_rate, - log_llog, NULL); + ret = uterm_input_new(&seat->input, seat->eloop, seat->conf->xkb_model, + seat->conf->xkb_layout, seat->conf->xkb_variant, + seat->conf->xkb_options, locale, keymap, compose_file, + compose_file_len, seat->conf->xkb_repeat_delay, + seat->conf->xkb_repeat_rate, log_llog, NULL); free(keymap); if (ret) @@ -770,15 +739,14 @@ int kmscon_seat_new(struct kmscon_seat **out, if (ret) goto err_input; - ret = uterm_vt_allocate(seat->vtm, &seat->vt, - vt_types, seat->name, - seat->input, seat->conf->vt, seat_vt_event, - seat); + ret = uterm_vt_allocate(seat->vtm, &seat->vt, vt_types, seat->name, seat->input, + seat->conf->vt, seat_vt_event, seat); if (ret) goto err_input_cb; if (seat->conf->session_control && uterm_vt_get_type(seat->vt) == UTERM_VT_REAL) { - log_warning("session control cannot be configured on real VT, disabling session control"); + log_warning("session control cannot be configured on real VT, disabling session " + "control"); seat->conf->session_control = false; } @@ -811,25 +779,20 @@ void kmscon_seat_free(struct kmscon_seat *seat) ret = seat_pause(seat, true); if (ret) - log_warning("destroying seat %s while session %p is active", - seat->name, seat->current_sess); + log_warning("destroying seat %s while session %p is active", seat->name, + seat->current_sess); ret = seat_go_asleep(seat, true); if (ret) - log_warning("destroying seat %s while still awake: %d", - seat->name, ret); + log_warning("destroying seat %s while still awake: %d", seat->name, ret); while (!shl_dlist_empty(&seat->sessions)) { - s = shl_dlist_entry(seat->sessions.next, - struct kmscon_session, - list); + s = shl_dlist_entry(seat->sessions.next, struct kmscon_session, list); kmscon_session_unregister(s); } while (!shl_dlist_empty(&seat->displays)) { - d = shl_dlist_entry(seat->displays.next, - struct kmscon_display, - list); + d = shl_dlist_entry(seat->displays.next, struct kmscon_display, list); seat_remove_display(seat, d); } @@ -862,8 +825,7 @@ void kmscon_seat_startup(struct kmscon_seat *seat) } if (seat->conf->terminal_session) { - ret = kmscon_terminal_register(&s, seat, - uterm_vt_get_num(seat->vt)); + ret = kmscon_terminal_register(&s, seat, uterm_vt_get_num(seat->vt)); if (ret == -EOPNOTSUPP) log_notice("terminal support not compiled in"); else if (ret) @@ -872,13 +834,11 @@ void kmscon_seat_startup(struct kmscon_seat *seat) kmscon_session_enable(s); } - if (seat->conf->switchvt || - uterm_vt_get_type(seat->vt) == UTERM_VT_FAKE) + if (seat->conf->switchvt || uterm_vt_get_type(seat->vt) == UTERM_VT_FAKE) uterm_vt_activate(seat->vt); } -int kmscon_seat_add_display(struct kmscon_seat *seat, - struct uterm_display *disp) +int kmscon_seat_add_display(struct kmscon_seat *seat, struct uterm_display *disp) { if (!seat || !disp) return -EINVAL; @@ -886,8 +846,7 @@ int kmscon_seat_add_display(struct kmscon_seat *seat, return seat_add_display(seat, disp); } -void kmscon_seat_remove_display(struct kmscon_seat *seat, - struct uterm_display *disp) +void kmscon_seat_remove_display(struct kmscon_seat *seat, struct uterm_display *disp) { struct shl_dlist *iter; struct kmscon_display *d; @@ -895,7 +854,8 @@ void kmscon_seat_remove_display(struct kmscon_seat *seat, if (!seat || !disp) return; - shl_dlist_for_each(iter, &seat->displays) { + shl_dlist_for_each(iter, &seat->displays) + { d = shl_dlist_entry(iter, struct kmscon_display, list); if (d->disp != disp) continue; @@ -905,8 +865,7 @@ void kmscon_seat_remove_display(struct kmscon_seat *seat, } } -void kmscon_seat_refresh_display(struct kmscon_seat *seat, - struct uterm_display *disp) +void kmscon_seat_refresh_display(struct kmscon_seat *seat, struct uterm_display *disp) { struct shl_dlist *iter; struct kmscon_display *d; @@ -914,7 +873,8 @@ void kmscon_seat_refresh_display(struct kmscon_seat *seat, if (!seat || !disp) return; - shl_dlist_for_each(iter, &seat->displays) { + shl_dlist_for_each(iter, &seat->displays) + { d = shl_dlist_entry(iter, struct kmscon_display, list); if (d->disp != disp) continue; @@ -982,10 +942,10 @@ void kmscon_seat_schedule(struct kmscon_seat *seat, unsigned int id) return; next = seat->dummy_sess; - shl_dlist_for_each(iter, &seat->sessions) { + shl_dlist_for_each(iter, &seat->sessions) + { s = shl_dlist_entry(iter, struct kmscon_session, list); - if (!s->enabled || seat->dummy_sess == s || - seat->current_sess == s) + if (!s->enabled || seat->dummy_sess == s || seat->current_sess == s) continue; next = s; @@ -998,10 +958,8 @@ void kmscon_seat_schedule(struct kmscon_seat *seat, unsigned int id) seat_switch(seat); } -int kmscon_seat_register_session(struct kmscon_seat *seat, - struct kmscon_session **out, - kmscon_session_cb_t cb, - void *data) +int kmscon_seat_register_session(struct kmscon_seat *seat, struct kmscon_session **out, + kmscon_session_cb_t cb, void *data) { struct kmscon_session *sess; struct shl_dlist *iter; @@ -1010,8 +968,7 @@ int kmscon_seat_register_session(struct kmscon_seat *seat, if (!seat || !out) return -EINVAL; - if (seat->conf->session_max && - seat->session_count >= seat->conf->session_max) { + if (seat->conf->session_max && seat->session_count >= seat->conf->session_max) { log_warning("maximum number of sessions reached (%d), dropping new session", seat->conf->session_max); return -EOVERFLOW; @@ -1019,8 +976,7 @@ int kmscon_seat_register_session(struct kmscon_seat *seat, sess = malloc(sizeof(*sess)); if (!sess) { - log_error("cannot allocate memory for new session on seat %s", - seat->name); + log_error("cannot allocate memory for new session on seat %s", seat->name); return -ENOMEM; } @@ -1042,7 +998,8 @@ int kmscon_seat_register_session(struct kmscon_seat *seat, ++seat->session_count; *out = sess; - shl_dlist_for_each(iter, &seat->displays) { + shl_dlist_for_each(iter, &seat->displays) + { d = shl_dlist_entry(iter, struct kmscon_display, list); session_call_display_new(sess, d->disp); } @@ -1088,7 +1045,8 @@ void kmscon_session_unregister(struct kmscon_session *sess) ret = seat_pause(seat, true); if (ret) { forced = true; - log_warning("unregistering active session %p; skipping automatic session-switch", + log_warning("unregistering active session %p; skipping automatic " + "session-switch", sess); } } @@ -1194,8 +1152,7 @@ void kmscon_session_enable(struct kmscon_session *sess) log_debug("enable session %p", sess); sess->enabled = true; if (sess->seat && - (!sess->seat->current_sess || - sess->seat->current_sess == sess->seat->dummy_sess)) { + (!sess->seat->current_sess || sess->seat->current_sess == sess->seat->dummy_sess)) { sess->seat->scheduled_sess = sess; if (seat_has_schedule(sess->seat)) seat_switch(sess->seat); @@ -1230,8 +1187,7 @@ void kmscon_session_notify_deactivated(struct kmscon_session *sess) return; sched = seat->async_schedule; - log_debug("session %p notified core about deactivation (schedule: %u)", - sess, sched); + log_debug("session %p notified core about deactivation (schedule: %u)", sess, sched); session_deactivate(sess); seat_reschedule(seat); diff --git a/src/kmscon_seat.h b/src/kmscon_seat.h index a179caf4..1efb6a63 100644 --- a/src/kmscon_seat.h +++ b/src/kmscon_seat.h @@ -51,9 +51,7 @@ enum kmscon_seat_event { KMSCON_SEAT_HUP, }; -typedef int (*kmscon_seat_cb_t) (struct kmscon_seat *seat, - unsigned int event, - void *data); +typedef int (*kmscon_seat_cb_t)(struct kmscon_seat *seat, unsigned int event, void *data); enum kmscon_session_event_type { KMSCON_SESSION_DISPLAY_NEW, @@ -69,27 +67,18 @@ struct kmscon_session_event { struct uterm_display *disp; }; -typedef int (*kmscon_session_cb_t) (struct kmscon_session *session, - struct kmscon_session_event *event, - void *data); - -int kmscon_seat_new(struct kmscon_seat **out, - struct conf_ctx *main_conf, - struct ev_eloop *eloop, - struct uterm_vt_master *vtm, - unsigned int vt_types, - const char *seatname, - kmscon_seat_cb_t cb, - void *data); +typedef int (*kmscon_session_cb_t)(struct kmscon_session *session, + struct kmscon_session_event *event, void *data); + +int kmscon_seat_new(struct kmscon_seat **out, struct conf_ctx *main_conf, struct ev_eloop *eloop, + struct uterm_vt_master *vtm, unsigned int vt_types, const char *seatname, + kmscon_seat_cb_t cb, void *data); void kmscon_seat_free(struct kmscon_seat *seat); void kmscon_seat_startup(struct kmscon_seat *seat); -int kmscon_seat_add_display(struct kmscon_seat *seat, - struct uterm_display *disp); -void kmscon_seat_remove_display(struct kmscon_seat *seat, - struct uterm_display *disp); -void kmscon_seat_refresh_display(struct kmscon_seat *seat, - struct uterm_display *disp); +int kmscon_seat_add_display(struct kmscon_seat *seat, struct uterm_display *disp); +void kmscon_seat_remove_display(struct kmscon_seat *seat, struct uterm_display *disp); +void kmscon_seat_refresh_display(struct kmscon_seat *seat, struct uterm_display *disp); int kmscon_seat_add_input(struct kmscon_seat *seat, const char *node, bool mouse); void kmscon_seat_remove_input(struct kmscon_seat *seat, const char *node); @@ -100,10 +89,8 @@ struct conf_ctx *kmscon_seat_get_conf(struct kmscon_seat *seat); void kmscon_seat_schedule(struct kmscon_seat *seat, unsigned int id); -int kmscon_seat_register_session(struct kmscon_seat *seat, - struct kmscon_session **out, - kmscon_session_cb_t cb, - void *data); +int kmscon_seat_register_session(struct kmscon_seat *seat, struct kmscon_session **out, + kmscon_session_cb_t cb, void *data); void kmscon_session_ref(struct kmscon_session *sess); void kmscon_session_unref(struct kmscon_session *sess); diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c index f2ae227c..7b586250 100644 --- a/src/kmscon_terminal.c +++ b/src/kmscon_terminal.c @@ -126,26 +126,22 @@ static void do_clear_margins(struct screen *scr) if (dw) { if (scr->txt->orientation == OR_NORMAL || scr->txt->orientation == OR_LEFT) - uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, - w, 0,dw, sh); + uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, w, 0, dw, sh); else - uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, - 0, 0,dw, sh); + uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, 0, 0, dw, sh); } if (dh) { if (scr->txt->orientation == OR_NORMAL || scr->txt->orientation == OR_RIGHT) - uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, - 0, h, sw, dh); + uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, 0, h, sw, dh); else - uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, - 0, 0, sw, dh); + uterm_display_fill(scr->disp, attr.br, attr.bg, attr.bb, 0, 0, sw, dh); } } static int font_set(struct kmscon_terminal *term); - -static void coord_to_cell(struct kmscon_terminal *term, int32_t x, int32_t y, unsigned int *posx, unsigned int *posy) +static void coord_to_cell(struct kmscon_terminal *term, int32_t x, int32_t y, unsigned int *posx, + unsigned int *posy) { int fw = term->font->attr.width; int fh = term->font->attr.height; @@ -226,7 +222,8 @@ static void redraw_all(struct kmscon_terminal *term) if (!term->awake) return; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); redraw_screen(scr); } @@ -237,7 +234,8 @@ static bool has_kms_display(struct kmscon_terminal *term) struct shl_dlist *iter; struct screen *scr; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); if (uterm_display_is_drm(scr->disp)) return true; @@ -262,7 +260,8 @@ static void update_pointer_max_all(struct kmscon_terminal *term) if (!term->awake) return; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); mode = uterm_display_get_current(scr->disp); @@ -296,7 +295,8 @@ static void redraw_all_test(struct kmscon_terminal *term) if (!term->awake) return; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); if (uterm_display_is_swapping(scr->disp)) scr->swapping = true; @@ -304,8 +304,7 @@ static void redraw_all_test(struct kmscon_terminal *term) } } -static void display_event(struct uterm_display *disp, - struct uterm_display_event *ev, void *data) +static void display_event(struct uterm_display *disp, struct uterm_display_event *ev, void *data) { struct screen *scr = data; @@ -317,16 +316,14 @@ static void display_event(struct uterm_display *disp, do_redraw_screen(scr); } -static void osc_event(struct tsm_vte *vte, const char *osc_string, - size_t osc_len, void *data) +static void osc_event(struct tsm_vte *vte, const char *osc_string, size_t osc_len, void *data) { struct kmscon_terminal *term = data; if (strcmp(osc_string, "setBackground") == 0) { log_info("Got OSC setBackground"); kmscon_session_set_background(term->session); - } - else if (strcmp(osc_string, "setForeground") == 0) { + } else if (strcmp(osc_string, "setForeground") == 0) { log_info("Got OSC setForeground"); kmscon_session_set_foreground(term->session); } @@ -354,8 +351,7 @@ static void mouse_event(struct tsm_vte *vte, enum tsm_mouse_track_mode track_mod * though the size might have changed. force = true and notify = false doesn't * make any sense, though. */ -static void terminal_resize(struct kmscon_terminal *term, - unsigned int cols, unsigned int rows, +static void terminal_resize(struct kmscon_terminal *term, unsigned int cols, unsigned int rows, bool force, bool notify) { bool resize = false; @@ -389,14 +385,12 @@ static int font_set(struct kmscon_terminal *term) struct screen *ent; term->font_attr.bold = false; - ret = kmscon_font_find(&font, &term->font_attr, - term->conf->font_engine); + ret = kmscon_font_find(&font, &term->font_attr, term->conf->font_engine); if (ret) return ret; term->font_attr.bold = true; - ret = kmscon_font_find(&bold_font, &term->font_attr, - term->conf->font_engine); + ret = kmscon_font_find(&bold_font, &term->font_attr, term->conf->font_engine); if (ret) { log_warning("cannot create bold font: %d", ret); bold_font = font; @@ -410,18 +404,16 @@ static int font_set(struct kmscon_terminal *term) term->min_cols = 0; term->min_rows = 0; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { ent = shl_dlist_entry(iter, struct screen, list); ret = kmscon_text_set(ent->txt, font, bold_font, ent->disp); if (ret) - log_warning("cannot change text-renderer font: %d", - ret); + log_warning("cannot change text-renderer font: %d", ret); - terminal_resize(term, - kmscon_text_get_cols(ent->txt), - kmscon_text_get_rows(ent->txt), - false, false); + terminal_resize(term, kmscon_text_get_cols(ent->txt), + kmscon_text_get_rows(ent->txt), false, false); } terminal_resize(term, 0, 0, true, true); @@ -440,15 +432,14 @@ static void rotate_cw_all(struct kmscon_terminal *term) struct shl_dlist *iter; struct screen *scr; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); rotate_cw_screen(scr); term->min_cols = 0; term->min_rows = 0; - terminal_resize(term, - kmscon_text_get_cols(scr->txt), - kmscon_text_get_rows(scr->txt), - true, true); + terminal_resize(term, kmscon_text_get_cols(scr->txt), + kmscon_text_get_rows(scr->txt), true, true); } } @@ -467,15 +458,14 @@ static void rotate_ccw_all(struct kmscon_terminal *term) struct shl_dlist *iter; struct screen *scr; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); rotate_ccw_screen(scr); term->min_cols = 0; term->min_rows = 0; - terminal_resize(term, - kmscon_text_get_cols(scr->txt), - kmscon_text_get_rows(scr->txt), - true, true); + terminal_resize(term, kmscon_text_get_cols(scr->txt), + kmscon_text_get_rows(scr->txt), true, true); } } @@ -487,7 +477,8 @@ static int add_display(struct kmscon_terminal *term, struct uterm_display *disp) const char *be; bool opengl; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); if (scr->disp == disp) return 0; @@ -522,23 +513,19 @@ static int add_display(struct kmscon_terminal *term, struct uterm_display *disp) goto err_cb; } - ret = kmscon_text_set(scr->txt, term->font, term->bold_font, - scr->disp); + ret = kmscon_text_set(scr->txt, term->font, term->bold_font, scr->disp); if (ret) { log_error("cannot set text-renderer parameters"); goto err_text; } - terminal_resize(term, - kmscon_text_get_cols(scr->txt), - kmscon_text_get_rows(scr->txt), - false, true); + terminal_resize(term, kmscon_text_get_cols(scr->txt), kmscon_text_get_rows(scr->txt), false, + true); shl_dlist_link(&term->screens, &scr->list); log_notice("Using video backend [%s] with text renderer [%s] and font engine [%s]", - uterm_display_backend_name(disp), scr->txt->ops->name, - term->font->ops->name); + uterm_display_backend_name(disp), scr->txt->ops->name, term->font->ops->name); log_debug("added display %p to terminal %p", disp, term); redraw_screen(scr); @@ -572,12 +559,11 @@ static void free_screen(struct screen *scr, bool update) term->min_cols = 0; term->min_rows = 0; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { ent = shl_dlist_entry(iter, struct screen, list); - terminal_resize(term, - kmscon_text_get_cols(ent->txt), - kmscon_text_get_rows(ent->txt), - false, false); + terminal_resize(term, kmscon_text_get_cols(ent->txt), + kmscon_text_get_rows(ent->txt), false, false); } terminal_resize(term, 0, 0, true, true); @@ -588,7 +574,8 @@ static void rm_display(struct kmscon_terminal *term, struct uterm_display *disp) struct shl_dlist *iter; struct screen *scr; - shl_dlist_for_each(iter, &term->screens) { + shl_dlist_for_each(iter, &term->screens) + { scr = shl_dlist_entry(iter, struct screen, list); if (scr->disp == disp) break; @@ -601,45 +588,39 @@ static void rm_display(struct kmscon_terminal *term, struct uterm_display *disp) free_screen(scr, true); } -static void input_event(struct uterm_input *input, - struct uterm_input_key_event *ev, - void *data) +static void input_event(struct uterm_input *input, struct uterm_input_key_event *ev, void *data) { struct kmscon_terminal *term = data; - if (!term->opened || !term->awake || ev->handled || !kmscon_session_get_foreground(term->session)) + if (!term->opened || !term->awake || ev->handled || + !kmscon_session_get_foreground(term->session)) return; - if (conf_grab_matches(term->conf->grab_scroll_up, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_scroll_up, ev->mods, ev->num_syms, ev->keysyms)) { tsm_screen_sb_up(term->console, 1); redraw_all(term); ev->handled = true; return; } - if (conf_grab_matches(term->conf->grab_scroll_down, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_scroll_down, ev->mods, ev->num_syms, ev->keysyms)) { tsm_screen_sb_down(term->console, 1); redraw_all(term); ev->handled = true; return; } - if (conf_grab_matches(term->conf->grab_page_up, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_page_up, ev->mods, ev->num_syms, ev->keysyms)) { tsm_screen_sb_page_up(term->console, 1); redraw_all(term); ev->handled = true; return; } - if (conf_grab_matches(term->conf->grab_page_down, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_page_down, ev->mods, ev->num_syms, ev->keysyms)) { tsm_screen_sb_page_down(term->console, 1); redraw_all(term); ev->handled = true; return; } - if (conf_grab_matches(term->conf->grab_zoom_in, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_zoom_in, ev->mods, ev->num_syms, ev->keysyms)) { ev->handled = true; if (term->font_attr.points + 1 < term->font_attr.points) return; @@ -649,8 +630,7 @@ static void input_event(struct uterm_input *input, --term->font_attr.points; return; } - if (conf_grab_matches(term->conf->grab_zoom_out, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_zoom_out, ev->mods, ev->num_syms, ev->keysyms)) { ev->handled = true; if (term->font_attr.points <= 1) return; @@ -660,14 +640,12 @@ static void input_event(struct uterm_input *input, ++term->font_attr.points; return; } - if (conf_grab_matches(term->conf->grab_rotate_cw, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_rotate_cw, ev->mods, ev->num_syms, ev->keysyms)) { rotate_cw_all(term); ev->handled = true; return; } - if (conf_grab_matches(term->conf->grab_rotate_ccw, - ev->mods, ev->num_syms, ev->keysyms)) { + if (conf_grab_matches(term->conf->grab_rotate_ccw, ev->mods, ev->num_syms, ev->keysyms)) { rotate_ccw_all(term); ev->handled = true; return; @@ -679,8 +657,8 @@ static void input_event(struct uterm_input *input, if (ev->num_syms > 1) return; - if (tsm_vte_handle_keyboard(term->vte, ev->keysyms[0], ev->ascii, - ev->mods, ev->codepoints[0])) { + if (tsm_vte_handle_keyboard(term->vte, ev->keysyms[0], ev->ascii, ev->mods, + ev->codepoints[0])) { tsm_screen_sb_reset(term->console); redraw_all(term); ev->handled = true; @@ -708,7 +686,8 @@ static void copy_selection(struct kmscon_terminal *term) term->pointer.copy_len = tsm_screen_selection_copy(term->console, &term->pointer.copy); } -static void forward_pointer_event(struct kmscon_terminal *term, struct uterm_input_pointer_event *ev) +static void forward_pointer_event(struct kmscon_terminal *term, + struct uterm_input_pointer_event *ev) { unsigned int event; @@ -725,22 +704,25 @@ static void forward_pointer_event(struct kmscon_terminal *term, struct uterm_inp default: return; } - tsm_vte_handle_mouse(term->vte, term->pointer.posx, term->pointer.posy, - term->pointer.x, term->pointer.y, ev->button, event, 0); + tsm_vte_handle_mouse(term->vte, term->pointer.posx, term->pointer.posy, term->pointer.x, + term->pointer.y, ev->button, event, 0); } -static void handle_pointer_button(struct kmscon_terminal *term, struct uterm_input_pointer_event *ev) +static void handle_pointer_button(struct kmscon_terminal *term, + struct uterm_input_pointer_event *ev) { - switch(ev->button) { + switch (ev->button) { case 0: if (ev->pressed) { if (ev->double_click) { - tsm_screen_selection_word(term->console, term->pointer.posx, term->pointer.posy); + tsm_screen_selection_word(term->console, term->pointer.posx, + term->pointer.posy); copy_selection(term); term->pointer.select = false; } else { term->pointer.select = true; - start_selection(term->console, term->pointer.posx, term->pointer.posy); + start_selection(term->console, term->pointer.posx, + term->pointer.posy); } } else { if (term->pointer.select) @@ -760,8 +742,7 @@ static void handle_pointer_button(struct kmscon_terminal *term, struct uterm_inp } } -static void pointer_event(struct uterm_input *input, - struct uterm_input_pointer_event *ev, +static void pointer_event(struct uterm_input *input, struct uterm_input_pointer_event *ev, void *data) { struct kmscon_terminal *term = data; @@ -770,7 +751,8 @@ static void pointer_event(struct uterm_input *input, term->pointer.x = ev->pointer_x; term->pointer.y = ev->pointer_y; - coord_to_cell(term, term->pointer.x, term->pointer.y, &term->pointer.posx, &term->pointer.posy); + coord_to_cell(term, term->pointer.x, term->pointer.y, &term->pointer.posx, + &term->pointer.posy); term->pointer.visible = true; } @@ -785,7 +767,7 @@ static void pointer_event(struct uterm_input *input, break; case UTERM_MOVED: if (term->pointer.select) - update_selection(term->console,term->pointer.posx, term->pointer.posy); + update_selection(term->console, term->pointer.posx, term->pointer.posy); break; case UTERM_BUTTON: handle_pointer_button(term, ev); @@ -794,7 +776,7 @@ static void pointer_event(struct uterm_input *input, if (ev->wheel > 0) tsm_screen_sb_up(term->console, 3); else - tsm_screen_sb_down(term->console, 3); + tsm_screen_sb_down(term->console, 3); break; case UTERM_SYNC: redraw_all(term); @@ -866,8 +848,8 @@ static void terminal_destroy(struct kmscon_terminal *term) free(term); } -static int session_event(struct kmscon_session *session, - struct kmscon_session_event *ev, void *data) +static int session_event(struct kmscon_session *session, struct kmscon_session_event *ev, + void *data) { struct kmscon_terminal *term = data; @@ -898,8 +880,7 @@ static int session_event(struct kmscon_session *session, return 0; } -static void pty_input(struct kmscon_pty *pty, const char *u8, size_t len, - void *data) +static void pty_input(struct kmscon_pty *pty, const char *u8, size_t len, void *data) { struct kmscon_terminal *term = data; @@ -919,16 +900,15 @@ static void pty_event(struct ev_fd *fd, int mask, void *data) kmscon_pty_dispatch(term->pty); } -static void write_event(struct tsm_vte *vte, const char *u8, size_t len, - void *data) +static void write_event(struct tsm_vte *vte, const char *u8, size_t len, void *data) { struct kmscon_terminal *term = data; kmscon_pty_write(term->pty, u8, len); } -int kmscon_terminal_register(struct kmscon_session **out, - struct kmscon_seat *seat, unsigned int vtnr) +int kmscon_terminal_register(struct kmscon_session **out, struct kmscon_seat *seat, + unsigned int vtnr) { struct kmscon_terminal *term; int ret; @@ -949,8 +929,7 @@ int kmscon_terminal_register(struct kmscon_session **out, term->conf_ctx = kmscon_seat_get_conf(seat); term->conf = conf_ctx_get_mem(term->conf_ctx); - strncpy(term->font_attr.name, term->conf->font_name, - KMSCON_FONT_MAX_NAME - 1); + strncpy(term->font_attr.name, term->conf->font_name, KMSCON_FONT_MAX_NAME - 1); term->font_attr.ppi = term->conf->font_ppi; term->font_attr.points = term->conf->font_size; @@ -959,13 +938,11 @@ int kmscon_terminal_register(struct kmscon_session **out, goto err_free; tsm_screen_set_max_sb(term->console, term->conf->sb_size); - ret = tsm_vte_new(&term->vte, term->console, write_event, term, - log_llog, NULL); + ret = tsm_vte_new(&term->vte, term->console, write_event, term, log_llog, NULL); if (ret) goto err_con; - tsm_vte_set_backspace_sends_delete(term->vte, - BUILD_BACKSPACE_SENDS_DELETE); + tsm_vte_set_backspace_sends_delete(term->vte, BUILD_BACKSPACE_SENDS_DELETE); tsm_vte_set_osc_cb(term->vte, osc_event, (void *)term); tsm_vte_set_mouse_cb(term->vte, mouse_event, (void *)term); @@ -1010,9 +987,8 @@ int kmscon_terminal_register(struct kmscon_session **out, goto err_pty; } - ret = ev_eloop_new_fd(term->eloop, &term->ptyfd, - kmscon_pty_get_fd(term->pty), - EV_READABLE, pty_event, term); + ret = ev_eloop_new_fd(term->eloop, &term->ptyfd, kmscon_pty_get_fd(term->pty), EV_READABLE, + pty_event, term); if (ret) goto err_pty; @@ -1026,8 +1002,7 @@ int kmscon_terminal_register(struct kmscon_session **out, goto err_input; } - ret = kmscon_seat_register_session(seat, &term->session, session_event, - term); + ret = kmscon_seat_register_session(seat, &term->session, session_event, term); if (ret) { log_error("cannot register session for terminal: %d", ret); goto err_pointer; diff --git a/src/kmscon_terminal.h b/src/kmscon_terminal.h index 9c6a3731..cd74bab3 100644 --- a/src/kmscon_terminal.h +++ b/src/kmscon_terminal.h @@ -39,14 +39,12 @@ #ifdef BUILD_ENABLE_SESSION_TERMINAL -int kmscon_terminal_register(struct kmscon_session **out, - struct kmscon_seat *seat, +int kmscon_terminal_register(struct kmscon_session **out, struct kmscon_seat *seat, unsigned int vtnr); #else /* !BUILD_ENABLE_SESSION_TERMINAL */ -static inline int kmscon_terminal_register(struct kmscon_session **out, - struct kmscon_seat *seat, +static inline int kmscon_terminal_register(struct kmscon_session **out, struct kmscon_seat *seat, unsigned int vtnr) { return -EOPNOTSUPP; diff --git a/src/pty.c b/src/pty.c index ee0cf01b..1402622c 100644 --- a/src/pty.c +++ b/src/pty.c @@ -74,8 +74,7 @@ struct kmscon_pty { int retry_count; }; -int kmscon_pty_new(struct kmscon_pty **out, kmscon_pty_input_cb input_cb, - void *data) +int kmscon_pty_new(struct kmscon_pty **out, kmscon_pty_input_cb input_cb, void *data) { struct kmscon_pty *pty; int ret; @@ -250,9 +249,9 @@ static bool pty_is_open(struct kmscon_pty *pty) return pty->fd >= 0; } -static void __attribute__((noreturn)) -exec_child(const char *term, const char *colorterm, char **argv, - const char *seat, const char *vtnr, bool env_reset, bool drm) +static void __attribute__((noreturn)) exec_child(const char *term, const char *colorterm, + char **argv, const char *seat, const char *vtnr, + bool env_reset, bool drm) { char **env; char **def_argv; @@ -260,19 +259,18 @@ exec_child(const char *term, const char *colorterm, char **argv, int ret; if (env_reset) { - env = malloc(sizeof(char*)); + env = malloc(sizeof(char *)); if (!env) { - log_error("cannot allocate memory for environment (%d): %m", - errno); + log_error("cannot allocate memory for environment (%d): %m", errno); exit(EXIT_FAILURE); } - memset(env, 0, sizeof(char*)); + memset(env, 0, sizeof(char *)); environ = env; - def_argv = (char*[]){ "/bin/login", "-p", NULL }; + def_argv = (char *[]){"/bin/login", "-p", NULL}; } else { - def_argv = (char*[]){ "/bin/login", NULL }; + def_argv = (char *[]){"/bin/login", NULL}; } if (!term) @@ -382,8 +380,8 @@ static void setup_child(int master, struct winsize *ws) } if (dup2(slave, STDIN_FILENO) != STDIN_FILENO || - dup2(slave, STDOUT_FILENO) != STDOUT_FILENO || - dup2(slave, STDERR_FILENO) != STDERR_FILENO) { + dup2(slave, STDOUT_FILENO) != STDOUT_FILENO || + dup2(slave, STDERR_FILENO) != STDERR_FILENO) { log_err("cannot duplicate slave: %m"); goto err_out; } @@ -405,8 +403,8 @@ static void setup_child(int master, struct winsize *ws) * a little bit more control of the process, and as a bonus avoid linking to * the libutil library in glibc. */ -static int pty_spawn(struct kmscon_pty *pty, int master, - unsigned short width, unsigned short height, bool drm) +static int pty_spawn(struct kmscon_pty *pty, int master, unsigned short width, + unsigned short height, bool drm) { pid_t pid; struct winsize ws; @@ -422,8 +420,8 @@ static int pty_spawn(struct kmscon_pty *pty, int master, return -errno; case 0: setup_child(master, &ws); - exec_child(pty->term, pty->colorterm, pty->argv, pty->seat, - pty->vtnr, pty->env_reset, drm); + exec_child(pty->term, pty->colorterm, pty->argv, pty->seat, pty->vtnr, + pty->env_reset, drm); exit(EXIT_FAILURE); default: log_debug("forking child %d", pid); @@ -449,8 +447,7 @@ static int send_buf(struct kmscon_pty *pty) } if (ret < 0 && errno != EWOULDBLOCK) { - log_warn("cannot write to child process (%d): %m", - errno); + log_warn("cannot write to child process (%d): %m", errno); return ret; } @@ -477,12 +474,10 @@ static int read_buf(struct kmscon_pty *pty) if (pty->input_cb) pty->input_cb(pty, pty->io_buf, len, pty->data); } else if (len == 0) { - log_debug("HUP during read on pty of child %d", - pty->child); + log_debug("HUP during read on pty of child %d", pty->child); break; } else if (errno != EWOULDBLOCK) { - log_debug("cannot read from pty of child %d (%d): %m", - pty->child, errno); + log_debug("cannot read from pty of child %d (%d): %m", pty->child, errno); break; } } while (len > 0 && --num); @@ -531,8 +526,7 @@ static void pty_input(struct ev_fd *fd, int mask, void *data) read_buf(pty); } -static void sig_child(struct ev_eloop *eloop, struct ev_child_data *chld, - void *data) +static void sig_child(struct ev_eloop *eloop, struct ev_child_data *chld, void *data) { struct kmscon_pty *pty = data; time_t current_time; @@ -540,8 +534,7 @@ static void sig_child(struct ev_eloop *eloop, struct ev_child_data *chld, if (chld->pid != pty->child) return; - log_info("child exited: pid: %u status: %d", - chld->pid, chld->status); + log_info("child exited: pid: %u status: %d", chld->pid, chld->status); if (pty->retry_count == MAX_RETRY_COUNT) { log_err("reached max retry attempts for login process"); @@ -560,8 +553,7 @@ static void sig_child(struct ev_eloop *eloop, struct ev_child_data *chld, pty->input_cb(pty, NULL, 0, pty->data); } -int kmscon_pty_open(struct kmscon_pty *pty, unsigned short width, - unsigned short height, bool drm) +int kmscon_pty_open(struct kmscon_pty *pty, unsigned short width, unsigned short height, bool drm) { int ret; int master; @@ -578,8 +570,7 @@ int kmscon_pty_open(struct kmscon_pty *pty, unsigned short width, return -errno; } - ret = ev_eloop_new_fd(pty->eloop, &pty->efd, master, - EV_ET | EV_READABLE, pty_input, pty); + ret = ev_eloop_new_fd(pty->eloop, &pty->efd, master, EV_ET | EV_READABLE, pty_input, pty); if (ret) goto err_master; @@ -664,8 +655,7 @@ void kmscon_pty_signal(struct kmscon_pty *pty, int signum) log_debug("send signal %d to child", signum); } -void kmscon_pty_resize(struct kmscon_pty *pty, - unsigned short width, unsigned short height) +void kmscon_pty_resize(struct kmscon_pty *pty, unsigned short width, unsigned short height) { int ret; struct winsize ws; diff --git a/src/pty.h b/src/pty.h index 413125ce..d5729470 100644 --- a/src/pty.h +++ b/src/pty.h @@ -47,11 +47,9 @@ struct kmscon_pty; -typedef void (*kmscon_pty_input_cb) - (struct kmscon_pty *pty, const char *u8, size_t len, void *data); +typedef void (*kmscon_pty_input_cb)(struct kmscon_pty *pty, const char *u8, size_t len, void *data); -int kmscon_pty_new(struct kmscon_pty **out, kmscon_pty_input_cb input_cb, - void *data); +int kmscon_pty_new(struct kmscon_pty **out, kmscon_pty_input_cb input_cb, void *data); void kmscon_pty_ref(struct kmscon_pty *pty); void kmscon_pty_unref(struct kmscon_pty *pty); int kmscon_pty_set_term(struct kmscon_pty *pty, const char *term); @@ -64,13 +62,11 @@ void kmscon_pty_set_env_reset(struct kmscon_pty *pty, bool do_reset); int kmscon_pty_get_fd(struct kmscon_pty *pty); void kmscon_pty_dispatch(struct kmscon_pty *pty); -int kmscon_pty_open(struct kmscon_pty *pty, unsigned short width, - unsigned short height, bool drm); +int kmscon_pty_open(struct kmscon_pty *pty, unsigned short width, unsigned short height, bool drm); void kmscon_pty_close(struct kmscon_pty *pty); int kmscon_pty_write(struct kmscon_pty *pty, const char *u8, size_t len); void kmscon_pty_signal(struct kmscon_pty *pty, int signum); -void kmscon_pty_resize(struct kmscon_pty *pty, - unsigned short width, unsigned short height); +void kmscon_pty_resize(struct kmscon_pty *pty, unsigned short width, unsigned short height); #endif /* KMSCON_PTY_H */ diff --git a/src/shl_array.h b/src/shl_array.h index 9daf4096..2f5445eb 100644 --- a/src/shl_array.h +++ b/src/shl_array.h @@ -44,11 +44,9 @@ struct shl_array { void *data; }; -#define SHL_ARRAY_AT(_arr, _type, _pos) \ - (&((_type*)shl_array_get_array(_arr))[(_pos)]) +#define SHL_ARRAY_AT(_arr, _type, _pos) (&((_type *)shl_array_get_array(_arr))[(_pos)]) -static inline int shl_array_new(struct shl_array **out, size_t element_size, - size_t initial_size) +static inline int shl_array_new(struct shl_array **out, size_t element_size, size_t initial_size) { struct shl_array *arr; @@ -103,8 +101,8 @@ static inline int shl_array_zresize(struct shl_array *arr, size_t size) arr->data = tmp; arr->size = newsize; - memset(((uint8_t*)arr->data) + arr->element_size * arr->length, - 0, arr->element_size * (size - arr->length)); + memset(((uint8_t *)arr->data) + arr->element_size * arr->length, 0, + arr->element_size * (size - arr->length)); } arr->length = size; @@ -129,8 +127,7 @@ static inline int shl_array_push(struct shl_array *arr, const void *data) arr->size = newsize; } - memcpy(((uint8_t*)arr->data) + arr->element_size * arr->length, - data, arr->element_size); + memcpy(((uint8_t *)arr->data) + arr->element_size * arr->length, data, arr->element_size); ++arr->length; return 0; diff --git a/src/shl_dlist.h b/src/shl_dlist.h index 9e30dc5c..83cd233b 100644 --- a/src/shl_dlist.h +++ b/src/shl_dlist.h @@ -38,9 +38,10 @@ /* miscellaneous */ -#define shl_offsetof(pointer, type, member) ({ \ - const typeof(((type*)0)->member) *__ptr = (pointer); \ - (type*)(((char*)__ptr) - offsetof(type, member)); \ +#define shl_offsetof(pointer, type, member) \ + ({ \ + const typeof(((type *)0)->member) *__ptr = (pointer); \ + (type *)(((char *)__ptr) - offsetof(type, member)); \ }) /* double linked list */ @@ -50,7 +51,7 @@ struct shl_dlist { struct shl_dlist *prev; }; -#define SHL_DLIST_INIT(head) { &(head), &(head) } +#define SHL_DLIST_INIT(head) {&(head), &(head)} static inline void shl_dlist_init(struct shl_dlist *list) { @@ -58,9 +59,8 @@ static inline void shl_dlist_init(struct shl_dlist *list) list->prev = list; } -static inline void shl_dlist__link(struct shl_dlist *prev, - struct shl_dlist *next, - struct shl_dlist *n) +static inline void shl_dlist__link(struct shl_dlist *prev, struct shl_dlist *next, + struct shl_dlist *n) { next->prev = n; n->next = next; @@ -68,20 +68,17 @@ static inline void shl_dlist__link(struct shl_dlist *prev, prev->next = n; } -static inline void shl_dlist_link(struct shl_dlist *head, - struct shl_dlist *n) +static inline void shl_dlist_link(struct shl_dlist *head, struct shl_dlist *n) { return shl_dlist__link(head, head->next, n); } -static inline void shl_dlist_link_tail(struct shl_dlist *head, - struct shl_dlist *n) +static inline void shl_dlist_link_tail(struct shl_dlist *head, struct shl_dlist *n) { return shl_dlist__link(head->prev, head, n); } -static inline void shl_dlist__unlink(struct shl_dlist *prev, - struct shl_dlist *next) +static inline void shl_dlist__unlink(struct shl_dlist *prev, struct shl_dlist *next) { next->prev = prev; prev->next = next; @@ -99,45 +96,31 @@ static inline bool shl_dlist_empty(struct shl_dlist *head) return head->next == head; } -#define shl_dlist_entry(ptr, type, member) \ - shl_offsetof((ptr), type, member) +#define shl_dlist_entry(ptr, type, member) shl_offsetof((ptr), type, member) -#define shl_dlist_first(head, type, member) \ - shl_dlist_entry((head)->next, type, member) +#define shl_dlist_first(head, type, member) shl_dlist_entry((head)->next, type, member) -#define shl_dlist_last(head, type, member) \ - shl_dlist_entry((head)->prev, type, member) +#define shl_dlist_last(head, type, member) shl_dlist_entry((head)->prev, type, member) -#define shl_dlist_for_each(iter, head) \ - for (iter = (head)->next; iter != (head); iter = iter->next) +#define shl_dlist_for_each(iter, head) for (iter = (head)->next; iter != (head); iter = iter->next) -#define shl_dlist_for_each_but_one(iter, start, head) \ - for (iter = ((start)->next == (head)) ? \ - (start)->next->next : \ - (start)->next; \ - iter != (start); \ - iter = (iter->next == (head) && (start) != (head)) ? \ - iter->next->next : \ - iter->next) +#define shl_dlist_for_each_but_one(iter, start, head) \ + for (iter = ((start)->next == (head)) ? (start)->next->next : (start)->next; \ + iter != (start); \ + iter = (iter->next == (head) && (start) != (head)) ? iter->next->next : iter->next) -#define shl_dlist_for_each_safe(iter, tmp, head) \ - for (iter = (head)->next, tmp = iter->next; iter != (head); \ - iter = tmp, tmp = iter->next) +#define shl_dlist_for_each_safe(iter, tmp, head) \ + for (iter = (head)->next, tmp = iter->next; iter != (head); iter = tmp, tmp = iter->next) -#define shl_dlist_for_each_reverse(iter, head) \ +#define shl_dlist_for_each_reverse(iter, head) \ for (iter = (head)->prev; iter != (head); iter = iter->prev) -#define shl_dlist_for_each_reverse_but_one(iter, start, head) \ - for (iter = ((start)->prev == (head)) ? \ - (start)->prev->prev : \ - (start)->prev; \ - iter != (start); \ - iter = (iter->prev == (head) && (start) != (head)) ? \ - iter->prev->prev : \ - iter->prev) - -#define shl_dlist_for_each_reverse_safe(iter, tmp, head) \ - for (iter = (head)->prev, tmp = iter->prev; iter != (head); \ - iter = tmp, tmp = iter->prev) +#define shl_dlist_for_each_reverse_but_one(iter, start, head) \ + for (iter = ((start)->prev == (head)) ? (start)->prev->prev : (start)->prev; \ + iter != (start); \ + iter = (iter->prev == (head) && (start) != (head)) ? iter->prev->prev : iter->prev) + +#define shl_dlist_for_each_reverse_safe(iter, tmp, head) \ + for (iter = (head)->prev, tmp = iter->prev; iter != (head); iter = tmp, tmp = iter->prev) #endif /* SHL_DLIST_H */ diff --git a/src/shl_gl.h b/src/shl_gl.h index c1944330..1f7d301f 100644 --- a/src/shl_gl.h +++ b/src/shl_gl.h @@ -36,8 +36,8 @@ #include #include #include -#include #include +#include #include "shl_llog.h" /* @@ -71,9 +71,8 @@ float *gl_m4_stack_tip(struct gl_m4_stack *stack); struct gl_shader; -int gl_shader_new(struct gl_shader **out, const char *vert, int vert_len, - const char *frag, int frag_len, - char **attr, size_t attr_count, llog_submit_t llog, +int gl_shader_new(struct gl_shader **out, const char *vert, int vert_len, const char *frag, + int frag_len, char **attr, size_t attr_count, llog_submit_t llog, void *llog_data); void gl_shader_ref(struct gl_shader *shader); void gl_shader_unref(struct gl_shader *shader); @@ -82,8 +81,8 @@ void gl_shader_use(struct gl_shader *shader); void gl_tex_new(GLuint *tex, size_t num); void gl_tex_free(GLuint *tex, size_t num); -void gl_tex_load(GLuint tex, unsigned int width, unsigned int stride, - unsigned int height, uint8_t *buf); +void gl_tex_load(GLuint tex, unsigned int width, unsigned int stride, unsigned int height, + uint8_t *buf); void gl_clear_error(); bool gl_has_error(struct gl_shader *shader); diff --git a/src/shl_gl_math.c b/src/shl_gl_math.c index a3a3a1d4..d2cdc103 100644 --- a/src/shl_gl_math.c +++ b/src/shl_gl_math.c @@ -113,8 +113,7 @@ void gl_m4_mult_dest(float *dest, const float *n, const float *m) for (col = 0; col < 4; ++col) { dest[row * 4 + col] = 0; for (j = 0; j < 4; ++j) - dest[row * 4 + col] += - n[row * 4 + j] * m[j * 4 + col]; + dest[row * 4 + col] += n[row * 4 + j] * m[j * 4 + col]; } } } @@ -133,7 +132,7 @@ void gl_m4_mult(float *n, const float *m) void gl_m4_translate(float *m, float x, float y, float z) { - float trans[16] = { 1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1 }; + float trans[16] = {1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1}; if (!m) return; @@ -143,7 +142,7 @@ void gl_m4_translate(float *m, float x, float y, float z) void gl_m4_scale(float *m, float x, float y, float z) { - float scale[16] = { x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 }; + float scale[16] = {x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1}; if (!m) return; diff --git a/src/shl_gl_shader.c b/src/shl_gl_shader.c index 68764e82..4a00e927 100644 --- a/src/shl_gl_shader.c +++ b/src/shl_gl_shader.c @@ -31,9 +31,9 @@ #define GL_GLEXT_PROTOTYPES -#include #include #include +#include #include #include #include @@ -105,8 +105,7 @@ bool gl_has_error(struct gl_shader *shader) return false; } -static int compile_shader(struct gl_shader *shader, GLenum type, - const char *source, int len) +static int compile_shader(struct gl_shader *shader, GLenum type, const char *source, int len) { char msg[512]; GLint status = 1, size; @@ -133,10 +132,8 @@ static int compile_shader(struct gl_shader *shader, GLenum type, return s; } -int gl_shader_new(struct gl_shader **out, const char *vert, int vert_len, - const char *frag, int frag_len, - char **attr, size_t attr_count, llog_submit_t llog, - void *llog_data) +int gl_shader_new(struct gl_shader **out, const char *vert, int vert_len, const char *frag, + int frag_len, char **attr, size_t attr_count, llog_submit_t llog, void *llog_data) { struct gl_shader *shader; int ret, i; @@ -156,15 +153,13 @@ int gl_shader_new(struct gl_shader **out, const char *vert, int vert_len, llog_debug(shader, "new shader"); - shader->vshader = compile_shader(shader, GL_VERTEX_SHADER, vert, - vert_len); + shader->vshader = compile_shader(shader, GL_VERTEX_SHADER, vert, vert_len); if (shader->vshader == GL_NONE) { ret = -EFAULT; goto err_free; } - shader->fshader = compile_shader(shader, GL_FRAGMENT_SHADER, frag, - frag_len); + shader->fshader = compile_shader(shader, GL_FRAGMENT_SHADER, frag, frag_len); if (shader->fshader == GL_NONE) { ret = -EFAULT; goto err_vshader; @@ -251,14 +246,10 @@ void gl_tex_new(GLuint *tex, size_t num) for (i = 0; i < num; ++i) { glBindTexture(GL_TEXTURE_2D, tex[i]); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } } @@ -267,8 +258,8 @@ void gl_tex_free(GLuint *tex, size_t num) glDeleteTextures(num, tex); } -void gl_tex_load(GLuint tex, unsigned int width, unsigned int stride, - unsigned int height, uint8_t *buf) +void gl_tex_load(GLuint tex, unsigned int width, unsigned int stride, unsigned int height, + uint8_t *buf) { if (!buf || !width || !height || !stride) return; @@ -284,7 +275,7 @@ void gl_tex_load(GLuint tex, unsigned int width, unsigned int stride, glBindTexture(GL_TEXTURE_2D, tex); /* glPixelStorei(GL_UNPACK_ROW_LENGTH, stride); */ - glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, width, height, 0, - GL_BGRA_EXT, GL_UNSIGNED_BYTE, buf); + glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, width, height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, + buf); /* glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); */ } diff --git a/src/shl_hashtable.h b/src/shl_hashtable.h index 72ee120b..f3a6ca15 100644 --- a/src/shl_hashtable.h +++ b/src/shl_hashtable.h @@ -41,9 +41,9 @@ struct shl_hashtable; -typedef unsigned int (*shl_hash_cb) (uint64_t data); -typedef bool (*shl_equal_cb) (uint64_t data1, uint64_t data2); -typedef void (*shl_free_cb) (void *data); +typedef unsigned int (*shl_hash_cb)(uint64_t data); +typedef bool (*shl_equal_cb)(uint64_t data1, uint64_t data2); +typedef void (*shl_free_cb)(void *data); struct shl_hashentry { uint64_t key; @@ -75,10 +75,8 @@ static size_t shl_rehash(const void *ele, void *priv) return tbl->hash_cb(ent->key); } -static inline int shl_hashtable_new(struct shl_hashtable **out, - shl_hash_cb hash_cb, - shl_equal_cb equal_cb, - shl_free_cb free_value) +static inline int shl_hashtable_new(struct shl_hashtable **out, shl_hash_cb hash_cb, + shl_equal_cb equal_cb, shl_free_cb free_value) { struct shl_hashtable *tbl; @@ -107,9 +105,7 @@ static inline void shl_hashtable_free(struct shl_hashtable *tbl) if (!tbl) return; - for (entry = htable_first(&tbl->tbl, &i); - entry; - entry = htable_next(&tbl->tbl, &i)) { + for (entry = htable_first(&tbl->tbl, &i); entry; entry = htable_next(&tbl->tbl, &i)) { htable_delval(&tbl->tbl, &i); if (tbl->free_value) tbl->free_value(entry->value); @@ -120,8 +116,7 @@ static inline void shl_hashtable_free(struct shl_hashtable *tbl) free(tbl); } -static inline int shl_hashtable_insert(struct shl_hashtable *tbl, uint64_t key, - void *value) +static inline int shl_hashtable_insert(struct shl_hashtable *tbl, uint64_t key, void *value) { struct shl_hashentry *entry; size_t hash; @@ -156,8 +151,7 @@ static inline void shl_hashtable_remove(struct shl_hashtable *tbl, uint64_t key) hash = tbl->hash_cb(key); - for (entry = htable_firstval(&tbl->tbl, &i, hash); - entry; + for (entry = htable_firstval(&tbl->tbl, &i, hash); entry; entry = htable_nextval(&tbl->tbl, &i, hash)) { if (tbl->equal_cb(key, entry->key)) { htable_delval(&tbl->tbl, &i); @@ -166,8 +160,7 @@ static inline void shl_hashtable_remove(struct shl_hashtable *tbl, uint64_t key) } } -static inline bool shl_hashtable_find(struct shl_hashtable *tbl, void **out, - uint64_t key) +static inline bool shl_hashtable_find(struct shl_hashtable *tbl, void **out, uint64_t key) { struct htable_iter i; struct shl_hashentry *entry; @@ -178,8 +171,7 @@ static inline bool shl_hashtable_find(struct shl_hashtable *tbl, void **out, hash = tbl->hash_cb(key); - for (entry = htable_firstval(&tbl->tbl, &i, hash); - entry; + for (entry = htable_firstval(&tbl->tbl, &i, hash); entry; entry = htable_nextval(&tbl->tbl, &i, hash)) { if (tbl->equal_cb(key, entry->key)) { if (out) diff --git a/src/shl_hook.h b/src/shl_hook.h index 66603a06..e1487a58 100644 --- a/src/shl_hook.h +++ b/src/shl_hook.h @@ -41,16 +41,14 @@ struct shl_hook; struct shl_hook_entry; -typedef void (*shl_hook_cb) (void *parent, void *arg, void *data); +typedef void (*shl_hook_cb)(void *parent, void *arg, void *data); -#define shl_hook_add_cast(hook, cb, data, oneshot) \ +#define shl_hook_add_cast(hook, cb, data, oneshot) \ shl_hook_add((hook), (shl_hook_cb)(cb), (data), (oneshot)) -#define shl_hook_add_single_cast(hook, cb, data, oneshot) \ +#define shl_hook_add_single_cast(hook, cb, data, oneshot) \ shl_hook_add_single((hook), (shl_hook_cb)(cb), (data), (oneshot)) -#define shl_hook_rm_cast(hook, cb, data) \ - shl_hook_rm((hook), (shl_hook_cb)(cb), (data)) -#define shl_hook_rm_all_cast(hook, cb, data) \ - shl_hook_rm_all((hook), (shl_hook_cb)(cb), (data)) +#define shl_hook_rm_cast(hook, cb, data) shl_hook_rm((hook), (shl_hook_cb)(cb), (data)) +#define shl_hook_rm_all_cast(hook, cb, data) shl_hook_rm_all((hook), (shl_hook_cb)(cb), (data)) struct shl_hook_entry { struct shl_dlist list; @@ -96,9 +94,7 @@ static inline void shl_hook_free(struct shl_hook *hook) } while (!shl_dlist_empty(&hook->entries)) { - entry = shl_dlist_entry(hook->entries.prev, - struct shl_hook_entry, - list); + entry = shl_dlist_entry(hook->entries.prev, struct shl_hook_entry, list); shl_dlist_unlink(&entry->list); free(entry); } @@ -114,8 +110,7 @@ static inline unsigned int shl_hook_num(struct shl_hook *hook) return hook->num; } -static inline int shl_hook_add(struct shl_hook *hook, shl_hook_cb cb, - void *data, bool oneshot) +static inline int shl_hook_add(struct shl_hook *hook, shl_hook_cb cb, void *data, bool oneshot) { struct shl_hook_entry *entry; @@ -138,8 +133,8 @@ static inline int shl_hook_add(struct shl_hook *hook, shl_hook_cb cb, /* This adds an entry only if it is not already in the list. But notice that if * the entry is already registered twice or with a different \oneshot flag, the * list will _not_ be changed! */ -static inline int shl_hook_add_single(struct shl_hook *hook, shl_hook_cb cb, - void *data, bool oneshot) +static inline int shl_hook_add_single(struct shl_hook *hook, shl_hook_cb cb, void *data, + bool oneshot) { struct shl_hook_entry *entry; struct shl_dlist *iter; @@ -147,7 +142,8 @@ static inline int shl_hook_add_single(struct shl_hook *hook, shl_hook_cb cb, if (!hook || !cb) return -EINVAL; - shl_dlist_for_each(iter, &hook->entries) { + shl_dlist_for_each(iter, &hook->entries) + { entry = shl_dlist_entry(iter, struct shl_hook_entry, list); if (entry->cb == cb && entry->data == data) return 0; @@ -156,8 +152,7 @@ static inline int shl_hook_add_single(struct shl_hook *hook, shl_hook_cb cb, return shl_hook_add(hook, cb, data, oneshot); } -static inline void shl_hook_rm(struct shl_hook *hook, shl_hook_cb cb, - void *data) +static inline void shl_hook_rm(struct shl_hook *hook, shl_hook_cb cb, void *data) { struct shl_dlist *iter; struct shl_hook_entry *entry; @@ -165,7 +160,8 @@ static inline void shl_hook_rm(struct shl_hook *hook, shl_hook_cb cb, if (!hook || !cb) return; - shl_dlist_for_each_reverse(iter, &hook->entries) { + shl_dlist_for_each_reverse(iter, &hook->entries) + { entry = shl_dlist_entry(iter, struct shl_hook_entry, list); if (entry->cb == cb && entry->data == data) { /* if *_call() is running we must not disturb it */ @@ -179,8 +175,7 @@ static inline void shl_hook_rm(struct shl_hook *hook, shl_hook_cb cb, } } -static inline void shl_hook_rm_all(struct shl_hook *hook, shl_hook_cb cb, - void *data) +static inline void shl_hook_rm_all(struct shl_hook *hook, shl_hook_cb cb, void *data) { struct shl_dlist *iter, *tmp; struct shl_hook_entry *entry; @@ -188,7 +183,8 @@ static inline void shl_hook_rm_all(struct shl_hook *hook, shl_hook_cb cb, if (!hook || !cb) return; - shl_dlist_for_each_reverse_safe(iter, tmp, &hook->entries) { + shl_dlist_for_each_reverse_safe(iter, tmp, &hook->entries) + { entry = shl_dlist_entry(iter, struct shl_hook_entry, list); if (entry->cb == cb && entry->data == data) { /* if *_call() is running we must not disturb it */ @@ -201,8 +197,7 @@ static inline void shl_hook_rm_all(struct shl_hook *hook, shl_hook_cb cb, } } -static inline void shl_hook_call(struct shl_hook *hook, void *parent, - void *arg) +static inline void shl_hook_call(struct shl_hook *hook, void *parent, void *arg) { struct shl_hook_entry *entry; bool oneshot; @@ -210,10 +205,8 @@ static inline void shl_hook_call(struct shl_hook *hook, void *parent, if (!hook || hook->cur_entry) return; - for (hook->cur_entry = hook->entries.next; - hook->cur_entry != &hook->entries; ) { - entry = shl_dlist_entry(hook->cur_entry, - struct shl_hook_entry, list); + for (hook->cur_entry = hook->entries.next; hook->cur_entry != &hook->entries;) { + entry = shl_dlist_entry(hook->cur_entry, struct shl_hook_entry, list); hook->cur_entry = entry->list.next; oneshot = entry->oneshot; diff --git a/src/shl_llog.h b/src/shl_llog.h index 2c0e8b93..65a2848f 100644 --- a/src/shl_llog.h +++ b/src/shl_llog.h @@ -70,25 +70,12 @@ enum llog_severity { LLOG_SEV_NUM, }; -typedef void (*llog_submit_t) (void *data, - const char *file, - int line, - const char *func, - const char *subs, - unsigned int sev, - const char *format, - va_list args); - -static inline __attribute__((format(printf, 8, 9))) -void llog_format(llog_submit_t llog, - void *data, - const char *file, - int line, - const char *func, - const char *subs, - unsigned int sev, - const char *format, - ...) +typedef void (*llog_submit_t)(void *data, const char *file, int line, const char *func, + const char *subs, unsigned int sev, const char *format, va_list args); + +static inline __attribute__((format(printf, 8, 9))) void +llog_format(llog_submit_t llog, void *data, const char *file, int line, const char *func, + const char *subs, unsigned int sev, const char *format, ...) { va_list list; @@ -105,24 +92,13 @@ static const char *LLOG_SUBSYSTEM __attribute__((__unused__)); #define LLOG_DEFAULT __FILE__, __LINE__, __func__, LLOG_SUBSYSTEM -#define llog_printf(obj, sev, format, ...) \ - llog_format((obj)->llog, \ - (obj)->llog_data, \ - LLOG_DEFAULT, \ - (sev), \ - (format), \ - ##__VA_ARGS__) -#define llog_dprintf(obj, data, sev, format, ...) \ - llog_format((obj), \ - (data), \ - LLOG_DEFAULT, \ - (sev), \ - (format), \ - ##__VA_ARGS__) - -static inline __attribute__((format(printf, 4, 5))) -void llog_dummyf(llog_submit_t llog, void *data, unsigned int sev, - const char *format, ...) +#define llog_printf(obj, sev, format, ...) \ + llog_format((obj)->llog, (obj)->llog_data, LLOG_DEFAULT, (sev), (format), ##__VA_ARGS__) +#define llog_dprintf(obj, data, sev, format, ...) \ + llog_format((obj), (data), LLOG_DEFAULT, (sev), (format), ##__VA_ARGS__) + +static inline __attribute__((format(printf, 4, 5))) void +llog_dummyf(llog_submit_t llog, void *data, unsigned int sev, const char *format, ...) { } @@ -135,44 +111,37 @@ void llog_dummyf(llog_submit_t llog, void *data, unsigned int sev, */ #ifdef BUILD_ENABLE_DEBUG - #define llog_ddebug(obj, data, format, ...) \ - llog_dprintf((obj), (data), LLOG_DEBUG, (format), ##__VA_ARGS__) - #define llog_debug(obj, format, ...) \ - llog_ddebug((obj)->llog, (obj)->llog_data, (format), ##__VA_ARGS__) +#define llog_ddebug(obj, data, format, ...) \ + llog_dprintf((obj), (data), LLOG_DEBUG, (format), ##__VA_ARGS__) +#define llog_debug(obj, format, ...) \ + llog_ddebug((obj)->llog, (obj)->llog_data, (format), ##__VA_ARGS__) #else - #define llog_ddebug(obj, data, format, ...) \ - llog_dummyf((obj), (data), LLOG_DEBUG, (format), ##__VA_ARGS__) - #define llog_debug(obj, format, ...) \ - llog_ddebug((obj)->llog, (obj)->llog_data, (format), ##__VA_ARGS__) +#define llog_ddebug(obj, data, format, ...) \ + llog_dummyf((obj), (data), LLOG_DEBUG, (format), ##__VA_ARGS__) +#define llog_debug(obj, format, ...) \ + llog_ddebug((obj)->llog, (obj)->llog_data, (format), ##__VA_ARGS__) #endif -#define llog_info(obj, format, ...) \ - llog_printf((obj), LLOG_INFO, (format), ##__VA_ARGS__) -#define llog_dinfo(obj, data, format, ...) \ +#define llog_info(obj, format, ...) llog_printf((obj), LLOG_INFO, (format), ##__VA_ARGS__) +#define llog_dinfo(obj, data, format, ...) \ llog_dprintf((obj), (data), LLOG_INFO, (format), ##__VA_ARGS__) -#define llog_notice(obj, format, ...) \ - llog_printf((obj), LLOG_NOTICE, (format), ##__VA_ARGS__) -#define llog_dnotice(obj, data, format, ...) \ +#define llog_notice(obj, format, ...) llog_printf((obj), LLOG_NOTICE, (format), ##__VA_ARGS__) +#define llog_dnotice(obj, data, format, ...) \ llog_dprintf((obj), (data), LLOG_NOTICE, (format), ##__VA_ARGS__) -#define llog_warning(obj, format, ...) \ - llog_printf((obj), LLOG_WARNING, (format), ##__VA_ARGS__) -#define llog_dwarning(obj, data, format, ...) \ +#define llog_warning(obj, format, ...) llog_printf((obj), LLOG_WARNING, (format), ##__VA_ARGS__) +#define llog_dwarning(obj, data, format, ...) \ llog_dprintf((obj), (data), LLOG_WARNING, (format), ##__VA_ARGS__) -#define llog_error(obj, format, ...) \ - llog_printf((obj), LLOG_ERROR, (format), ##__VA_ARGS__) -#define llog_derror(obj, data, format, ...) \ +#define llog_error(obj, format, ...) llog_printf((obj), LLOG_ERROR, (format), ##__VA_ARGS__) +#define llog_derror(obj, data, format, ...) \ llog_dprintf((obj), (data), LLOG_ERROR, (format), ##__VA_ARGS__) -#define llog_critical(obj, format, ...) \ - llog_printf((obj), LLOG_CRITICAL, (format), ##__VA_ARGS__) -#define llog_dcritical(obj, data, format, ...) \ +#define llog_critical(obj, format, ...) llog_printf((obj), LLOG_CRITICAL, (format), ##__VA_ARGS__) +#define llog_dcritical(obj, data, format, ...) \ llog_dprintf((obj), (data), LLOG_CRITICAL, (format), ##__VA_ARGS__) -#define llog_alert(obj, format, ...) \ - llog_printf((obj), LLOG_ALERT, (format), ##__VA_ARGS__) -#define llog_dalert(obj, data, format, ...) \ +#define llog_alert(obj, format, ...) llog_printf((obj), LLOG_ALERT, (format), ##__VA_ARGS__) +#define llog_dalert(obj, data, format, ...) \ llog_dprintf((obj), (data), LLOG_ALERT, (format), ##__VA_ARGS__) -#define llog_fatal(obj, format, ...) \ - llog_printf((obj), LLOG_FATAL, (format), ##__VA_ARGS__) -#define llog_dfatal(obj, data, format, ...) \ +#define llog_fatal(obj, format, ...) llog_printf((obj), LLOG_FATAL, (format), ##__VA_ARGS__) +#define llog_dfatal(obj, data, format, ...) \ llog_dprintf((obj), (data), LLOG_FATAL, (format), ##__VA_ARGS__) #define llog_dbg llog_debug @@ -192,31 +161,19 @@ void llog_dummyf(llog_submit_t llog, void *data, unsigned int sev, * are used in debug paths and would slow down normal applications. */ -#define llog_dEINVAL(obj, data) \ - (llog_ddebug((obj), (data), "invalid arguments"), -EINVAL) -#define llog_EINVAL(obj) \ - (llog_dEINVAL((obj)->llog, (obj)->llog_data)) -#define llog_vEINVAL(obj) \ - ((void)llog_EINVAL(obj)) -#define llog_vdEINVAL(obj, data) \ - ((void)llog_dEINVAL((obj), (data))) - -#define llog_dEFAULT(obj, data) \ - (llog_ddebug((obj), (data), "operation failed"), -EFAULT) -#define llog_EFAULT(obj) \ - (llog_dEFAULT((obj)->llog, (obj)->llog_data)) -#define llog_vEFAULT(obj) \ - ((void)llog_EFAULT(obj)) -#define llog_vdEFAULT(obj, data) \ - ((void)llog_dEFAULT((obj), (data))) - -#define llog_dENOMEM(obj, data) \ - (llog_ddebug((obj), (data), "memory allocation failed"), -ENOMEM) -#define llog_ENOMEM(obj) \ - (llog_dENOMEM((obj)->llog, (obj)->llog_data)) -#define llog_vENOMEM(obj) \ - ((void)llog_ENOMEM(obj)) -#define llog_vdENOMEM(obj, data) \ - ((void)llog_dENOMEM((obj), (data))) +#define llog_dEINVAL(obj, data) (llog_ddebug((obj), (data), "invalid arguments"), -EINVAL) +#define llog_EINVAL(obj) (llog_dEINVAL((obj)->llog, (obj)->llog_data)) +#define llog_vEINVAL(obj) ((void)llog_EINVAL(obj)) +#define llog_vdEINVAL(obj, data) ((void)llog_dEINVAL((obj), (data))) + +#define llog_dEFAULT(obj, data) (llog_ddebug((obj), (data), "operation failed"), -EFAULT) +#define llog_EFAULT(obj) (llog_dEFAULT((obj)->llog, (obj)->llog_data)) +#define llog_vEFAULT(obj) ((void)llog_EFAULT(obj)) +#define llog_vdEFAULT(obj, data) ((void)llog_dEFAULT((obj), (data))) + +#define llog_dENOMEM(obj, data) (llog_ddebug((obj), (data), "memory allocation failed"), -ENOMEM) +#define llog_ENOMEM(obj) (llog_dENOMEM((obj)->llog, (obj)->llog_data)) +#define llog_vENOMEM(obj) ((void)llog_ENOMEM(obj)) +#define llog_vdENOMEM(obj, data) ((void)llog_dENOMEM((obj), (data))) #endif /* SHL_LLOG_H_INCLUDED */ diff --git a/src/shl_log.c b/src/shl_log.c index 9acae87b..e5b1b79b 100644 --- a/src/shl_log.c +++ b/src/shl_log.c @@ -76,18 +76,16 @@ static void log__time(long long *sec, long long *usec) */ SHL_EXPORT -const struct log_config LOG_CONFIG = { - .sev = { - [LOG_DEBUG] = 2, - [LOG_INFO] = 2, - [LOG_NOTICE] = 2, - [LOG_WARNING] = 2, - [LOG_ERROR] = 2, - [LOG_CRITICAL] = 2, - [LOG_ALERT] = 2, - [LOG_FATAL] = 2, - } -}; +const struct log_config LOG_CONFIG = {.sev = { + [LOG_DEBUG] = 2, + [LOG_INFO] = 2, + [LOG_NOTICE] = 2, + [LOG_WARNING] = 2, + [LOG_ERROR] = 2, + [LOG_CRITICAL] = 2, + [LOG_ALERT] = 2, + [LOG_FATAL] = 2, + }}; const char *LOG_SUBSYSTEM = NULL; @@ -116,18 +114,16 @@ const char *LOG_SUBSYSTEM = NULL; * are affected and the config parameter specifies what action is performed. */ -static struct log_config log__gconfig = { - .sev = { - [LOG_DEBUG] = 0, - [LOG_INFO] = 0, - [LOG_NOTICE] = 1, - [LOG_WARNING] = 1, - [LOG_ERROR] = 1, - [LOG_CRITICAL] = 1, - [LOG_ALERT] = 1, - [LOG_FATAL] = 1, - } -}; +static struct log_config log__gconfig = {.sev = { + [LOG_DEBUG] = 0, + [LOG_INFO] = 0, + [LOG_NOTICE] = 1, + [LOG_WARNING] = 1, + [LOG_ERROR] = 1, + [LOG_CRITICAL] = 1, + [LOG_ALERT] = 1, + [LOG_FATAL] = 1, + }}; struct log_dynconf { struct log_dynconf *next; @@ -148,8 +144,7 @@ void log_set_config(const struct log_config *config) log_unlock(); } -int log_add_filter(const struct log_filter *filter, - const struct log_config *config) +int log_add_filter(const struct log_filter *filter, const struct log_config *config) { struct log_dynconf *dconf; int ret; @@ -187,13 +182,14 @@ void log_rm_filter(int handle) if (log__dconfig->handle == handle) { dconf = log__dconfig; log__dconfig = dconf->next; - } else for (i = log__dconfig; i->next; i = i->next) { - dconf = i->next; - if (dconf->handle == handle) { - i->next = dconf->next; - break; + } else + for (i = log__dconfig; i->next; i = i->next) { + dconf = i->next; + if (dconf->handle == handle) { + i->next = dconf->next; + break; + } } - } } log_unlock(); @@ -212,11 +208,8 @@ void log_clean_filters() log_unlock(); } -static bool log__matches(const struct log_filter *filter, - const char *file, - int line, - const char *func, - const char *subs) +static bool log__matches(const struct log_filter *filter, const char *file, int line, + const char *func, const char *subs) { if (*filter->file) { if (!file || strncmp(filter->file, file, LOG_STRMAX)) @@ -235,12 +228,8 @@ static bool log__matches(const struct log_filter *filter, return true; } -static bool log__omit(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - enum log_severity sev) +static bool log__omit(const char *file, int line, const char *func, const struct log_config *config, + const char *subs, enum log_severity sev) { int val; struct log_dynconf *dconf; @@ -281,23 +270,13 @@ static bool log__omit(const char *file, * Also set default log-subsystem to "log" for all logging inside this API. */ -static void log__submit(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - va_list args); - -static void log__format(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - ...); +static void log__submit(const char *file, int line, const char *func, + const struct log_config *config, const char *subs, unsigned int sev, + const char *format, va_list args); + +static void log__format(const char *file, int line, const char *func, + const struct log_config *config, const char *subs, unsigned int sev, + const char *format, ...); #define LOG_SUBSYSTEM "log" @@ -320,8 +299,7 @@ int log_set_file(const char *file) if (file) { f = fopen(file, "a"); if (!f) { - log_err("cannot change log-file to %s (%d): %m", - file, errno); + log_err("cannot change log-file to %s (%d): %m", file, errno); return -EFAULT; } } else { @@ -333,8 +311,7 @@ int log_set_file(const char *file) log_lock(); if (log__file != f) { - log__format(LOG_DEFAULT, LOG_NOTICE, - "set log-file to %s", file); + log__format(LOG_DEFAULT, LOG_NOTICE, "set log-file to %s", file); old = log__file; log__file = f; f = NULL; @@ -364,24 +341,14 @@ int log_set_file(const char *file) */ static const char *log__sev2str[] = { - [LOG_DEBUG] = "DEBUG", - [LOG_INFO] = "INFO", - [LOG_NOTICE] = "NOTICE", - [LOG_WARNING] = "WARNING", - [LOG_ERROR] = "ERROR", - [LOG_CRITICAL] = "CRITICAL", - [LOG_ALERT] = "ALERT", - [LOG_FATAL] = "FATAL", + [LOG_DEBUG] = "DEBUG", [LOG_INFO] = "INFO", [LOG_NOTICE] = "NOTICE", + [LOG_WARNING] = "WARNING", [LOG_ERROR] = "ERROR", [LOG_CRITICAL] = "CRITICAL", + [LOG_ALERT] = "ALERT", [LOG_FATAL] = "FATAL", }; -static void log__submit(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - va_list args) +static void log__submit(const char *file, int line, const char *func, + const struct log_config *config, const char *subs, unsigned int sev, + const char *format, va_list args) { const char *prefix = NULL; FILE *out; @@ -404,11 +371,9 @@ static void log__submit(const char *file, if (prefix) { if (subs) - fprintf(out, "[%.4lld.%.6lld] %s: %s: ", - sec, usec, prefix, subs); + fprintf(out, "[%.4lld.%.6lld] %s: %s: ", sec, usec, prefix, subs); else - fprintf(out, "[%.4lld.%.6lld] %s: ", - sec, usec, prefix); + fprintf(out, "[%.4lld.%.6lld] %s: ", sec, usec, prefix); } else { if (subs) fprintf(out, "[%.4lld.%.6lld] %s: ", sec, usec, subs); @@ -432,14 +397,9 @@ static void log__submit(const char *file, fprintf(out, " (%s() in %s:%d)\n", func, file, line); } -static void log__format(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - ...) +static void log__format(const char *file, int line, const char *func, + const struct log_config *config, const char *subs, unsigned int sev, + const char *format, ...) { va_list list; @@ -449,14 +409,8 @@ static void log__format(const char *file, } SHL_EXPORT -void log_submit(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - va_list args) +void log_submit(const char *file, int line, const char *func, const struct log_config *config, + const char *subs, unsigned int sev, const char *format, va_list args) { int saved_errno = errno; @@ -468,14 +422,8 @@ void log_submit(const char *file, } SHL_EXPORT -void log_format(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - ...) +void log_format(const char *file, int line, const char *func, const struct log_config *config, + const char *subs, unsigned int sev, const char *format, ...) { va_list list; int saved_errno = errno; @@ -490,14 +438,8 @@ void log_format(const char *file, } SHL_EXPORT -void log_llog(void *data, - const char *file, - int line, - const char *func, - const char *subs, - unsigned int sev, - const char *format, - va_list args) +void log_llog(void *data, const char *file, int line, const char *func, const char *subs, + unsigned int sev, const char *format, va_list args) { log_submit(file, line, func, NULL, subs, sev, format, args); } @@ -506,7 +448,6 @@ void log_print_init(const char *appname) { if (!appname) appname = ""; - log_format(LOG_DEFAULT_CONF, NULL, LOG_NOTICE, - "%s Revision %s %s %s", appname, + log_format(LOG_DEFAULT_CONF, NULL, LOG_NOTICE, "%s Revision %s %s %s", appname, shl_git_head, __DATE__, __TIME__); } diff --git a/src/shl_log.h b/src/shl_log.h index fe623979..7840569c 100644 --- a/src/shl_log.h +++ b/src/shl_log.h @@ -119,28 +119,27 @@ struct log_config { int sev[LOG_SEV_NUM]; }; -#define LOG_CONFIG_ALL(debug, info, notice, warning, error, critical, alert, fatal) \ - (struct log_config){ .sev = { \ - [LOG_DEBUG] = (debug), \ - [LOG_INFO] = (info), \ - [LOG_NOTICE] = (notice), \ - [LOG_WARNING] = (warning), \ - [LOG_ERROR] = (error), \ - [LOG_CRITICAL] = (critical), \ - [LOG_ALERT] = (alert), \ - [LOG_FATAL] = (fatal), \ - } } +#define LOG_CONFIG_ALL(debug, info, notice, warning, error, critical, alert, fatal) \ + (struct log_config) \ + { \ + .sev = { [LOG_DEBUG] = (debug), \ + [LOG_INFO] = (info), \ + [LOG_NOTICE] = (notice), \ + [LOG_WARNING] = (warning), \ + [LOG_ERROR] = (error), \ + [LOG_CRITICAL] = (critical), \ + [LOG_ALERT] = (alert), \ + [LOG_FATAL] = (fatal), \ + } \ + } -#define LOG_CONFIG_DEBUG(debug) \ - LOG_CONFIG_ALL((debug), 2, 2, 2, 2, 2, 2, 2) -#define LOG_CONFIG_INFO(debug, info) \ - LOG_CONFIG_ALL((debug), (info), 2, 2, 2, 2, 2, 2) -#define LOG_CONFIG_WARNING(debug, info, notice, warning) \ +#define LOG_CONFIG_DEBUG(debug) LOG_CONFIG_ALL((debug), 2, 2, 2, 2, 2, 2, 2) +#define LOG_CONFIG_INFO(debug, info) LOG_CONFIG_ALL((debug), (info), 2, 2, 2, 2, 2, 2) +#define LOG_CONFIG_WARNING(debug, info, notice, warning) \ LOG_CONFIG_ALL((debug), (info), (notice), (warning), 2, 2, 2, 2) void log_set_config(const struct log_config *config); -int log_add_filter(const struct log_filter *filter, - const struct log_config *config); +int log_add_filter(const struct log_filter *filter, const struct log_config *config); void log_rm_filter(int handle); void log_clean_filter(); @@ -176,41 +175,26 @@ void log_clean_filter(); * some log-message at application start. This is a handy-helper to do this. */ -__attribute__((format(printf, 7, 0))) -void log_submit(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - va_list args); +__attribute__((format(printf, 7, 0))) void log_submit(const char *file, int line, const char *func, + const struct log_config *config, + const char *subs, unsigned int sev, + const char *format, va_list args); -__attribute__((format(printf, 7, 8))) -void log_format(const char *file, - int line, - const char *func, - const struct log_config *config, - const char *subs, - unsigned int sev, - const char *format, - ...); +__attribute__((format(printf, 7, 8))) void log_format(const char *file, int line, const char *func, + const struct log_config *config, + const char *subs, unsigned int sev, + const char *format, ...); -__attribute__((format(printf, 7, 0))) -void log_llog(void *data, - const char *file, - int line, - const char *func, - const char *subs, - unsigned int sev, - const char *format, - va_list args); +__attribute__((format(printf, 7, 0))) void log_llog(void *data, const char *file, int line, + const char *func, const char *subs, + unsigned int sev, const char *format, + va_list args); int log_set_file(const char *file); void log_print_init(const char *appname); -static inline __attribute__((format(printf, 2, 3))) -void log_dummyf(unsigned int sev, const char *format, ...) +static inline __attribute__((format(printf, 2, 3))) void log_dummyf(unsigned int sev, + const char *format, ...) { } @@ -256,8 +240,7 @@ extern const char *LOG_SUBSYSTEM; #define LOG_DEFAULT_CONF LOG_DEFAULT_BASE, &LOG_CONFIG #define LOG_DEFAULT LOG_DEFAULT_CONF, LOG_SUBSYSTEM -#define log_printf(sev, format, ...) \ - log_format(LOG_DEFAULT, (sev), (format), ##__VA_ARGS__) +#define log_printf(sev, format, ...) log_format(LOG_DEFAULT, (sev), (format), ##__VA_ARGS__) /* * Helpers @@ -268,27 +251,18 @@ extern const char *LOG_SUBSYSTEM; */ #ifdef BUILD_ENABLE_DEBUG - #define log_debug(format, ...) \ - log_printf(LOG_DEBUG, (format), ##__VA_ARGS__) +#define log_debug(format, ...) log_printf(LOG_DEBUG, (format), ##__VA_ARGS__) #else - #define log_debug(format, ...) \ - log_dummyf(LOG_DEBUG, (format), ##__VA_ARGS__) +#define log_debug(format, ...) log_dummyf(LOG_DEBUG, (format), ##__VA_ARGS__) #endif -#define log_info(format, ...) \ - log_printf(LOG_INFO, (format), ##__VA_ARGS__) -#define log_notice(format, ...) \ - log_printf(LOG_NOTICE, (format), ##__VA_ARGS__) -#define log_warning(format, ...) \ - log_printf(LOG_WARNING, (format), ##__VA_ARGS__) -#define log_error(format, ...) \ - log_printf(LOG_ERROR, (format), ##__VA_ARGS__) -#define log_critical(format, ...) \ - log_printf(LOG_CRITICAL, (format), ##__VA_ARGS__) -#define log_alert(format, ...) \ - log_printf(LOG_ALERT, (format), ##__VA_ARGS__) -#define log_fatal(format, ...) \ - log_printf(LOG_FATAL, (format), ##__VA_ARGS__) +#define log_info(format, ...) log_printf(LOG_INFO, (format), ##__VA_ARGS__) +#define log_notice(format, ...) log_printf(LOG_NOTICE, (format), ##__VA_ARGS__) +#define log_warning(format, ...) log_printf(LOG_WARNING, (format), ##__VA_ARGS__) +#define log_error(format, ...) log_printf(LOG_ERROR, (format), ##__VA_ARGS__) +#define log_critical(format, ...) log_printf(LOG_CRITICAL, (format), ##__VA_ARGS__) +#define log_alert(format, ...) log_printf(LOG_ALERT, (format), ##__VA_ARGS__) +#define log_fatal(format, ...) log_printf(LOG_FATAL, (format), ##__VA_ARGS__) #define log_dbg log_debug #define log_warn log_warning diff --git a/src/shl_misc.h b/src/shl_misc.h index 72751ea7..d7e96431 100644 --- a/src/shl_misc.h +++ b/src/shl_misc.h @@ -143,8 +143,7 @@ static inline unsigned long shl_next_pow2(unsigned long num) * array. You can set it to NULL to not retrieve this value. * \sep is the separator character which must be a valid ASCII character, * otherwise this will not be UTF8 safe. */ -static inline int shl_split_string(const char *arg, char ***out, - unsigned int *out_num, char sep, +static inline int shl_split_string(const char *arg, char ***out, unsigned int *out_num, char sep, bool keep_empty) { unsigned int i; @@ -175,13 +174,13 @@ static inline int shl_split_string(const char *arg, char ***out, size += len + 1; } - list = malloc(sizeof(char*) * (num + 1) + size); + list = malloc(sizeof(char *) * (num + 1) + size); if (!list) return -ENOMEM; - off = (void*)(((char*)list) + (sizeof(char*) * (num + 1))); + off = (void *)(((char *)list) + (sizeof(char *) * (num + 1))); i = 0; - for (pos = 0; pos < num; ) { + for (pos = 0; pos < num;) { list[pos] = off; while (arg[i] && arg[i] != sep) *off++ = arg[i++]; @@ -203,8 +202,7 @@ static inline int shl_split_string(const char *arg, char ***out, /* This parses \arg and splits the string into a new allocated array. The array * is stored in \out and is NULL terminated. \out_num is the number of entries * in the array. You can set it to NULL to not retrieve this value. */ -static inline int shl_split_command_string(const char *arg, char ***out, - unsigned int *out_num) +static inline int shl_split_command_string(const char *arg, char ***out, unsigned int *out_num) { unsigned int i; unsigned int num, len, size, pos; @@ -295,11 +293,11 @@ static inline int shl_split_command_string(const char *arg, char ***out, size += len + 1; } - list = malloc(sizeof(char*) * (num + 1) + size); + list = malloc(sizeof(char *) * (num + 1) + size); if (!list) return -ENOMEM; - off = (void*)(((char*)list) + (sizeof(char*) * (num + 1))); + off = (void *)(((char *)list) + (sizeof(char *) * (num + 1))); len = 0; pos = 0; in_word = false; @@ -436,7 +434,7 @@ static inline int shl_replace_array_with_env(char ***out, char **argv) return -EINVAL; for (len = 0; argv[len]; ++len) - /* empty */ ; + /* empty */; nargv = malloc(sizeof(*nargv) * (len + 1)); if (!nargv) @@ -451,7 +449,7 @@ static inline int shl_replace_array_with_env(char ***out, char **argv) nargv[len] = NULL; ++i; - size += i * sizeof(char*); + size += i * sizeof(char *); t = malloc(size); if (!t) { @@ -460,7 +458,7 @@ static inline int shl_replace_array_with_env(char ***out, char **argv) } *out = t; - off = (char*)t + i * sizeof(char*); + off = (char *)t + i * sizeof(char *); for (i = 0; i < len; ++i) { *t++ = off; for (j = 0; nargv[i][j]; ++j) @@ -489,14 +487,14 @@ static inline int shl_dup_array_size(char ***out, char **argv, size_t len) } ++i; - size += i * sizeof(char*); + size += i * sizeof(char *); t = malloc(size); if (!t) return -ENOMEM; *out = t; - off = (char*)t + i * sizeof(char*); + off = (char *)t + i * sizeof(char *); while (len--) { *t++ = off; for (i = 0; *argv && argv[0][i]; ++i) @@ -517,7 +515,7 @@ static inline int shl_dup_array(char ***out, char **argv) return -EINVAL; for (i = 0; argv[i]; ++i) - /* empty */ ; + /* empty */; return shl_dup_array_size(out, argv, i); } @@ -606,39 +604,33 @@ static inline int shl_read_file(const char *path, char **out, size_t *size) * We currently copy them into each library API we use so we need to keep * them in sync. Currently, they're used in uterm-input and tsm-vte. */ enum shl_xkb_mods { - SHL_SHIFT_MASK = (1 << 0), - SHL_LOCK_MASK = (1 << 1), - SHL_CONTROL_MASK = (1 << 2), - SHL_ALT_MASK = (1 << 3), - SHL_LOGO_MASK = (1 << 4), + SHL_SHIFT_MASK = (1 << 0), + SHL_LOCK_MASK = (1 << 1), + SHL_CONTROL_MASK = (1 << 2), + SHL_ALT_MASK = (1 << 3), + SHL_LOGO_MASK = (1 << 4), }; static inline unsigned int shl_get_xkb_mods(struct xkb_state *state) { unsigned int mods = 0; - if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_SHIFT, - XKB_STATE_MODS_EFFECTIVE) > 0) + if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_SHIFT, XKB_STATE_MODS_EFFECTIVE) > 0) mods |= SHL_SHIFT_MASK; - if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_CAPS, - XKB_STATE_MODS_EFFECTIVE) > 0) + if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_CAPS, XKB_STATE_MODS_EFFECTIVE) > 0) mods |= SHL_LOCK_MASK; - if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_CTRL, - XKB_STATE_MODS_EFFECTIVE) > 0) + if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_EFFECTIVE) > 0) mods |= SHL_CONTROL_MASK; - if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_ALT, - XKB_STATE_MODS_EFFECTIVE) > 0) + if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_ALT, XKB_STATE_MODS_EFFECTIVE) > 0) mods |= SHL_ALT_MASK; - if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_LOGO, - XKB_STATE_MODS_EFFECTIVE) > 0) + if (xkb_state_mod_name_is_active(state, XKB_MOD_NAME_LOGO, XKB_STATE_MODS_EFFECTIVE) > 0) mods |= SHL_LOGO_MASK; return mods; } static inline uint32_t shl_get_ascii(struct xkb_state *state, uint32_t keycode, - const uint32_t *keysyms, - unsigned int num_keysyms) + const uint32_t *keysyms, unsigned int num_keysyms) { struct xkb_keymap *keymap; xkb_layout_index_t num_layouts; @@ -655,8 +647,7 @@ static inline uint32_t shl_get_ascii(struct xkb_state *state, uint32_t keycode, for (layout = 0; layout < num_layouts; layout++) { level = xkb_state_key_get_level(state, keycode, layout); - num_syms = xkb_keymap_key_get_syms_by_level(keymap, keycode, - layout, level, &syms); + num_syms = xkb_keymap_key_get_syms_by_level(keymap, keycode, layout, level, &syms); if (num_syms != 1) continue; @@ -667,12 +658,9 @@ static inline uint32_t shl_get_ascii(struct xkb_state *state, uint32_t keycode, return XKB_KEY_NoSymbol; } -static inline bool shl_grab_matches(unsigned int ev_mods, - unsigned int ev_num_syms, - const uint32_t *ev_syms, - unsigned int grab_mods, - unsigned int grab_num_syms, - const uint32_t *grab_syms) +static inline bool shl_grab_matches(unsigned int ev_mods, unsigned int ev_num_syms, + const uint32_t *ev_syms, unsigned int grab_mods, + unsigned int grab_num_syms, const uint32_t *grab_syms) { if (!SHL_HAS_BITS(ev_mods, grab_mods)) return false; @@ -687,19 +675,15 @@ static inline bool shl_grab_matches(unsigned int ev_mods, return true; } -static inline bool shl_grab_has_match(unsigned int ev_mods, - unsigned int ev_num_syms, - const uint32_t *ev_syms, - unsigned int grab_num, +static inline bool shl_grab_has_match(unsigned int ev_mods, unsigned int ev_num_syms, + const uint32_t *ev_syms, unsigned int grab_num, const unsigned int *grab_mods, - const unsigned int *grab_num_syms, - uint32_t **grab_syms) + const unsigned int *grab_num_syms, uint32_t **grab_syms) { unsigned int i; for (i = 0; i < grab_num; ++i) { - if (shl_grab_matches(ev_mods, ev_num_syms, ev_syms, - grab_mods[i], grab_num_syms[i], + if (shl_grab_matches(ev_mods, ev_num_syms, ev_syms, grab_mods[i], grab_num_syms[i], grab_syms[i])) return true; } diff --git a/src/shl_module.c b/src/shl_module.c index aee17b1b..b8c6d19a 100644 --- a/src/shl_module.c +++ b/src/shl_module.c @@ -30,12 +30,12 @@ #include #include #include -#include "shl_module.h" -#include "shl_module_interface.h" #include "shl_dlist.h" #include "shl_githead.h" #include "shl_log.h" #include "shl_misc.h" +#include "shl_module.h" +#include "shl_module_interface.h" #define LOG_SUBSYSTEM "module" @@ -54,8 +54,7 @@ int shl_module_open(struct shl_module **out, const char *file) handle = dlopen(file, RTLD_NOW); if (!handle) { - log_error("cannot open module %s (%d): %s", - file, errno, dlerror()); + log_error("cannot open module %s (%d): %s", file, errno, dlerror()); return -EFAULT; } @@ -67,15 +66,14 @@ int shl_module_open(struct shl_module **out, const char *file) } if (strcmp(module->info.githead, shl_git_head)) { - log_error("incompatible module %s (%s != %s)", - file, module->info.githead, shl_git_head); + log_error("incompatible module %s (%s != %s)", file, module->info.githead, + shl_git_head); ret = -EFAULT; goto err_unload; } if (module->ref != 0) { - log_error("module %s already loaded (%ld)", - file, module->ref); + log_error("module %s already loaded (%ld)", file, module->ref); ret = -EFAULT; goto err_unload; } @@ -94,17 +92,13 @@ int shl_module_open(struct shl_module **out, const char *file) log_debug(" Date: %s %s", module->info.date, module->info.time); log_debug(" GIT: %s", module->info.githead); - log_debug(" Hooks: %p %p %p %p", - module->info.init, - module->info.load, - module->info.unload, + log_debug(" Hooks: %p %p %p %p", module->info.init, module->info.load, module->info.unload, module->info.exit); if (module->info.init) { ret = module->info.init(); if (ret) { - log_error("loading module %s failed: %d", - module->file, ret); + log_error("loading module %s failed: %d", module->file, ret); goto err_file; } } @@ -195,21 +189,19 @@ void kmscon_load_modules(void) ent = opendir(BUILD_MODULE_DIR); if (!ent) { if (errno == ENOTDIR || errno == ENOENT) - log_debug("module directory %s not available", - BUILD_MODULE_DIR); + log_debug("module directory %s not available", BUILD_MODULE_DIR); else - log_error("cannot open module directory %s (%d): %m", - BUILD_MODULE_DIR, errno); + log_error("cannot open module directory %s (%d): %m", BUILD_MODULE_DIR, + errno); return; } while (true) { - errno = 0; - de = readdir(ent); + errno = 0; + de = readdir(ent); if (!de && errno != 0) { - int errsv = errno; - log_error("cannot read directory %s: %d", - BUILD_MODULE_DIR, errsv); + int errsv = errno; + log_error("cannot read directory %s: %d", BUILD_MODULE_DIR, errsv); break; } else if (!de) { break; @@ -218,11 +210,9 @@ void kmscon_load_modules(void) if (de->d_type == DT_DIR) continue; - if (de->d_type != DT_REG && - de->d_type != DT_LNK && - de->d_type != DT_UNKNOWN) { - log_warning("non-module file %s in module dir %s", - de->d_name, BUILD_MODULE_DIR); + if (de->d_type != DT_REG && de->d_type != DT_LNK && de->d_type != DT_UNKNOWN) { + log_warning("non-module file %s in module dir %s", de->d_name, + BUILD_MODULE_DIR); continue; } @@ -260,8 +250,7 @@ void kmscon_unload_modules(void) log_debug("unloading modules"); while (!shl_dlist_empty(&module_list)) { - module = shl_dlist_entry(module_list.prev, struct shl_module, - list); + module = shl_dlist_entry(module_list.prev, struct shl_module, list); shl_dlist_unlink(&module->list); shl_module_unload(module); shl_module_unref(module); diff --git a/src/shl_module_interface.h b/src/shl_module_interface.h index a83913e5..f2decf5a 100644 --- a/src/shl_module_interface.h +++ b/src/shl_module_interface.h @@ -32,19 +32,19 @@ #include #include -#include "shl_module.h" #include "shl_dlist.h" #include "shl_githead.h" #include "shl_misc.h" +#include "shl_module.h" struct shl_module_info { const char *githead; const char *date; const char *time; - int (*init) (void); - int (*load) (void); - void (*unload) (void); - void (*exit) (void); + int (*init)(void); + int (*load)(void); + void (*unload)(void); + void (*exit)(void); }; struct shl_module { @@ -56,17 +56,18 @@ struct shl_module { char *file; }; -#define SHL_MODULE(_init, _load, _unload, _exit) \ - struct shl_module module = { \ - .info = { \ - .githead = shl_git_head, \ - .date = __DATE__, \ - .time = __TIME__, \ - .init = _init, \ - .load = _load, \ - .unload = _unload, \ - .exit = _exit, \ - }, \ +#define SHL_MODULE(_init, _load, _unload, _exit) \ + struct shl_module module = { \ + .info = \ + { \ + .githead = shl_git_head, \ + .date = __DATE__, \ + .time = __TIME__, \ + .init = _init, \ + .load = _load, \ + .unload = _unload, \ + .exit = _exit, \ + }, \ }; SHL_EXPORT diff --git a/src/shl_register.h b/src/shl_register.h index d00edff0..484b50dc 100644 --- a/src/shl_register.h +++ b/src/shl_register.h @@ -45,7 +45,7 @@ #include #include "shl_dlist.h" -typedef void (*shl_register_destroy_cb) (void *data); +typedef void (*shl_register_destroy_cb)(void *data); struct shl_register_record { struct shl_dlist list; @@ -62,9 +62,10 @@ struct shl_register { struct shl_dlist records; }; -#define SHL_REGISTER_INIT(name) { \ - .mutex = PTHREAD_MUTEX_INITIALIZER, \ - .records = SHL_DLIST_INIT((name).records), \ +#define SHL_REGISTER_INIT(name) \ + { \ + .mutex = PTHREAD_MUTEX_INITIALIZER, \ + .records = SHL_DLIST_INIT((name).records), \ } static inline void shl_register_record_ref(struct shl_register_record *record) @@ -141,9 +142,9 @@ static inline void shl_register_free(struct shl_register *reg) if (!reg) return; - shl_dlist_for_each(iter, ®->records) { - record = shl_dlist_entry(iter, struct shl_register_record, - list); + shl_dlist_for_each(iter, ®->records) + { + record = shl_dlist_entry(iter, struct shl_register_record, list); shl_dlist_unlink(&record->list); shl_register_record_unref(record); } @@ -152,8 +153,7 @@ static inline void shl_register_free(struct shl_register *reg) free(reg); } -static inline int shl_register_add_cb(struct shl_register *reg, - const char *name, void *data, +static inline int shl_register_add_cb(struct shl_register *reg, const char *name, void *data, shl_register_destroy_cb destroy) { struct shl_dlist *iter; @@ -167,9 +167,9 @@ static inline int shl_register_add_cb(struct shl_register *reg, if (ret) return -EFAULT; - shl_dlist_for_each(iter, ®->records) { - record = shl_dlist_entry(iter, struct shl_register_record, - list); + shl_dlist_for_each(iter, ®->records) + { + record = shl_dlist_entry(iter, struct shl_register_record, list); if (!strcmp(record->name, name)) { ret = -EALREADY; goto out_unlock; @@ -211,14 +211,12 @@ static inline int shl_register_add_cb(struct shl_register *reg, return ret; } -static inline int shl_register_add(struct shl_register *reg, const char *name, - void *data) +static inline int shl_register_add(struct shl_register *reg, const char *name, void *data) { return shl_register_add_cb(reg, name, data, NULL); } -static inline void shl_register_remove(struct shl_register *reg, - const char *name) +static inline void shl_register_remove(struct shl_register *reg, const char *name) { struct shl_dlist *iter; struct shl_register_record *record; @@ -231,9 +229,9 @@ static inline void shl_register_remove(struct shl_register *reg, if (ret) return; - shl_dlist_for_each(iter, ®->records) { - record = shl_dlist_entry(iter, struct shl_register_record, - list); + shl_dlist_for_each(iter, ®->records) + { + record = shl_dlist_entry(iter, struct shl_register_record, list); if (strcmp(record->name, name)) continue; @@ -245,9 +243,8 @@ static inline void shl_register_remove(struct shl_register *reg, pthread_mutex_unlock(®->mutex); } -static inline struct shl_register_record *shl_register_find( - struct shl_register *reg, - const char *name) +static inline struct shl_register_record *shl_register_find(struct shl_register *reg, + const char *name) { struct shl_dlist *iter; struct shl_register_record *record, *res; @@ -261,9 +258,9 @@ static inline struct shl_register_record *shl_register_find( return NULL; res = NULL; - shl_dlist_for_each(iter, ®->records) { - record = shl_dlist_entry(iter, struct shl_register_record, - list); + shl_dlist_for_each(iter, ®->records) + { + record = shl_dlist_entry(iter, struct shl_register_record, list); if (!strcmp(record->name, name)) { res = record; shl_register_record_ref(res); @@ -275,8 +272,7 @@ static inline struct shl_register_record *shl_register_find( return res; } -static inline struct shl_register_record *shl_register_first( - struct shl_register *reg) +static inline struct shl_register_record *shl_register_first(struct shl_register *reg) { int ret; void *res; @@ -291,8 +287,7 @@ static inline struct shl_register_record *shl_register_first( if (shl_dlist_empty(®->records)) { res = NULL; } else { - res = shl_dlist_entry(reg->records.next, - struct shl_register_record, list); + res = shl_dlist_entry(reg->records.next, struct shl_register_record, list); shl_register_record_ref(res); } @@ -300,8 +295,7 @@ static inline struct shl_register_record *shl_register_first( return res; } -static inline struct shl_register_record *shl_register_last( - struct shl_register *reg) +static inline struct shl_register_record *shl_register_last(struct shl_register *reg) { int ret; void *res; @@ -316,8 +310,7 @@ static inline struct shl_register_record *shl_register_last( if (shl_dlist_empty(®->records)) { res = NULL; } else { - res = shl_dlist_entry(reg->records.prev, - struct shl_register_record, list); + res = shl_dlist_entry(reg->records.prev, struct shl_register_record, list); shl_register_record_ref(res); } diff --git a/src/shl_ring.h b/src/shl_ring.h index bd346f64..a8f8105f 100644 --- a/src/shl_ring.h +++ b/src/shl_ring.h @@ -89,8 +89,7 @@ static inline bool shl_ring_is_empty(struct shl_ring *ring) return ring->first == NULL; } -static inline int shl_ring_write(struct shl_ring *ring, const char *val, - size_t len) +static inline int shl_ring_write(struct shl_ring *ring, const char *val, size_t len) { struct shl_ring_entry *ent; size_t space, cp; @@ -131,8 +130,7 @@ static inline int shl_ring_write(struct shl_ring *ring, const char *val, return 0; } -static inline const char *shl_ring_peek(struct shl_ring *ring, size_t *len, - size_t offset) +static inline const char *shl_ring_peek(struct shl_ring *ring, size_t *len, size_t offset) { struct shl_ring_entry *iter; diff --git a/src/text.c b/src/text.c index 29cb079d..5d6f95c5 100644 --- a/src/text.c +++ b/src/text.c @@ -76,11 +76,9 @@ int kmscon_text_register(const struct kmscon_text_ops *ops) log_debug("register text backend %s", ops->name); - ret = shl_register_add_cb(&text_reg, ops->name, (void*)ops, - kmscon_text_destroy); + ret = shl_register_add_cb(&text_reg, ops->name, (void *)ops, kmscon_text_destroy); if (ret) { - log_error("cannot register text backend %s: %d", ops->name, - ret); + log_error("cannot register text backend %s: %d", ops->name, ret); return ret; } @@ -167,16 +165,13 @@ int kmscon_text_new(struct kmscon_text **out, const char *backend, const char *r if (strncmp(rotate, "normal", 6) == 0) { text->orientation = OR_NORMAL; log_debug("using: orientation: normal"); - } - else if (strncmp(rotate, "right", 5) == 0) { + } else if (strncmp(rotate, "right", 5) == 0) { text->orientation = OR_RIGHT; log_debug("using: orientation: right"); - } - else if (strncmp(rotate, "upside-down", 8) == 0) { + } else if (strncmp(rotate, "upside-down", 8) == 0) { text->orientation = OR_UPSIDE_DOWN; log_debug("using: orientation: upside-down"); - } - else if (strncmp(rotate, "left", 4) == 0) { + } else if (strncmp(rotate, "left", 4) == 0) { text->orientation = OR_LEFT; log_debug("using: orientation: left"); } @@ -253,10 +248,8 @@ void kmscon_text_unref(struct kmscon_text *text) * * Returns: 0 on success, negative error code on failure. */ -int kmscon_text_set(struct kmscon_text *txt, - struct kmscon_font *font, - struct kmscon_font *bold_font, - struct uterm_display *disp) +int kmscon_text_set(struct kmscon_text *txt, struct kmscon_font *font, + struct kmscon_font *bold_font, struct uterm_display *disp) { int ret; @@ -445,10 +438,8 @@ int kmscon_text_prepare(struct kmscon_text *txt) * * Returns: 0 on success or negative error code if this glyph couldn't be drawn. */ -int kmscon_text_draw(struct kmscon_text *txt, - uint64_t id, const uint32_t *ch, size_t len, - unsigned int width, - unsigned int posx, unsigned int posy, +int kmscon_text_draw(struct kmscon_text *txt, uint64_t id, const uint32_t *ch, size_t len, + unsigned int width, unsigned int posx, unsigned int posy, const struct tsm_screen_attr *attr) { bool previous_overflow; @@ -480,9 +471,8 @@ int kmscon_text_draw(struct kmscon_text *txt, * * Returns: 0 on success or negative error code if it couldn't be drawn. */ -int kmscon_text_draw_pointer(struct kmscon_text *txt, - unsigned int x, unsigned int y, - const struct tsm_screen_attr *attr) +int kmscon_text_draw_pointer(struct kmscon_text *txt, unsigned int x, unsigned int y, + const struct tsm_screen_attr *attr) { if (!txt || !txt->rendering || !txt->ops->draw_pointer) return -EINVAL; @@ -533,12 +523,9 @@ void kmscon_text_abort(struct kmscon_text *txt) txt->rendering = false; } -int kmscon_text_draw_cb(struct tsm_screen *con, - uint64_t id, const uint32_t *ch, size_t len, - unsigned int width, - unsigned int posx, unsigned int posy, - const struct tsm_screen_attr *attr, - tsm_age_t age, void *data) +int kmscon_text_draw_cb(struct tsm_screen *con, uint64_t id, const uint32_t *ch, size_t len, + unsigned int width, unsigned int posx, unsigned int posy, + const struct tsm_screen_attr *attr, tsm_age_t age, void *data) { return kmscon_text_draw(data, id, ch, len, width, posx, posy, attr); } \ No newline at end of file diff --git a/src/text.h b/src/text.h index da8a4926..74063253 100644 --- a/src/text.h +++ b/src/text.h @@ -45,7 +45,7 @@ enum Orientation { OR_NORMAL = 0, // 0 Degree OR_RIGHT, // 90 Degree - OR_UPSIDE_DOWN, // 180 Degree + OR_UPSIDE_DOWN, // 180 Degree OR_LEFT, // 270 Degree }; @@ -71,23 +71,19 @@ struct kmscon_text { struct kmscon_text_ops { const char *name; struct shl_module *owner; - int (*init) (struct kmscon_text *txt); - void (*destroy) (struct kmscon_text *txt); - int (*set) (struct kmscon_text *txt); - void (*unset) (struct kmscon_text *txt); - int (*rotate) (struct kmscon_text *txt, enum Orientation orientation); - int (*prepare) (struct kmscon_text *txt); - int (*draw) (struct kmscon_text *txt, - uint64_t id, const uint32_t *ch, size_t len, - unsigned int width, - unsigned int posx, unsigned int posy, - const struct tsm_screen_attr *attr); - int (*draw_pointer) (struct kmscon_text *txt, - unsigned int x, - unsigned int y, - const struct tsm_screen_attr *attr); - int (*render) (struct kmscon_text *txt); - void (*abort) (struct kmscon_text *txt); + int (*init)(struct kmscon_text *txt); + void (*destroy)(struct kmscon_text *txt); + int (*set)(struct kmscon_text *txt); + void (*unset)(struct kmscon_text *txt); + int (*rotate)(struct kmscon_text *txt, enum Orientation orientation); + int (*prepare)(struct kmscon_text *txt); + int (*draw)(struct kmscon_text *txt, uint64_t id, const uint32_t *ch, size_t len, + unsigned int width, unsigned int posx, unsigned int posy, + const struct tsm_screen_attr *attr); + int (*draw_pointer)(struct kmscon_text *txt, unsigned int x, unsigned int y, + const struct tsm_screen_attr *attr); + int (*render)(struct kmscon_text *txt); + void (*abort)(struct kmscon_text *txt); }; #define FONT_WIDTH(txt) ((txt)->font->attr.width) @@ -100,10 +96,8 @@ int kmscon_text_new(struct kmscon_text **out, const char *backend, const char *r void kmscon_text_ref(struct kmscon_text *txt); void kmscon_text_unref(struct kmscon_text *txt); -int kmscon_text_set(struct kmscon_text *txt, - struct kmscon_font *font, - struct kmscon_font *bold_font, - struct uterm_display *disp); +int kmscon_text_set(struct kmscon_text *txt, struct kmscon_font *font, + struct kmscon_font *bold_font, struct uterm_display *disp); void kmscon_text_unset(struct kmscon_text *txt); unsigned int kmscon_text_get_cols(struct kmscon_text *txt); unsigned int kmscon_text_get_rows(struct kmscon_text *txt); @@ -112,23 +106,17 @@ enum Orientation kmscon_text_get_orientation(struct kmscon_text *txt); int kmscon_text_rotate(struct kmscon_text *txt, enum Orientation orientation); int kmscon_text_prepare(struct kmscon_text *txt); -int kmscon_text_draw(struct kmscon_text *txt, - uint64_t id, const uint32_t *ch, size_t len, - unsigned int width, - unsigned int posx, unsigned int posy, +int kmscon_text_draw(struct kmscon_text *txt, uint64_t id, const uint32_t *ch, size_t len, + unsigned int width, unsigned int posx, unsigned int posy, const struct tsm_screen_attr *attr); -int kmscon_text_draw_pointer(struct kmscon_text *txt, - unsigned int x, unsigned int y, +int kmscon_text_draw_pointer(struct kmscon_text *txt, unsigned int x, unsigned int y, const struct tsm_screen_attr *attr); int kmscon_text_render(struct kmscon_text *txt); void kmscon_text_abort(struct kmscon_text *txt); -int kmscon_text_draw_cb(struct tsm_screen *con, - uint64_t id, const uint32_t *ch, size_t len, - unsigned int width, - unsigned int posx, unsigned int posy, - const struct tsm_screen_attr *attr, - tsm_age_t age, void *data); +int kmscon_text_draw_cb(struct tsm_screen *con, uint64_t id, const uint32_t *ch, size_t len, + unsigned int width, unsigned int posx, unsigned int posy, + const struct tsm_screen_attr *attr, tsm_age_t age, void *data); /* modularized backends */ diff --git a/src/text_bbulk.c b/src/text_bbulk.c index ae2cdca4..cc0c3bf6 100644 --- a/src/text_bbulk.c +++ b/src/text_bbulk.c @@ -132,7 +132,6 @@ static int bbulk_set(struct kmscon_text *txt) req->y = sh - (j + 1) * FONT_WIDTH(txt); break; } - } } if (kmscon_rotate_create_tables(&bb->glyphs, &bb->bold_glyphs, free_glyph)) @@ -160,8 +159,8 @@ static int bbulk_rotate(struct kmscon_text *txt, enum Orientation orientation) return bbulk_set(txt); } -static int find_glyph(struct kmscon_text *txt, struct uterm_video_buffer **out, - uint64_t id, const uint32_t *ch, size_t len, const struct tsm_screen_attr *attr) +static int find_glyph(struct kmscon_text *txt, struct uterm_video_buffer **out, uint64_t id, + const uint32_t *ch, size_t len, const struct tsm_screen_attr *attr) { struct bbulk *bb = txt->data; struct uterm_video_buffer *bb_glyph; @@ -189,7 +188,7 @@ static int find_glyph(struct kmscon_text *txt, struct uterm_video_buffer **out, else font->attr.italic = false; - res = shl_hashtable_find(gtable, (void**)&bb_glyph, id); + res = shl_hashtable_find(gtable, (void **)&bb_glyph, id); if (res) { *out = bb_glyph; return 0; @@ -211,7 +210,7 @@ static int find_glyph(struct kmscon_text *txt, struct uterm_video_buffer **out, goto err_free; } - ret = kmscon_rotate_glyph( bb_glyph, glyph, txt->orientation, 1); + ret = kmscon_rotate_glyph(bb_glyph, glyph, txt->orientation, 1); if (ret) goto err_free; @@ -229,10 +228,8 @@ static int find_glyph(struct kmscon_text *txt, struct uterm_video_buffer **out, return ret; } -static int bbulk_draw(struct kmscon_text *txt, - uint64_t id, const uint32_t *ch, size_t len, - unsigned int width, - unsigned int posx, unsigned int posy, +static int bbulk_draw(struct kmscon_text *txt, uint64_t id, const uint32_t *ch, size_t len, + unsigned int width, unsigned int posx, unsigned int posy, const struct tsm_screen_attr *attr) { struct bbulk *bb = txt->data; @@ -281,9 +278,8 @@ static int bbulk_draw(struct kmscon_text *txt, return 0; } -static int bblit_draw_pointer(struct kmscon_text *txt, - unsigned int pointer_x, unsigned int pointer_y, - const struct tsm_screen_attr *attr) +static int bblit_draw_pointer(struct kmscon_text *txt, unsigned int pointer_x, + unsigned int pointer_y, const struct tsm_screen_attr *attr) { struct bbulk *bb = txt->data; struct uterm_video_blend_req *req; @@ -367,8 +363,7 @@ static int bbulk_render(struct kmscon_text *txt) struct bbulk *bb = txt->data; int ret; - ret = uterm_display_fake_blendv(txt->disp, bb->reqs, - bb->req_len); + ret = uterm_display_fake_blendv(txt->disp, bb->reqs, bb->req_len); return ret; } diff --git a/src/text_gltex.c b/src/text_gltex.c index 4997514e..a2805fb3 100644 --- a/src/text_gltex.c +++ b/src/text_gltex.c @@ -38,9 +38,9 @@ #define GL_GLEXT_PROTOTYPES -#include #include #include +#include #include #include #include @@ -51,15 +51,15 @@ #include "shl_log.h" #include "shl_misc.h" #include "text.h" -#include "uterm_video.h" #include "text_gltex_atlas.frag.bin.h" #include "text_gltex_atlas.vert.bin.h" +#include "uterm_video.h" #define LOG_SUBSYSTEM "text_gltex" /* thanks khronos for breaking backwards compatibility.. */ #if !defined(GL_UNPACK_ROW_LENGTH) && defined(GL_UNPACK_ROW_LENGTH_EXT) -# define GL_UNPACK_ROW_LENGTH GL_UNPACK_ROW_LENGTH_EXT +#define GL_UNPACK_ROW_LENGTH GL_UNPACK_ROW_LENGTH_EXT #endif struct atlas { @@ -150,8 +150,7 @@ static int gltex_set(struct kmscon_text *txt) struct gltex *gt = txt->data; int ret, vlen, flen; const char *vert, *frag; - static char *attr[] = { "position", "texture_position", - "fgcolor", "bgcolor" }; + static char *attr[] = {"position", "texture_position", "fgcolor", "bgcolor"}; GLint s; const char *ext; struct uterm_mode *mode; @@ -160,13 +159,11 @@ static int gltex_set(struct kmscon_text *txt) memset(gt, 0, sizeof(*gt)); shl_dlist_init(>->atlases); - ret = shl_hashtable_new(>->glyphs, shl_direct_hash, - shl_direct_equal, free_glyph); + ret = shl_hashtable_new(>->glyphs, shl_direct_hash, shl_direct_equal, free_glyph); if (ret) return ret; - ret = shl_hashtable_new(>->bold_glyphs, shl_direct_hash, - shl_direct_equal, free_glyph); + ret = shl_hashtable_new(>->bold_glyphs, shl_direct_hash, shl_direct_equal, free_glyph); if (ret) goto err_htable; @@ -183,8 +180,7 @@ static int gltex_set(struct kmscon_text *txt) flen = _binary_text_gltex_atlas_frag_size; gl_clear_error(); - ret = gl_shader_new(>->shader, vert, vlen, frag, flen, attr, 4, - log_llog, NULL); + ret = gl_shader_new(>->shader, vert, vlen, frag, flen, attr, 4, log_llog, NULL); if (ret) goto err_bold_htable; @@ -192,10 +188,8 @@ static int gltex_set(struct kmscon_text *txt) gt->uni_sin = gl_shader_get_uniform(gt->shader, "sin"); gt->uni_proj = gl_shader_get_uniform(gt->shader, "projection"); gt->uni_atlas = gl_shader_get_uniform(gt->shader, "atlas"); - gt->uni_advance_htex = gl_shader_get_uniform(gt->shader, - "advance_htex"); - gt->uni_advance_vtex = gl_shader_get_uniform(gt->shader, - "advance_vtex"); + gt->uni_advance_htex = gl_shader_get_uniform(gt->shader, "advance_htex"); + gt->uni_advance_vtex = gl_shader_get_uniform(gt->shader, "advance_vtex"); if (gl_has_error(gt->shader)) { log_warning("cannot create shader"); @@ -223,11 +217,12 @@ static int gltex_set(struct kmscon_text *txt) gl_clear_error(); - ext = (const char*)glGetString(GL_EXTENSIONS); - if (ext && strstr((const char*)ext, "GL_EXT_unpack_subimage")) { + ext = (const char *)glGetString(GL_EXTENSIONS); + if (ext && strstr((const char *)ext, "GL_EXT_unpack_subimage")) { gt->supports_rowlen = true; } else { - log_warning("your GL implementation does not support GL_EXT_unpack_subimage, glyph-rendering may be slower than usual"); + log_warning("your GL implementation does not support GL_EXT_unpack_subimage, " + "glyph-rendering may be slower than usual"); } return 0; @@ -291,8 +286,7 @@ static struct atlas *get_atlas(struct kmscon_text *txt, unsigned int num) /* check whether the last added atlas has still room for one glyph */ if (!shl_dlist_empty(>->atlases)) { - atlas = shl_dlist_entry(gt->atlases.next, struct atlas, - list); + atlas = shl_dlist_entry(gt->atlases.next, struct atlas, list); if (atlas->fill + num <= atlas->count) return atlas; } @@ -327,8 +321,8 @@ static struct atlas *get_atlas(struct kmscon_text *txt, unsigned int num) gl_clear_error(); glBindTexture(GL_TEXTURE_2D, atlas->tex); - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, - 0, GL_ALPHA, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, + NULL); err = glGetError(); if (err != GL_NO_ERROR) { @@ -337,8 +331,7 @@ static struct atlas *get_atlas(struct kmscon_text *txt, unsigned int num) goto try_next; } gl_clear_error(); - log_warning("OpenGL textures too small for a single glyph (%d)", - err); + log_warning("OpenGL textures too small for a single glyph (%d)", err); goto err_tex; } @@ -384,8 +377,8 @@ static struct atlas *get_atlas(struct kmscon_text *txt, unsigned int num) return NULL; } -static int find_glyph(struct kmscon_text *txt, struct glyph **out, - uint64_t id, const uint32_t *ch, size_t len, const struct tsm_screen_attr *attr) +static int find_glyph(struct kmscon_text *txt, struct glyph **out, uint64_t id, const uint32_t *ch, + size_t len, const struct tsm_screen_attr *attr) { struct gltex *gt = txt->data; struct atlas *atlas; @@ -415,7 +408,7 @@ static int find_glyph(struct kmscon_text *txt, struct glyph **out, else font->attr.italic = false; - res = shl_hashtable_find(gtable, (void**)&glyph, id); + res = shl_hashtable_find(gtable, (void **)&glyph, id); if (res) { *out = glyph; return 0; @@ -456,12 +449,9 @@ static int find_glyph(struct kmscon_text *txt, struct glyph **out, glPixelStorei(GL_UNPACK_ALIGNMENT, 1); if (!gt->supports_rowlen) { if (GLYPH_STRIDE(glyph) == GLYPH_WIDTH(glyph)) { - glTexSubImage2D(GL_TEXTURE_2D, 0, - FONT_WIDTH(txt) * atlas->fill, 0, - GLYPH_WIDTH(glyph), - GLYPH_HEIGHT(glyph), - GL_ALPHA, GL_UNSIGNED_BYTE, - GLYPH_DATA(glyph)); + glTexSubImage2D(GL_TEXTURE_2D, 0, FONT_WIDTH(txt) * atlas->fill, 0, + GLYPH_WIDTH(glyph), GLYPH_HEIGHT(glyph), GL_ALPHA, + GL_UNSIGNED_BYTE, GLYPH_DATA(glyph)); } else { packed_data = malloc(GLYPH_WIDTH(glyph) * GLYPH_HEIGHT(glyph)); if (!packed_data) { @@ -478,21 +468,15 @@ static int find_glyph(struct kmscon_text *txt, struct glyph **out, src += GLYPH_STRIDE(glyph); } - glTexSubImage2D(GL_TEXTURE_2D, 0, - FONT_WIDTH(txt) * atlas->fill, 0, - GLYPH_WIDTH(glyph), - GLYPH_HEIGHT(glyph), - GL_ALPHA, GL_UNSIGNED_BYTE, - packed_data); + glTexSubImage2D(GL_TEXTURE_2D, 0, FONT_WIDTH(txt) * atlas->fill, 0, + GLYPH_WIDTH(glyph), GLYPH_HEIGHT(glyph), GL_ALPHA, + GL_UNSIGNED_BYTE, packed_data); free(packed_data); } } else { glPixelStorei(GL_UNPACK_ROW_LENGTH, GLYPH_STRIDE(glyph)); - glTexSubImage2D(GL_TEXTURE_2D, 0, - FONT_WIDTH(txt) * atlas->fill, 0, - GLYPH_WIDTH(glyph), - GLYPH_HEIGHT(glyph), - GL_ALPHA, GL_UNSIGNED_BYTE, + glTexSubImage2D(GL_TEXTURE_2D, 0, FONT_WIDTH(txt) * atlas->fill, 0, + GLYPH_WIDTH(glyph), GLYPH_HEIGHT(glyph), GL_ALPHA, GL_UNSIGNED_BYTE, GLYPH_DATA(glyph)); glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); } @@ -509,7 +493,8 @@ static int find_glyph(struct kmscon_text *txt, struct glyph **out, err = glGetError(); if (err != GL_NO_ERROR) { gl_clear_error(); - log_warning("cannot load glyph data into OpenGL texture (%d: %s); disable the GL-renderer if this does not work reliably", + log_warning("cannot load glyph data into OpenGL texture (%d: %s); disable the " + "GL-renderer if this does not work reliably", err, gl_err_to_str(err)); ret = -EFAULT; goto err_free; @@ -552,11 +537,11 @@ static int gltex_rotate(struct kmscon_text *txt, enum Orientation orientation) gt->advance_x = 2.0 / gt->sw * FONT_WIDTH(txt); gt->advance_y = 2.0 / gt->sh * FONT_HEIGHT(txt); } else { - float aspect = (float) gt->sw / (float) gt->sh; + float aspect = (float)gt->sw / (float)gt->sh; txt->cols = gt->sh / FONT_WIDTH(txt); txt->rows = gt->sw / FONT_HEIGHT(txt); gt->advance_x = 2.0 / gt->sw * FONT_WIDTH(txt) * aspect; - gt->advance_y = 2.0 / gt->sh * FONT_HEIGHT(txt) * (1./aspect); + gt->advance_y = 2.0 / gt->sh * FONT_HEIGHT(txt) * (1. / aspect); } gltex_unset(txt); gltex_set(txt); @@ -574,7 +559,8 @@ static int gltex_prepare(struct kmscon_text *txt) if (ret) return ret; - shl_dlist_for_each(iter, >->atlases) { + shl_dlist_for_each(iter, >->atlases) + { atlas = shl_dlist_entry(iter, struct atlas, list); atlas->cache_num = 0; @@ -584,19 +570,17 @@ static int gltex_prepare(struct kmscon_text *txt) gt->advance_x = 2.0 / gt->sw * FONT_WIDTH(txt); gt->advance_y = 2.0 / gt->sh * FONT_HEIGHT(txt); } else { - float aspect = (float) gt->sw / (float) gt->sh; + float aspect = (float)gt->sw / (float)gt->sh; gt->advance_x = 2.0 / gt->sw * FONT_WIDTH(txt) * aspect; - gt->advance_y = 2.0 / gt->sh * FONT_HEIGHT(txt) * (1./aspect); + gt->advance_y = 2.0 / gt->sh * FONT_HEIGHT(txt) * (1. / aspect); } gltex_set_rotate(gt, txt->orientation); return 0; } -static int gltex_draw(struct kmscon_text *txt, - uint64_t id, const uint32_t *ch, size_t len, - unsigned int width, - unsigned int posx, unsigned int posy, +static int gltex_draw(struct kmscon_text *txt, uint64_t id, const uint32_t *ch, size_t len, + unsigned int width, unsigned int posx, unsigned int posy, const struct tsm_screen_attr *attr) { struct gltex *gt = txt->data; @@ -677,8 +661,7 @@ static int gltex_draw(struct kmscon_text *txt, return 0; } -static int gltex_draw_pointer(struct kmscon_text *txt, - unsigned int x, unsigned int y, +static int gltex_draw_pointer(struct kmscon_text *txt, unsigned int x, unsigned int y, const struct tsm_screen_attr *attr) { struct gltex *gt = txt->data; @@ -699,7 +682,7 @@ static int gltex_draw_pointer(struct kmscon_text *txt, if (atlas->cache_num >= atlas->cache_size) return -ERANGE; - if(txt->orientation == OR_NORMAL || txt->orientation == OR_UPSIDE_DOWN) { + if (txt->orientation == OR_NORMAL || txt->orientation == OR_UPSIDE_DOWN) { sw = gt->sw; sh = gt->sh; } else { @@ -790,7 +773,8 @@ static int gltex_render(struct kmscon_text *txt) glActiveTexture(GL_TEXTURE0); glUniform1i(gt->uni_atlas, 0); - shl_dlist_for_each(iter, >->atlases) { + shl_dlist_for_each(iter, >->atlases) + { atlas = shl_dlist_entry(iter, struct atlas, list); if (!atlas->cache_num) continue; diff --git a/src/uterm_drm2d_internal.h b/src/uterm_drm2d_internal.h index e3c8aa91..e00a7dd7 100644 --- a/src/uterm_drm2d_internal.h +++ b/src/uterm_drm2d_internal.h @@ -53,11 +53,9 @@ struct uterm_drm2d_video { }; int uterm_drm2d_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, - size_t num); -int uterm_drm2d_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height); + const struct uterm_video_blend_req *req, size_t num); +int uterm_drm2d_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, + unsigned int x, unsigned int y, unsigned int width, + unsigned int height); #endif /* UTERM_DRM2D_INTERNAL_H */ diff --git a/src/uterm_drm2d_render.c b/src/uterm_drm2d_render.c index fbb9019a..7fb46e72 100644 --- a/src/uterm_drm2d_render.c +++ b/src/uterm_drm2d_render.c @@ -39,16 +39,15 @@ #include #include "eloop.h" #include "shl_log.h" -#include "uterm_drm_shared_internal.h" #include "uterm_drm2d_internal.h" +#include "uterm_drm_shared_internal.h" #include "uterm_video.h" #include "uterm_video_internal.h" #define LOG_SUBSYSTEM "uterm_drm2d_render" int uterm_drm2d_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, - size_t num) + const struct uterm_video_blend_req *req, size_t num) { unsigned int tmp; uint8_t *dst, *src; @@ -110,24 +109,21 @@ int uterm_drm2d_display_fake_blendv(struct uterm_display *disp, b = req->fb; out = (r << 16) | (g << 8) | b; } else { - r = req->fr * src[i] + - req->br * (255 - src[i]); + r = req->fr * src[i] + req->br * (255 - src[i]); r += 0x80; r = (r + (r >> 8)) >> 8; - g = req->fg * src[i] + - req->bg * (255 - src[i]); + g = req->fg * src[i] + req->bg * (255 - src[i]); g += 0x80; g = (g + (g >> 8)) >> 8; - b = req->fb * src[i] + - req->bb * (255 - src[i]); + b = req->fb * src[i] + req->bb * (255 - src[i]); b += 0x80; b = (b + (b >> 8)) >> 8; out = (r << 16) | (g << 8) | b; } - ((uint32_t*)dst)[i] = out; + ((uint32_t *)dst)[i] = out; } dst += rb->stride; src += req->buf->stride; @@ -137,10 +133,9 @@ int uterm_drm2d_display_fake_blendv(struct uterm_display *disp, return 0; } -int uterm_drm2d_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height) +int uterm_drm2d_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, + unsigned int x, unsigned int y, unsigned int width, + unsigned int height) { unsigned int tmp, i; uint8_t *dst; @@ -168,7 +163,7 @@ int uterm_drm2d_display_fill(struct uterm_display *disp, while (height--) { for (i = 0; i < width; ++i) - ((uint32_t*)dst)[i] = (r << 16) | (g << 8) | b; + ((uint32_t *)dst)[i] = (r << 16) | (g << 8) | b; dst += rb->stride; } diff --git a/src/uterm_drm2d_video.c b/src/uterm_drm2d_video.c index 0284b008..9acfe6c0 100644 --- a/src/uterm_drm2d_video.c +++ b/src/uterm_drm2d_video.c @@ -40,8 +40,8 @@ #include "eloop.h" #include "shl_log.h" #include "shl_misc.h" -#include "uterm_drm_shared_internal.h" #include "uterm_drm2d_internal.h" +#include "uterm_drm_shared_internal.h" #include "uterm_video.h" #include "uterm_video_internal.h" @@ -97,8 +97,8 @@ static int init_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) rb->stride = req.pitch; rb->size = req.size; - ret = drmModeAddFB(vdrm->fd, req.width, req.height, - 24, 32, rb->stride, rb->handle, &rb->fb); + ret = drmModeAddFB(vdrm->fd, req.width, req.height, 24, 32, rb->stride, rb->handle, + &rb->fb); if (ret) { log_err("cannot add drm-fb"); ret = -EFAULT; @@ -115,8 +115,7 @@ static int init_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) goto err_fb; } - rb->map = mmap(0, rb->size, PROT_READ | PROT_WRITE, MAP_SHARED, - vdrm->fd, mreq.offset); + rb->map = mmap(0, rb->size, PROT_READ | PROT_WRITE, MAP_SHARED, vdrm->fd, mreq.offset); if (rb->map == MAP_FAILED) { log_err("cannot mmap dumb buffer"); ret = -EFAULT; @@ -133,8 +132,7 @@ static int init_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) dreq.handle = rb->handle; r = drmIoctl(vdrm->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &dreq); if (r) - log_warning("cannot destroy dumb buffer (%d/%d): %m", - ret, errno); + log_warning("cannot destroy dumb buffer (%d/%d): %m", ret, errno); return ret; } @@ -149,11 +147,9 @@ static void destroy_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) drmModeRmFB(vdrm->fd, rb->fb); memset(&dreq, 0, sizeof(dreq)); dreq.handle = rb->handle; - ret = drmIoctl(vdrm->fd, DRM_IOCTL_MODE_DESTROY_DUMB, - &dreq); + ret = drmIoctl(vdrm->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &dreq); if (ret) - log_warning("cannot destroy dumb buffer (%d/%d): %m", - ret, errno); + log_warning("cannot destroy dumb buffer (%d/%d): %m", ret, errno); } static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) @@ -168,9 +164,9 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) if (!mode) return -EINVAL; - minfo = uterm_drm_mode_get_info(mode);; - log_info("activating display %p to %ux%u", disp, - minfo->hdisplay, minfo->vdisplay); + minfo = uterm_drm_mode_get_info(mode); + ; + log_info("activating display %p to %ux%u", disp, minfo->hdisplay, minfo->vdisplay); ret = uterm_drm_display_activate(disp, vdrm->fd); if (ret) @@ -187,8 +183,7 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) if (ret) goto err_rb; - ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, - d2d->rb[0].fb, 0, 0, &ddrm->conn_id, 1, + ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d2d->rb[0].fb, 0, 0, &ddrm->conn_id, 1, minfo); if (ret && mode == disp->desired_mode && mode != disp->default_mode) { @@ -239,8 +234,7 @@ static int display_use(struct uterm_display *disp, bool *opengl) return d2d->current_rb ^ 1; } -static int display_get_buffers(struct uterm_display *disp, - struct uterm_video_buffer *buffer, +static int display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, unsigned int formats) { struct uterm_drm2d_display *d2d = uterm_drm_display_get_data(disp); @@ -299,7 +293,8 @@ static void show_displays(struct uterm_video *video) if (!video_is_awake(video)) return; - shl_dlist_for_each(i, &video->displays) { + shl_dlist_for_each(i, &video->displays) + { iter = shl_dlist_entry(i, struct uterm_display, list); if (!display_is_online(iter)) @@ -326,16 +321,14 @@ static int video_init(struct uterm_video *video, const char *node) uint64_t has_dumb; struct uterm_drm_video *vdrm; - ret = uterm_drm_video_init(video, node, &drm2d_display_ops, - NULL, NULL); + ret = uterm_drm_video_init(video, node, &drm2d_display_ops, NULL, NULL); if (ret) return ret; vdrm = video->data; log_debug("initialize 2D layer on %p", video); - if (drmGetCap(vdrm->fd, DRM_CAP_DUMB_BUFFER, &has_dumb) < 0 || - !has_dumb) { + if (drmGetCap(vdrm->fd, DRM_CAP_DUMB_BUFFER, &has_dumb) < 0 || !has_dumb) { log_err("driver does not support dumb buffers"); uterm_drm_video_destroy(video); return -EOPNOTSUPP; @@ -378,11 +371,13 @@ static int video_wake_up(struct uterm_video *video) struct uterm_video_module drm2d_module = { .name = "drm2d", .owner = NULL, - .ops = { - .init = video_init, - .destroy = video_destroy, - .segfault = NULL, /* TODO: reset all saved CRTCs on segfault */ - .poll = video_poll, - .sleep = video_sleep, - .wake_up = video_wake_up,}, + .ops = + { + .init = video_init, + .destroy = video_destroy, + .segfault = NULL, /* TODO: reset all saved CRTCs on segfault */ + .poll = video_poll, + .sleep = video_sleep, + .wake_up = video_wake_up, + }, }; diff --git a/src/uterm_drm3d_internal.h b/src/uterm_drm3d_internal.h index 6ddd80e5..385b2167 100644 --- a/src/uterm_drm3d_internal.h +++ b/src/uterm_drm3d_internal.h @@ -33,11 +33,11 @@ #include #include +#include +#include #include #include #include -#include -#include #include #include #include @@ -49,7 +49,7 @@ /* thanks khronos for breaking backwards compatibility.. */ #if !defined(GL_UNPACK_ROW_LENGTH) && defined(GL_UNPACK_ROW_LENGTH_EXT) -# define GL_UNPACK_ROW_LENGTH GL_UNPACK_ROW_LENGTH_EXT +#define GL_UNPACK_ROW_LENGTH GL_UNPACK_ROW_LENGTH_EXT #endif struct uterm_drm3d_rb { @@ -88,11 +88,9 @@ struct uterm_drm3d_video { int uterm_drm3d_display_use(struct uterm_display *disp, bool *opengl); void uterm_drm3d_deinit_shaders(struct uterm_video *video); int uterm_drm3d_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, - size_t num); -int uterm_drm3d_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height); + const struct uterm_video_blend_req *req, size_t num); +int uterm_drm3d_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, + unsigned int x, unsigned int y, unsigned int width, + unsigned int height); #endif /* UTERM_DRM3D_INTERNAL_H */ diff --git a/src/uterm_drm3d_render.c b/src/uterm_drm3d_render.c index bfaf1d08..631fb9f8 100644 --- a/src/uterm_drm3d_render.c +++ b/src/uterm_drm3d_render.c @@ -32,11 +32,11 @@ #include #include +#include +#include #include #include #include -#include -#include #include #include #include @@ -47,14 +47,14 @@ #include "eloop.h" #include "shl_gl.h" #include "shl_log.h" -#include "uterm_drm_shared_internal.h" +#include "uterm_drm3d_blend.frag.bin.h" +#include "uterm_drm3d_blend.vert.bin.h" +#include "uterm_drm3d_fill.frag.bin.h" +#include "uterm_drm3d_fill.vert.bin.h" #include "uterm_drm3d_internal.h" +#include "uterm_drm_shared_internal.h" #include "uterm_video.h" #include "uterm_video_internal.h" -#include "uterm_drm3d_blend.vert.bin.h" -#include "uterm_drm3d_blend.frag.bin.h" -#include "uterm_drm3d_fill.vert.bin.h" -#include "uterm_drm3d_fill.frag.bin.h" #define LOG_SUBSYSTEM "uterm_drm3d_render" @@ -62,8 +62,8 @@ static int init_shaders(struct uterm_video *video) { struct uterm_drm3d_video *v3d = uterm_drm_video_get_data(video); int ret; - char *fill_attr[] = { "position", "color" }; - char *blend_attr[] = { "position", "texture_position" }; + char *fill_attr[] = {"position", "color"}; + char *blend_attr[] = {"position", "texture_position"}; int blend_vlen, blend_flen, fill_vlen, fill_flen; const char *blend_vert, *blend_frag; const char *fill_vert, *fill_frag; @@ -84,29 +84,22 @@ static int init_shaders(struct uterm_video *video) fill_frag = _binary_uterm_drm3d_fill_frag_start; fill_flen = _binary_uterm_drm3d_fill_frag_size; - ret = gl_shader_new(&v3d->fill_shader, fill_vert, fill_vlen, - fill_frag, fill_flen, fill_attr, 2, log_llog, - NULL); + ret = gl_shader_new(&v3d->fill_shader, fill_vert, fill_vlen, fill_frag, fill_flen, + fill_attr, 2, log_llog, NULL); if (ret) return ret; - v3d->uni_fill_proj = gl_shader_get_uniform(v3d->fill_shader, - "projection"); + v3d->uni_fill_proj = gl_shader_get_uniform(v3d->fill_shader, "projection"); - ret = gl_shader_new(&v3d->blend_shader, blend_vert, blend_vlen, - blend_frag, blend_flen, blend_attr, 2, log_llog, - NULL); + ret = gl_shader_new(&v3d->blend_shader, blend_vert, blend_vlen, blend_frag, blend_flen, + blend_attr, 2, log_llog, NULL); if (ret) return ret; - v3d->uni_blend_proj = gl_shader_get_uniform(v3d->blend_shader, - "projection"); - v3d->uni_blend_tex = gl_shader_get_uniform(v3d->blend_shader, - "texture"); - v3d->uni_blend_fgcol = gl_shader_get_uniform(v3d->blend_shader, - "fgcolor"); - v3d->uni_blend_bgcol = gl_shader_get_uniform(v3d->blend_shader, - "bgcolor"); + v3d->uni_blend_proj = gl_shader_get_uniform(v3d->blend_shader, "projection"); + v3d->uni_blend_tex = gl_shader_get_uniform(v3d->blend_shader, "texture"); + v3d->uni_blend_fgcol = gl_shader_get_uniform(v3d->blend_shader, "fgcolor"); + v3d->uni_blend_bgcol = gl_shader_get_uniform(v3d->blend_shader, "bgcolor"); gl_tex_new(&v3d->tex, 1); v3d->sinit = 2; @@ -127,10 +120,8 @@ void uterm_drm3d_deinit_shaders(struct uterm_video *video) gl_shader_unref(v3d->fill_shader); } -static int display_blend(struct uterm_display *disp, - const struct uterm_video_buffer *buf, - unsigned int x, unsigned int y, - uint8_t fr, uint8_t fg, uint8_t fb, +static int display_blend(struct uterm_display *disp, const struct uterm_video_buffer *buf, + unsigned int x, unsigned int y, uint8_t fr, uint8_t fg, uint8_t fb, uint8_t br, uint8_t bg, uint8_t bb) { struct uterm_drm3d_video *v3d; @@ -222,12 +213,12 @@ static int display_blend(struct uterm_display *disp, if (v3d->supports_rowlen) { glPixelStorei(GL_UNPACK_ROW_LENGTH, buf->stride); - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, - GL_ALPHA, GL_UNSIGNED_BYTE, buf->data); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, + GL_UNSIGNED_BYTE, buf->data); glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); } else if (buf->stride == width) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, - GL_ALPHA, GL_UNSIGNED_BYTE, buf->data); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, + GL_UNSIGNED_BYTE, buf->data); } else { packed = malloc(width * height); if (!packed) @@ -241,8 +232,8 @@ static int display_blend(struct uterm_display *disp, src += buf->stride; } - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, - GL_ALPHA, GL_UNSIGNED_BYTE, packed); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, width, height, 0, GL_ALPHA, + GL_UNSIGNED_BYTE, packed); free(packed); } @@ -267,8 +258,7 @@ static int display_blend(struct uterm_display *disp, } int uterm_drm3d_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, - size_t num) + const struct uterm_video_blend_req *req, size_t num) { int ret; unsigned int i; @@ -280,8 +270,7 @@ int uterm_drm3d_display_fake_blendv(struct uterm_display *disp, if (!req->buf) continue; - ret = display_blend(disp, req->buf, req->x, req->y, - req->fr, req->fg, req->fb, + ret = display_blend(disp, req->buf, req->x, req->y, req->fr, req->fg, req->fb, req->br, req->bg, req->bb); if (ret) return ret; @@ -290,10 +279,9 @@ int uterm_drm3d_display_fake_blendv(struct uterm_display *disp, return 0; } -int uterm_drm3d_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height) +int uterm_drm3d_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, + unsigned int x, unsigned int y, unsigned int width, + unsigned int height) { struct uterm_drm3d_video *v3d; unsigned int sw, sh, tmp, i; @@ -349,7 +337,7 @@ int uterm_drm3d_display_fill(struct uterm_display *disp, * and positive y-axis up, while other parts uses a coordinate system * with the origin at _upper-left_ corner and positive y-axis down. */ - y = sh - y; // invert y-axis + y = sh - y; // invert y-axis y -= height; // move origin to lower left corner glViewport(x, y, width, height); diff --git a/src/uterm_drm3d_video.c b/src/uterm_drm3d_video.c index ec397b51..25a5a226 100644 --- a/src/uterm_drm3d_video.c +++ b/src/uterm_drm3d_video.c @@ -32,11 +32,11 @@ #include #include +#include +#include #include #include #include -#include -#include #include #include #include @@ -47,8 +47,8 @@ #include "eloop.h" #include "shl_log.h" #include "shl_misc.h" -#include "uterm_drm_shared_internal.h" #include "uterm_drm3d_internal.h" +#include "uterm_drm_shared_internal.h" #include "uterm_video.h" #include "uterm_video_internal.h" @@ -92,22 +92,21 @@ static void bo_destroy_event(struct gbm_bo *bo, void *data) free(rb); } -static struct uterm_drm3d_rb *bo_to_rb(struct uterm_display *disp, - struct gbm_bo *bo) +static struct uterm_drm3d_rb *bo_to_rb(struct uterm_display *disp, struct gbm_bo *bo) { struct uterm_drm3d_rb *rb = gbm_bo_get_user_data(bo); struct uterm_video *video = disp->video; struct uterm_drm_video *vdrm = video->data; int ret; - unsigned int stride, handle, width, height;; + unsigned int stride, handle, width, height; + ; if (rb) return rb; rb = malloc(sizeof(*rb)); if (!rb) { - log_error("cannot allocate memory for render buffer (%d): %m", - errno); + log_error("cannot allocate memory for render buffer (%d): %m", errno); return NULL; } rb->disp = disp; @@ -122,8 +121,7 @@ static struct uterm_drm3d_rb *bo_to_rb(struct uterm_display *disp, width = gbm_bo_get_width(rb->bo); height = gbm_bo_get_height(rb->bo); - ret = drmModeAddFB(vdrm->fd, width, height, 24, 32, stride, - handle, &rb->fb); + ret = drmModeAddFB(vdrm->fd, width, height, 24, 32, stride, handle, &rb->fb); if (ret) { log_err("cannot add drm-fb (%d): %m", errno); free(rb); @@ -134,8 +132,7 @@ static struct uterm_drm3d_rb *bo_to_rb(struct uterm_display *disp, return rb; } -static int display_activate(struct uterm_display *disp, - struct uterm_mode *mode) +static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) { struct uterm_video *video = disp->video; struct uterm_drm_video *vdrm; @@ -152,8 +149,7 @@ static int display_activate(struct uterm_display *disp, vdrm = video->data; v3d = uterm_drm_video_get_data(video); minfo = uterm_drm_mode_get_info(mode); - log_info("activating display %p to %ux%u", disp, - minfo->hdisplay, minfo->vdisplay); + log_info("activating display %p to %ux%u", disp, minfo->hdisplay, minfo->vdisplay); ret = uterm_drm_display_activate(disp, vdrm->fd); if (ret) @@ -163,27 +159,24 @@ static int display_activate(struct uterm_display *disp, d3d->next = NULL; disp->current_mode = mode; - d3d->gbm = gbm_surface_create(v3d->gbm, minfo->hdisplay, - minfo->vdisplay, GBM_FORMAT_XRGB8888, - GBM_BO_USE_SCANOUT | - GBM_BO_USE_RENDERING); + d3d->gbm = + gbm_surface_create(v3d->gbm, minfo->hdisplay, minfo->vdisplay, GBM_FORMAT_XRGB8888, + GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING); if (!d3d->gbm) { log_error("cannot create gbm surface (%d): %m", errno); ret = -EFAULT; goto err_saved; } - d3d->surface = eglCreateWindowSurface(v3d->disp, v3d->conf, - (EGLNativeWindowType)d3d->gbm, - NULL); + d3d->surface = + eglCreateWindowSurface(v3d->disp, v3d->conf, (EGLNativeWindowType)d3d->gbm, NULL); if (d3d->surface == EGL_NO_SURFACE) { log_error("cannot create EGL window surface"); ret = -EFAULT; goto err_gbm; } - if (!eglMakeCurrent(v3d->disp, d3d->surface, d3d->surface, - v3d->ctx)) { + if (!eglMakeCurrent(v3d->disp, d3d->surface, d3d->surface, v3d->ctx)) { log_error("cannot activate EGL context"); ret = -EFAULT; goto err_surface; @@ -211,8 +204,8 @@ static int display_activate(struct uterm_display *disp, goto err_bo; } - ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d3d->current->fb, - 0, 0, &ddrm->conn_id, 1, minfo); + ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d3d->current->fb, 0, 0, &ddrm->conn_id, 1, + minfo); if (ret && mode == disp->desired_mode && mode != disp->default_mode) { mode = disp->desired_mode = disp->default_mode; ret = -EAGAIN; @@ -229,8 +222,7 @@ static int display_activate(struct uterm_display *disp, err_bo: gbm_surface_release_buffer(d3d->gbm, bo); err_noctx: - eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, - v3d->ctx); + eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, v3d->ctx); err_surface: eglDestroySurface(v3d->disp, d3d->surface); err_gbm: @@ -254,18 +246,15 @@ static void display_deactivate(struct uterm_display *disp) v3d = uterm_drm_video_get_data(video); uterm_drm_display_deactivate(disp, vdrm->fd); - eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, - v3d->ctx); + eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, v3d->ctx); eglDestroySurface(v3d->disp, d3d->surface); if (d3d->current) { - gbm_surface_release_buffer(d3d->gbm, - d3d->current->bo); + gbm_surface_release_buffer(d3d->gbm, d3d->current->bo); d3d->current = NULL; } if (d3d->next) { - gbm_surface_release_buffer(d3d->gbm, - d3d->next->bo); + gbm_surface_release_buffer(d3d->gbm, d3d->next->bo); d3d->next = NULL; } @@ -279,8 +268,7 @@ int uterm_drm3d_display_use(struct uterm_display *disp, bool *opengl) struct uterm_drm3d_video *v3d; v3d = uterm_drm_video_get_data(disp->video); - if (!eglMakeCurrent(v3d->disp, d3d->surface, - d3d->surface, v3d->ctx)) { + if (!eglMakeCurrent(v3d->disp, d3d->surface, d3d->surface, v3d->ctx)) { log_error("cannot activate EGL context"); return -EFAULT; } @@ -366,7 +354,8 @@ static void show_displays(struct uterm_video *video) if (!video_is_awake(video)) return; - shl_dlist_for_each(i, &video->displays) { + shl_dlist_for_each(i, &video->displays) + { iter = shl_dlist_entry(i, struct uterm_display, list); if (!display_is_online(iter)) @@ -390,8 +379,7 @@ static void page_flip_handler(struct uterm_display *disp) if (d3d->next) { if (d3d->current) - gbm_surface_release_buffer(d3d->gbm, - d3d->current->bo); + gbm_surface_release_buffer(d3d->gbm, d3d->current->bo); d3d->current = d3d->next; d3d->next = NULL; } @@ -400,18 +388,21 @@ static void page_flip_handler(struct uterm_display *disp) static int video_init(struct uterm_video *video, const char *node) { static const EGLint conf_att[] = { - EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, - EGL_RED_SIZE, 1, - EGL_GREEN_SIZE, 1, - EGL_BLUE_SIZE, 1, - EGL_ALPHA_SIZE, 0, + EGL_SURFACE_TYPE, + EGL_WINDOW_BIT, + EGL_RENDERABLE_TYPE, + EGL_OPENGL_ES2_BIT, + EGL_RED_SIZE, + 1, + EGL_GREEN_SIZE, + 1, + EGL_BLUE_SIZE, + 1, + EGL_ALPHA_SIZE, + 0, EGL_NONE, }; - static const EGLint ctx_att[] = { - EGL_CONTEXT_CLIENT_VERSION, 2, - EGL_NONE - }; + static const EGLint ctx_att[] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE}; const char *ext; int ret; EGLint major, minor, n = 0; @@ -429,8 +420,7 @@ static int video_init(struct uterm_video *video, const char *node) return -ENOMEM; memset(v3d, 0, sizeof(*v3d)); - ret = uterm_drm_video_init(video, node, &drm_display_ops, - page_flip_handler, v3d); + ret = uterm_drm_video_init(video, node, &drm_display_ops, page_flip_handler, v3d); if (ret) goto err_free; vdrm = video->data; @@ -439,13 +429,12 @@ static int video_init(struct uterm_video *video, const char *node) v3d->gbm = gbm_create_device(vdrm->fd); if (!v3d->gbm) { - log_err("cannot create gbm device for %s (permission denied)", - node); + log_err("cannot create gbm device for %s (permission denied)", node); ret = -EFAULT; goto err_video; } - v3d->disp = eglGetDisplay((EGLNativeDisplayType) v3d->gbm); + v3d->disp = eglGetDisplay((EGLNativeDisplayType)v3d->gbm); if (v3d->disp == EGL_NO_DISPLAY) { log_err("cannot retrieve egl display for %s", node); ret = -EFAULT; @@ -511,7 +500,8 @@ static int video_init(struct uterm_video *video, const char *node) if (gbmFmt == GBM_FORMAT_XRGB8888 || gbmFmt == GBM_FORMAT_ARGB8888) { if (!eglGetConfigAttrib(v3d->disp, cfgs[i], EGL_CONFIG_ID, &cfgId)) { err = eglGetError(); - log_warning("cfgs[%d] matched, but failed to get ID (error %x).", i, err); + log_warning("cfgs[%d] matched, but failed to get ID (error %x).", i, + err); } else { log_debug("config with ID %x matched", cfgId); } @@ -527,26 +517,25 @@ static int video_init(struct uterm_video *video, const char *node) goto err_cfgs; } - v3d->ctx = eglCreateContext(v3d->disp, v3d->conf, EGL_NO_CONTEXT, - ctx_att); + v3d->ctx = eglCreateContext(v3d->disp, v3d->conf, EGL_NO_CONTEXT, ctx_att); if (v3d->ctx == EGL_NO_CONTEXT) { log_error("cannot create egl context"); ret = -EFAULT; goto err_cfgs; } - if (!eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, - v3d->ctx)) { + if (!eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, v3d->ctx)) { log_error("cannot activate surfaceless EGL context"); ret = -EFAULT; goto err_ctx; } - ext = (const char*)glGetString(GL_EXTENSIONS); - if (ext && strstr((const char*)ext, "GL_EXT_unpack_subimage")) + ext = (const char *)glGetString(GL_EXTENSIONS); + if (ext && strstr((const char *)ext, "GL_EXT_unpack_subimage")) v3d->supports_rowlen = true; else - log_warning("your GL implementation does not support GL_EXT_unpack_subimage, rendering may be slower than usual"); + log_warning("your GL implementation does not support GL_EXT_unpack_subimage, " + "rendering may be slower than usual"); return 0; @@ -571,13 +560,11 @@ static void video_destroy(struct uterm_video *video) log_info("free drm video device %p", video); - if (!eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, - v3d->ctx)) + if (!eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, v3d->ctx)) log_error("cannot activate GL context during destruction"); uterm_drm3d_deinit_shaders(video); - eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, - EGL_NO_CONTEXT); + eglMakeCurrent(v3d->disp, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); eglDestroyContext(v3d->disp, v3d->ctx); eglTerminate(v3d->disp); gbm_device_destroy(v3d->gbm); @@ -614,13 +601,13 @@ SHL_EXPORT struct uterm_video_module drm3d_module = { .name = "drm3d", .owner = NULL, - .ops = { - .init = video_init, - .destroy = video_destroy, - .segfault = NULL, /* TODO: reset all saved CRTCs on segfault */ - .poll = video_poll, - .sleep = video_sleep, - .wake_up = video_wake_up, - }, + .ops = + { + .init = video_init, + .destroy = video_destroy, + .segfault = NULL, /* TODO: reset all saved CRTCs on segfault */ + .poll = video_poll, + .sleep = video_sleep, + .wake_up = video_wake_up, + }, }; - diff --git a/src/uterm_drm_shared.c b/src/uterm_drm_shared.c index 36c00f0b..43a49b7b 100644 --- a/src/uterm_drm_shared.c +++ b/src/uterm_drm_shared.c @@ -136,8 +136,7 @@ int uterm_drm_set_dpms(int fd, uint32_t conn_id, int state) } if (!strcmp(prop->name, "DPMS")) { - ret = drmModeConnectorSetProperty(fd, conn_id, - prop->prop_id, set); + ret = drmModeConnectorSetProperty(fd, conn_id, prop->prop_id, set); if (ret) { log_info("cannot set DPMS"); ret = -EFAULT; @@ -271,11 +270,8 @@ void uterm_drm_display_deactivate(struct uterm_display *disp, int fd) if (ddrm->saved_crtc) { if (disp->video->flags & VIDEO_AWAKE) { - drmModeSetCrtc(fd, ddrm->saved_crtc->crtc_id, - ddrm->saved_crtc->buffer_id, - ddrm->saved_crtc->x, - ddrm->saved_crtc->y, - &ddrm->conn_id, 1, + drmModeSetCrtc(fd, ddrm->saved_crtc->crtc_id, ddrm->saved_crtc->buffer_id, + ddrm->saved_crtc->x, ddrm->saved_crtc->y, &ddrm->conn_id, 1, &ddrm->saved_crtc->mode); } drmModeFreeCrtc(ddrm->saved_crtc); @@ -292,8 +288,7 @@ int uterm_drm_display_set_dpms(struct uterm_display *disp, int state) struct uterm_drm_display *ddrm = disp->data; struct uterm_drm_video *vdrm = disp->video->data; - log_info("setting DPMS of display %p to %s", disp, - uterm_dpms_to_name(state)); + log_info("setting DPMS of display %p to %s", disp, uterm_dpms_to_name(state)); ret = uterm_drm_set_dpms(vdrm->fd, ddrm->conn_id, state); if (ret < 0) @@ -323,16 +318,14 @@ int uterm_drm_display_wait_pflip(struct uterm_display *disp) if (ret < 0) return ret; if (ret == 0 || !timeout) { - log_warning("timeout waiting for page-flip on display %p", - disp); + log_warning("timeout waiting for page-flip on display %p", disp); return -ETIMEDOUT; } return 0; } -int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, - bool immediate) +int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, bool immediate) { struct uterm_drm_display *ddrm = disp->data; struct uterm_video *video = disp->video; @@ -349,8 +342,7 @@ int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, return ret; mode = uterm_drm_mode_get_info(disp->current_mode); - ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, fb, 0, 0, - &ddrm->conn_id, 1, mode); + ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, fb, 0, 0, &ddrm->conn_id, 1, mode); if (ret) { log_error("cannot set DRM-CRTC (%d): %m", errno); return -EFAULT; @@ -359,16 +351,15 @@ int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, if ((disp->flags & DISPLAY_VSYNC)) return -EBUSY; - ret = drmModePageFlip(vdrm->fd, ddrm->crtc_id, fb, - DRM_MODE_PAGE_FLIP_EVENT, disp); + ret = drmModePageFlip(vdrm->fd, ddrm->crtc_id, fb, DRM_MODE_PAGE_FLIP_EVENT, disp); if (ret) { if (disp->desired_mode != disp->default_mode) { disp->desired_mode = disp->default_mode; - log_debug("Unable to page-flip desired mode! Switching to default mode."); + log_debug("Unable to page-flip desired mode! Switching to default " + "mode."); return -EAGAIN; } - log_error("cannot page-flip on DRM-CRTC (%d): %m", - errno); + log_error("cannot page-flip on DRM-CRTC (%d): %m", errno); return -EFAULT; } @@ -390,8 +381,8 @@ static void uterm_drm_display_pflip(struct uterm_display *disp) DISPLAY_CB(disp, UTERM_PAGE_FLIP); } -static void display_event(int fd, unsigned int frame, unsigned int sec, - unsigned int usec, void *data) +static void display_event(int fd, unsigned int frame, unsigned int sec, unsigned int usec, + void *data) { struct uterm_display *disp = data; @@ -429,7 +420,8 @@ static void do_pflips(struct ev_eloop *eloop, void *unused, void *data) struct uterm_display *disp; struct shl_dlist *iter; - shl_dlist_for_each(iter, &video->displays) { + shl_dlist_for_each(iter, &video->displays) + { disp = shl_dlist_entry(iter, struct uterm_display, list); if ((disp->flags & DISPLAY_PFLIP)) uterm_drm_display_pflip(disp); @@ -459,7 +451,8 @@ static void io_event(struct ev_fd *fd, int mask, void *data) if (ret) return; - shl_dlist_for_each(iter, &video->displays) { + shl_dlist_for_each(iter, &video->displays) + { disp = shl_dlist_entry(iter, struct uterm_display, list); if ((disp->flags & DISPLAY_PFLIP)) uterm_drm_display_pflip(disp); @@ -477,7 +470,8 @@ static void vt_timeout(struct ev_timer *timer, uint64_t exp, void *data) r = uterm_drm_video_wake_up(video); if (!r) { ev_timer_update(vdrm->vt_timer, NULL); - shl_dlist_for_each(iter, &video->displays) { + shl_dlist_for_each(iter, &video->displays) + { disp = shl_dlist_entry(iter, struct uterm_display, list); VIDEO_CB(video, disp, UTERM_REFRESH); } @@ -497,8 +491,8 @@ void uterm_drm_video_arm_vt_timer(struct uterm_video *video) } int uterm_drm_video_init(struct uterm_video *video, const char *node, - const struct display_ops *display_ops, - uterm_drm_page_flip_t pflip, void *data) + const struct display_ops *display_ops, uterm_drm_page_flip_t pflip, + void *data) { struct uterm_drm_video *vdrm; int ret; @@ -523,8 +517,7 @@ int uterm_drm_video_init(struct uterm_video *video, const char *node, /* TODO: fix the race-condition with DRM-Master-on-open */ drmDropMaster(vdrm->fd); - ret = ev_eloop_new_fd(video->eloop, &vdrm->efd, vdrm->fd, EV_READABLE, - io_event, video); + ret = ev_eloop_new_fd(video->eloop, &vdrm->efd, vdrm->fd, EV_READABLE, io_event, video); if (ret) goto err_close; @@ -532,8 +525,7 @@ int uterm_drm_video_init(struct uterm_video *video, const char *node, if (ret) goto err_fd; - ret = ev_eloop_new_timer(video->eloop, &vdrm->vt_timer, NULL, - vt_timeout, video); + ret = ev_eloop_new_timer(video->eloop, &vdrm->vt_timer, NULL, vt_timeout, video); if (ret) goto err_timer; @@ -563,8 +555,7 @@ void uterm_drm_video_destroy(struct uterm_video *video) free(video->data); } -int uterm_drm_video_find_crtc(struct uterm_video *video, drmModeRes *res, - drmModeEncoder *enc) +int uterm_drm_video_find_crtc(struct uterm_video *video, drmModeRes *res, drmModeEncoder *enc) { int i, crtc; struct uterm_display *iter; @@ -574,10 +565,9 @@ int uterm_drm_video_find_crtc(struct uterm_video *video, drmModeRes *res, for (i = 0; i < res->count_crtcs; ++i) { if (enc->possible_crtcs & (1 << i)) { crtc = res->crtcs[i]; - shl_dlist_for_each(it, &video->displays) { - iter = shl_dlist_entry(it, - struct uterm_display, - list); + shl_dlist_for_each(it, &video->displays) + { + iter = shl_dlist_entry(it, struct uterm_display, list); ddrm = iter->data; if (ddrm->crtc_id == crtc) break; @@ -601,8 +591,7 @@ static drmModeCrtc *get_current_crtc(int fd, uint32_t encoder_id) return NULL; } -static void bind_display(struct uterm_video *video, drmModeRes *res, - drmModeConnector *conn) +static void bind_display(struct uterm_video *video, drmModeRes *res, drmModeConnector *conn) { struct uterm_drm_video *vdrm = video->data; struct uterm_display *disp; @@ -636,11 +625,11 @@ static void bind_display(struct uterm_video *video, drmModeRes *res, disp->default_mode = mode; /* Save the original KMS mode for later use */ - if (current_crtc && memcmp(&conn->modes[i], ¤t_crtc->mode, sizeof(conn->modes[i])) == 0) - disp->original_mode = mode; + if (current_crtc && + memcmp(&conn->modes[i], ¤t_crtc->mode, sizeof(conn->modes[i])) == 0) + disp->original_mode = mode; - if (video->desired_width != 0 && - video->desired_height != 0 && + if (video->desired_width != 0 && video->desired_height != 0 && mode->ops->get_width(mode) == video->desired_width && mode->ops->get_height(mode) == video->desired_height) disp->desired_mode = mode; @@ -654,12 +643,10 @@ static void bind_display(struct uterm_video *video, drmModeRes *res, disp->desired_mode = disp->default_mode; } - log_debug("Default mode %dx%d", - disp->default_mode->ops->get_width(disp->default_mode), + log_debug("Default mode %dx%d", disp->default_mode->ops->get_width(disp->default_mode), disp->default_mode->ops->get_height(disp->default_mode)); - log_debug("Desired mode %dx%d", - disp->desired_mode->ops->get_width(disp->desired_mode), + log_debug("Desired mode %dx%d", disp->desired_mode->ops->get_width(disp->desired_mode), disp->desired_mode->ops->get_height(disp->desired_mode)); if (shl_dlist_empty(&disp->modes)) { @@ -672,8 +659,7 @@ static void bind_display(struct uterm_video *video, drmModeRes *res, disp->flags |= DISPLAY_AVAILABLE; disp->dpms = uterm_drm_get_dpms(vdrm->fd, conn); - log_info("display %p DPMS is %s", disp, - uterm_dpms_to_name(disp->dpms)); + log_info("display %p DPMS is %s", disp, uterm_dpms_to_name(disp->dpms)); ret = uterm_display_bind(disp, video); if (ret) @@ -687,8 +673,7 @@ static void bind_display(struct uterm_video *video, drmModeRes *res, return; } -int uterm_drm_video_hotplug(struct uterm_video *video, - bool read_dpms, bool modeset) +int uterm_drm_video_hotplug(struct uterm_video *video, bool read_dpms, bool modeset) { struct uterm_drm_video *vdrm = video->data; drmModeRes *res; @@ -709,7 +694,8 @@ int uterm_drm_video_hotplug(struct uterm_video *video, return -EACCES; } - shl_dlist_for_each(iter, &video->displays) { + shl_dlist_for_each(iter, &video->displays) + { disp = shl_dlist_entry(iter, struct uterm_display, list); disp->flags &= ~DISPLAY_AVAILABLE; } @@ -723,9 +709,9 @@ int uterm_drm_video_hotplug(struct uterm_video *video, continue; } - shl_dlist_for_each(iter, &video->displays) { - disp = shl_dlist_entry(iter, struct uterm_display, - list); + shl_dlist_for_each(iter, &video->displays) + { + disp = shl_dlist_entry(iter, struct uterm_display, list); ddrm = disp->data; if (ddrm->conn_id != res->connectors[i]) @@ -733,7 +719,8 @@ int uterm_drm_video_hotplug(struct uterm_video *video, disp->flags |= DISPLAY_AVAILABLE; - // Clean up kms hardware cursor from display sessions that don't properly clean themselves up` + // Clean up kms hardware cursor from display sessions that don't properly + // clean themselves up` if (drmModeSetCursor(vdrm->fd, ddrm->crtc_id, 0, 0, 0)) log_warn("cannot hide hardware cursor"); @@ -743,8 +730,7 @@ int uterm_drm_video_hotplug(struct uterm_video *video, if (read_dpms) { dpms = uterm_drm_get_dpms(vdrm->fd, conn); if (dpms != disp->dpms) { - log_debug("DPMS state for display %p changed", - disp); + log_debug("DPMS state for display %p changed", disp); uterm_drm_display_set_dpms(disp, disp->dpms); } } @@ -766,7 +752,8 @@ int uterm_drm_video_hotplug(struct uterm_video *video, drmModeFreeResources(res); - shl_dlist_for_each_safe(iter, tmp, &video->displays) { + shl_dlist_for_each_safe(iter, tmp, &video->displays) + { disp = shl_dlist_entry(iter, struct uterm_display, list); if (!(disp->flags & DISPLAY_AVAILABLE)) uterm_display_unbind(disp); @@ -815,8 +802,7 @@ int uterm_drm_video_poll(struct uterm_video *video) /* Waits for events on DRM fd for \mtimeout milliseconds and returns 0 if the * timeout expired, -ERR on errors and 1 if a page-flip event has been read. * \mtimeout is adjusted to the remaining time. */ -int uterm_drm_video_wait_pflip(struct uterm_video *video, - unsigned int *mtimeout) +int uterm_drm_video_wait_pflip(struct uterm_video *video, unsigned int *mtimeout) { struct uterm_drm_video *vdrm = video->data; struct pollfd pfd; @@ -846,8 +832,8 @@ int uterm_drm_video_wait_pflip(struct uterm_video *video, if (ret) return ret; - ret = ev_eloop_register_idle_cb(video->eloop, do_pflips, - video, EV_ONESHOT | EV_SINGLE); + ret = ev_eloop_register_idle_cb(video->eloop, do_pflips, video, + EV_ONESHOT | EV_SINGLE); if (ret) return ret; diff --git a/src/uterm_drm_shared_internal.h b/src/uterm_drm_shared_internal.h index 56a56ffb..88d5d4a0 100644 --- a/src/uterm_drm_shared_internal.h +++ b/src/uterm_drm_shared_internal.h @@ -78,8 +78,7 @@ int uterm_drm_display_activate(struct uterm_display *disp, int fd); void uterm_drm_display_deactivate(struct uterm_display *disp, int fd); int uterm_drm_display_set_dpms(struct uterm_display *disp, int state); int uterm_drm_display_wait_pflip(struct uterm_display *disp); -int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, - bool immediate); +int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, bool immediate); static inline void *uterm_drm_display_get_data(struct uterm_display *disp) { @@ -90,7 +89,7 @@ static inline void *uterm_drm_display_get_data(struct uterm_display *disp) /* drm video */ -typedef void (*uterm_drm_page_flip_t) (struct uterm_display *disp); +typedef void (*uterm_drm_page_flip_t)(struct uterm_display *disp); struct uterm_drm_video { int fd; @@ -103,18 +102,15 @@ struct uterm_drm_video { }; int uterm_drm_video_init(struct uterm_video *video, const char *node, - const struct display_ops *display_ops, - uterm_drm_page_flip_t pflip, void *data); + const struct display_ops *display_ops, uterm_drm_page_flip_t pflip, + void *data); void uterm_drm_video_destroy(struct uterm_video *video); -int uterm_drm_video_find_crtc(struct uterm_video *video, drmModeRes *res, - drmModeEncoder *enc); -int uterm_drm_video_hotplug(struct uterm_video *video, bool read_dpms, - bool modeset); +int uterm_drm_video_find_crtc(struct uterm_video *video, drmModeRes *res, drmModeEncoder *enc); +int uterm_drm_video_hotplug(struct uterm_video *video, bool read_dpms, bool modeset); int uterm_drm_video_wake_up(struct uterm_video *video); void uterm_drm_video_sleep(struct uterm_video *video); int uterm_drm_video_poll(struct uterm_video *video); -int uterm_drm_video_wait_pflip(struct uterm_video *video, - unsigned int *mtimeout); +int uterm_drm_video_wait_pflip(struct uterm_video *video, unsigned int *mtimeout); void uterm_drm_video_arm_vt_timer(struct uterm_video *video); static inline void *uterm_drm_video_get_data(struct uterm_video *video) diff --git a/src/uterm_fbdev_internal.h b/src/uterm_fbdev_internal.h index 6b79e546..740abf2f 100644 --- a/src/uterm_fbdev_internal.h +++ b/src/uterm_fbdev_internal.h @@ -75,11 +75,9 @@ struct fbdev_video { }; int uterm_fbdev_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, - size_t num); -int uterm_fbdev_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height); + const struct uterm_video_blend_req *req, size_t num); +int uterm_fbdev_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, + unsigned int x, unsigned int y, unsigned int width, + unsigned int height); #endif /* UTERM_FBDEV_INTERNAL_H */ diff --git a/src/uterm_fbdev_render.c b/src/uterm_fbdev_render.c index 8bb02136..f98f9411 100644 --- a/src/uterm_fbdev_render.c +++ b/src/uterm_fbdev_render.c @@ -48,8 +48,7 @@ static int clamp_value(int val, int low, int up) return val; } -static uint_fast32_t xrgb32_to_device(struct uterm_display *disp, - uint32_t pixel) +static uint_fast32_t xrgb32_to_device(struct uterm_display *disp, uint32_t pixel) { uint8_t r, g, b, nr, ng, nb; int i; @@ -57,8 +56,8 @@ static uint_fast32_t xrgb32_to_device(struct uterm_display *disp, struct fbdev_display *fbdev = disp->data; r = (pixel >> 16) & 0xff; - g = (pixel >> 8) & 0xff; - b = (pixel >> 0) & 0xff; + g = (pixel >> 8) & 0xff; + b = (pixel >> 0) & 0xff; if (disp->flags & DISPLAY_DITHERING) { /* This is some very basic dithering which simply does small @@ -88,11 +87,11 @@ static uint_fast32_t xrgb32_to_device(struct uterm_display *disp, fbdev->dither_g = ng - fbdev->dither_g; fbdev->dither_b = nb - fbdev->dither_b; - res = r << fbdev->off_r; + res = r << fbdev->off_r; res |= g << fbdev->off_g; res |= b << fbdev->off_b; } else { - res = (r >> (8 - fbdev->len_r)) << fbdev->off_r; + res = (r >> (8 - fbdev->len_r)) << fbdev->off_r; res |= (g >> (8 - fbdev->len_g)) << fbdev->off_g; res |= (b >> (8 - fbdev->len_b)) << fbdev->off_b; } @@ -102,22 +101,21 @@ static uint_fast32_t xrgb32_to_device(struct uterm_display *disp, static void write_24bit(uint8_t *dst, uint_fast32_t value) { - #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ - dst[0] = value; - dst[1] = value >> 8; - dst[2] = value >> 16; - #elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ - dst[0] = value >> 16; - dst[1] = value >> 8; - dst[2] = value; - #else - #error "Unknown endianness" - #endif +#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ + dst[0] = value; + dst[1] = value >> 8; + dst[2] = value >> 16; +#elif __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ + dst[0] = value >> 16; + dst[1] = value >> 8; + dst[2] = value; +#else +#error "Unknown endianness" +#endif } int uterm_fbdev_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, - size_t num) + const struct uterm_video_blend_req *req, size_t num) { unsigned int tmp; uint8_t *dst, *src; @@ -175,18 +173,15 @@ int uterm_fbdev_display_fake_blendv(struct uterm_display *disp, g = req->fg; b = req->fb; } else { - r = req->fr * src[i] + - req->br * (255 - src[i]); + r = req->fr * src[i] + req->br * (255 - src[i]); r /= 256; - g = req->fg * src[i] + - req->bg * (255 - src[i]); + g = req->fg * src[i] + req->bg * (255 - src[i]); g /= 256; - b = req->fb * src[i] + - req->bb * (255 - src[i]); + b = req->fb * src[i] + req->bb * (255 - src[i]); b /= 256; } val = (r << 16) | (g << 8) | b; - ((uint32_t*)dst)[i] = val; + ((uint32_t *)dst)[i] = val; } dst += fbdev->stride; src += req->buf->stride; @@ -203,19 +198,15 @@ int uterm_fbdev_display_fake_blendv(struct uterm_display *disp, g = req->fg; b = req->fb; } else { - r = req->fr * src[i] + - req->br * (255 - src[i]); + r = req->fr * src[i] + req->br * (255 - src[i]); r /= 256; - g = req->fg * src[i] + - req->bg * (255 - src[i]); + g = req->fg * src[i] + req->bg * (255 - src[i]); g /= 256; - b = req->fb * src[i] + - req->bb * (255 - src[i]); + b = req->fb * src[i] + req->bb * (255 - src[i]); b /= 256; } val = (r << 16) | (g << 8) | b; - ((uint16_t*)dst)[i] = - xrgb32_to_device(disp, val); + ((uint16_t *)dst)[i] = xrgb32_to_device(disp, val); } dst += fbdev->stride; src += req->buf->stride; @@ -232,14 +223,11 @@ int uterm_fbdev_display_fake_blendv(struct uterm_display *disp, g = req->fg; b = req->fb; } else { - r = req->fr * src[i] + - req->br * (255 - src[i]); + r = req->fr * src[i] + req->br * (255 - src[i]); r /= 256; - g = req->fg * src[i] + - req->bg * (255 - src[i]); + g = req->fg * src[i] + req->bg * (255 - src[i]); g /= 256; - b = req->fb * src[i] + - req->bb * (255 - src[i]); + b = req->fb * src[i] + req->bb * (255 - src[i]); b /= 256; } val = (r << 16) | (g << 8) | b; @@ -261,19 +249,15 @@ int uterm_fbdev_display_fake_blendv(struct uterm_display *disp, g = req->fg; b = req->fb; } else { - r = req->fr * src[i] + - req->br * (255 - src[i]); + r = req->fr * src[i] + req->br * (255 - src[i]); r /= 256; - g = req->fg * src[i] + - req->bg * (255 - src[i]); + g = req->fg * src[i] + req->bg * (255 - src[i]); g /= 256; - b = req->fb * src[i] + - req->bb * (255 - src[i]); + b = req->fb * src[i] + req->bb * (255 - src[i]); b /= 256; } val = (r << 16) | (g << 8) | b; - ((uint32_t*)dst)[i] = - xrgb32_to_device(disp, val); + ((uint32_t *)dst)[i] = xrgb32_to_device(disp, val); } dst += fbdev->stride; src += req->buf->stride; @@ -286,10 +270,9 @@ int uterm_fbdev_display_fake_blendv(struct uterm_display *disp, return 0; } -int uterm_fbdev_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height) +int uterm_fbdev_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, + unsigned int x, unsigned int y, unsigned int width, + unsigned int height) { unsigned int tmp, i; uint8_t *dst; @@ -313,25 +296,25 @@ int uterm_fbdev_display_fill(struct uterm_display *disp, dst = &fbdev->map[fbdev->yres * fbdev->stride]; dst = &dst[y * fbdev->stride + x * fbdev->Bpp]; - full_val = ((r & 0xff) >> (8 - fbdev->len_r)) << fbdev->off_r; + full_val = ((r & 0xff) >> (8 - fbdev->len_r)) << fbdev->off_r; full_val |= ((g & 0xff) >> (8 - fbdev->len_g)) << fbdev->off_g; full_val |= ((b & 0xff) >> (8 - fbdev->len_b)) << fbdev->off_b; if (fbdev->Bpp == 2) { if (disp->flags & DISPLAY_DITHERING) { - rgb32 = (r & 0xff) << 16; - rgb32 |= (g & 0xff) << 8; - rgb32 |= (b & 0xff) << 0; + rgb32 = (r & 0xff) << 16; + rgb32 |= (g & 0xff) << 8; + rgb32 |= (b & 0xff) << 0; while (height--) { for (i = 0; i < width; ++i) - ((uint16_t*)dst)[i] = xrgb32_to_device(disp, rgb32); + ((uint16_t *)dst)[i] = xrgb32_to_device(disp, rgb32); dst += fbdev->stride; } } else { full_val &= 0xffff; while (height--) { for (i = 0; i < width; ++i) - ((uint16_t*)dst)[i] = full_val; + ((uint16_t *)dst)[i] = full_val; dst += fbdev->stride; } } @@ -345,7 +328,7 @@ int uterm_fbdev_display_fill(struct uterm_display *disp, } else if (fbdev->Bpp == 4) { while (height--) { for (i = 0; i < width; ++i) - ((uint32_t*)dst)[i] = full_val; + ((uint32_t *)dst)[i] = full_val; dst += fbdev->stride; } } else { diff --git a/src/uterm_fbdev_video.c b/src/uterm_fbdev_video.c index de2c6b63..3b9a9d51 100644 --- a/src/uterm_fbdev_video.c +++ b/src/uterm_fbdev_video.c @@ -128,11 +128,9 @@ static int refresh_info(struct uterm_display *disp) return 0; } -static int display_activate_force(struct uterm_display *disp, - struct uterm_mode *mode, - bool force) +static int display_activate_force(struct uterm_display *disp, struct uterm_mode *mode, bool force) { - static const char depths[] = { 32, 24, 16, 0 }; + static const char depths[] = {32, 24, 16, 0}; struct fbdev_display *dfb = disp->data; struct uterm_mode *m; struct fbdev_mode *mfb; @@ -212,21 +210,19 @@ static int display_activate_force(struct uterm_display *disp, * modes like pseudocolor or direct-color do not provide this. As I have * never seen a device that does not support TRUECOLOR, I think we can * ignore them here. */ - if (finfo->visual != FB_VISUAL_TRUECOLOR || - vinfo->bits_per_pixel != 32) { + if (finfo->visual != FB_VISUAL_TRUECOLOR || vinfo->bits_per_pixel != 32) { for (i = 0; depths[i]; ++i) { /* Try to set a new mode and if it's successful... */ struct fb_var_screeninfo vinfo_new = *vinfo; vinfo_new.bits_per_pixel = depths[i]; vinfo_new.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE; - ret = ioctl(dfb->fd, FBIOPUT_VSCREENINFO, - &vinfo_new); + ret = ioctl(dfb->fd, FBIOPUT_VSCREENINFO, &vinfo_new); if (ret < 0) continue; /* ... keep it. */ - *vinfo = vinfo_new; + *vinfo = vinfo_new; ret = refresh_info(disp); if (ret) @@ -237,42 +233,35 @@ static int display_activate_force(struct uterm_display *disp, } } - if (vinfo->bits_per_pixel != 32 && - vinfo->bits_per_pixel != 24 && + if (vinfo->bits_per_pixel != 32 && vinfo->bits_per_pixel != 24 && vinfo->bits_per_pixel != 16) { - log_error("device %s does not support 16/32 bpp but: %u", - dfb->node, vinfo->bits_per_pixel); + log_error("device %s does not support 16/32 bpp but: %u", dfb->node, + vinfo->bits_per_pixel); ret = -EFAULT; goto err_close; } if (vinfo->xres_virtual < vinfo->xres || - (disp->flags & DISPLAY_DBUF && - vinfo->yres_virtual < vinfo->yres * 2) || + (disp->flags & DISPLAY_DBUF && vinfo->yres_virtual < vinfo->yres * 2) || vinfo->yres_virtual < vinfo->yres) { - log_warning("device %s has weird virtual buffer sizes (%d %d %d %d)", - dfb->node, vinfo->xres, vinfo->xres_virtual, - vinfo->yres, vinfo->yres_virtual); + log_warning("device %s has weird virtual buffer sizes (%d %d %d %d)", dfb->node, + vinfo->xres, vinfo->xres_virtual, vinfo->yres, vinfo->yres_virtual); } if (finfo->visual != FB_VISUAL_TRUECOLOR) { - log_error("device %s does not support true-color", - dfb->node); + log_error("device %s does not support true-color", dfb->node); ret = -EFAULT; goto err_close; } - if (vinfo->red.length > 8 || - vinfo->green.length > 8 || - vinfo->blue.length > 8) { - log_error("device %s uses unusual color-ranges", - dfb->node); + if (vinfo->red.length > 8 || vinfo->green.length > 8 || vinfo->blue.length > 8) { + log_error("device %s uses unusual color-ranges", dfb->node); ret = -EFAULT; goto err_close; } - log_info("activating display %s to %ux%u %u bpp", dfb->node, - vinfo->xres, vinfo->yres, vinfo->bits_per_pixel); + log_info("activating display %s to %ux%u %u bpp", dfb->node, vinfo->xres, vinfo->yres, + vinfo->bits_per_pixel); /* calculate monitor rate, default is 60 Hz */ quot = (vinfo->upper_margin + vinfo->lower_margin + vinfo->yres); @@ -296,8 +285,7 @@ static int display_activate_force(struct uterm_display *disp, val = 1000000 / dfb->rate; display_set_vblank_timer(disp, val); - log_debug("vblank timer: %u ms, monitor refresh rate: %u Hz", val, - dfb->rate / 1000); + log_debug("vblank timer: %u ms, monitor refresh rate: %u Hz", val, dfb->rate / 1000); len = finfo->line_length * vinfo->yres; if (disp->flags & DISPLAY_DBUF) @@ -305,8 +293,7 @@ static int display_activate_force(struct uterm_display *disp, dfb->map = mmap(0, len, PROT_READ | PROT_WRITE, MAP_SHARED, dfb->fd, 0); if (dfb->map == MAP_FAILED) { - log_error("cannot mmap device %s (%d): %m", dfb->node, - errno); + log_error("cannot mmap device %s (%d): %m", dfb->node, errno); ret = -EFAULT; goto err_close; } @@ -329,17 +316,14 @@ static int display_activate_force(struct uterm_display *disp, dfb->dither_b = 0; dfb->xrgb32 = false; dfb->rgb16 = false; - if (dfb->len_r == 8 && dfb->len_g == 8 && dfb->len_b == 8 && - dfb->off_r == 16 && dfb->off_g == 8 && dfb->off_b == 0 && - dfb->Bpp == 4) + if (dfb->len_r == 8 && dfb->len_g == 8 && dfb->len_b == 8 && dfb->off_r == 16 && + dfb->off_g == 8 && dfb->off_b == 0 && dfb->Bpp == 4) dfb->xrgb32 = true; - else if (dfb->len_r == 5 && dfb->len_g == 6 && dfb->len_b == 5 && - dfb->off_r == 11 && dfb->off_g == 5 && dfb->off_b == 0 && - dfb->Bpp == 2) + else if (dfb->len_r == 5 && dfb->len_g == 6 && dfb->len_b == 5 && dfb->off_r == 11 && + dfb->off_g == 5 && dfb->off_b == 0 && dfb->Bpp == 2) dfb->rgb16 = true; - else if (dfb->len_r == 8 && dfb->len_g == 8 && dfb->len_b == 8 && - dfb->off_r == 16 && dfb->off_g == 8 && dfb->off_b == 0 && - dfb->Bpp == 3) + else if (dfb->len_r == 8 && dfb->len_g == 8 && dfb->len_b == 8 && dfb->off_r == 16 && + dfb->off_g == 8 && dfb->off_b == 0 && dfb->Bpp == 3) dfb->rgb24 = true; /* TODO: make dithering configurable */ @@ -425,13 +409,11 @@ static int display_set_dpms(struct uterm_display *disp, int state) return -EINVAL; } - log_info("setting DPMS of device %p to %s", dfb->node, - uterm_dpms_to_name(state)); + log_info("setting DPMS of device %p to %s", dfb->node, uterm_dpms_to_name(state)); ret = ioctl(dfb->fd, FBIOBLANK, set); if (ret) { - log_error("cannot set DPMS on %s (%d): %m", dfb->node, - errno); + log_error("cannot set DPMS on %s (%d): %m", dfb->node, errno); return -EFAULT; } @@ -452,8 +434,7 @@ static int display_use(struct uterm_display *disp, bool *opengl) return dfb->bufid ^ 1; } -static int display_get_buffers(struct uterm_display *disp, - struct uterm_video_buffer *buffer, +static int display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, unsigned int formats) { struct fbdev_display *dfb = disp->data; @@ -508,8 +489,7 @@ static int display_swap(struct uterm_display *disp, bool immediate) ret = ioctl(dfb->fd, FBIOPUT_VSCREENINFO, vinfo); if (ret) { - log_warning("cannot swap buffers on %s (%d): %m", - dfb->node, errno); + log_warning("cannot swap buffers on %s (%d): %m", dfb->node, errno); return -EFAULT; } @@ -578,8 +558,7 @@ static int video_init(struct uterm_video *video, const char *node) goto err_free; } - ret = ev_eloop_register_idle_cb(video->eloop, intro_idle_event, video, - EV_NORMAL); + ret = ev_eloop_register_idle_cb(video->eloop, intro_idle_event, video, EV_NORMAL); if (ret) { log_error("cannot register idle event: %d", ret); goto err_node; @@ -602,8 +581,7 @@ static void video_destroy(struct uterm_video *video) log_info("free device on %s", vfb->node); if (vfb->pending_intro) - ev_eloop_unregister_idle_cb(video->eloop, intro_idle_event, - video, EV_NORMAL); + ev_eloop_unregister_idle_cb(video->eloop, intro_idle_event, video, EV_NORMAL); free(vfb->node); free(vfb); @@ -614,7 +592,8 @@ static void video_sleep(struct uterm_video *video) struct uterm_display *iter; struct shl_dlist *i; - shl_dlist_for_each(i, &video->displays) { + shl_dlist_for_each(i, &video->displays) + { iter = shl_dlist_entry(i, struct uterm_display, list); if (!display_is_online(iter)) @@ -631,7 +610,8 @@ static int video_wake_up(struct uterm_video *video) int ret; video->flags |= VIDEO_AWAKE; - shl_dlist_for_each(i, &video->displays) { + shl_dlist_for_each(i, &video->displays) + { iter = shl_dlist_entry(i, struct uterm_display, list); if (!display_is_online(iter)) @@ -648,15 +628,13 @@ static int video_wake_up(struct uterm_video *video) return 0; } -struct uterm_video_module fbdev_module = { - .name = "fbdev", - .owner = NULL, - .ops = { - .init = video_init, - .destroy = video_destroy, - .segfault = NULL, /* TODO */ - .poll = NULL, - .sleep = video_sleep, - .wake_up = video_wake_up, - } -}; +struct uterm_video_module fbdev_module = {.name = "fbdev", + .owner = NULL, + .ops = { + .init = video_init, + .destroy = video_destroy, + .segfault = NULL, /* TODO */ + .poll = NULL, + .sleep = video_sleep, + .wake_up = video_wake_up, + }}; diff --git a/src/uterm_input.c b/src/uterm_input.c index cec0798e..a9740a07 100644 --- a/src/uterm_input.c +++ b/src/uterm_input.c @@ -51,10 +51,7 @@ static void input_free_dev(struct uterm_input_dev *dev); -static void notify_event(struct uterm_input_dev *dev, - uint16_t type, - uint16_t code, - int32_t value) +static void notify_event(struct uterm_input_dev *dev, uint16_t type, uint16_t code, int32_t value) { switch (type) { case EV_KEY: @@ -93,20 +90,17 @@ static void input_data_dev(struct ev_fd *fd, int mask, void *data) if (len < 0) { if (errno == EWOULDBLOCK) break; - llog_warn(dev->input, "reading from %s failed (%d): %m", - dev->node, errno); + llog_warn(dev->input, "reading from %s failed (%d): %m", dev->node, errno); input_free_dev(dev); } else if (len == 0) { llog_debug(dev->input, "EOF on %s", dev->node); input_free_dev(dev); } else if (len % sizeof(*ev)) { - llog_warn(dev->input, "invalid input_event on %s", - dev->node); + llog_warn(dev->input, "invalid input_event on %s", dev->node); } else { n = len / sizeof(*ev); for (i = 0; i < n; i++) - notify_event(dev, ev[i].type, ev[i].code, - ev[i].value); + notify_event(dev, ev[i].type, ev[i].code, ev[i].value); } } } @@ -120,15 +114,14 @@ static int input_wake_up_dev(struct uterm_input_dev *dev) dev->rfd = open(dev->node, O_CLOEXEC | O_NONBLOCK | O_RDWR); if (dev->rfd < 0) { - llog_warn(dev->input, "cannot open device %s (%d): %m", - dev->node, errno); + llog_warn(dev->input, "cannot open device %s (%d): %m", dev->node, errno); return -EFAULT; } if (dev->capabilities & UTERM_DEVICE_HAS_KEYS) uxkb_dev_wake_up(dev); - ret = ev_eloop_new_fd(dev->input->eloop, &dev->fd, dev->rfd, - EV_READABLE, input_data_dev, dev); + ret = ev_eloop_new_fd(dev->input->eloop, &dev->fd, dev->rfd, EV_READABLE, input_data_dev, + dev); if (ret) { close(dev->rfd); dev->rfd = -1; @@ -218,9 +211,8 @@ static int input_init_abs(struct uterm_input_dev *dev) dev->pointer.min_y = info.minimum; dev->pointer.max_y = info.maximum; - llog_debug(dev->input, "ABSX min %d max %d ABSY min %d max %d\n", - dev->pointer.min_x, dev->pointer.max_x, - dev->pointer.min_y, dev->pointer.max_y); + llog_debug(dev->input, "ABSX min %d max %d ABSY min %d max %d\n", dev->pointer.min_x, + dev->pointer.max_x, dev->pointer.min_y, dev->pointer.max_y); return 0; err_closefd: @@ -228,9 +220,7 @@ static int input_init_abs(struct uterm_input_dev *dev) return ret; } -static void input_new_dev(struct uterm_input *input, - const char *node, - unsigned int capabilities) +static void input_new_dev(struct uterm_input *input, const char *node, unsigned int capabilities) { struct uterm_input_dev *dev; int ret; @@ -260,7 +250,7 @@ static void input_new_dev(struct uterm_input *input, if (dev->capabilities & UTERM_DEVICE_HAS_TOUCH) dev->pointer.kind = POINTER_TOUCHPAD; else - dev->pointer.kind = POINTER_VMOUSE; + dev->pointer.kind = POINTER_VMOUSE; } if (dev->capabilities & UTERM_DEVICE_HAS_REL) dev->pointer.kind = POINTER_MOUSE; @@ -306,20 +296,11 @@ static void hide_pointer_timer(struct ev_timer *timer, uint64_t num, void *data) } SHL_EXPORT -int uterm_input_new(struct uterm_input **out, - struct ev_eloop *eloop, - const char *model, - const char *layout, - const char *variant, - const char *options, - const char *locale, - const char *keymap, - const char *compose_file, - size_t compose_file_len, - unsigned int repeat_delay, - unsigned int repeat_rate, - uterm_input_log_t log, - void *log_data) +int uterm_input_new(struct uterm_input **out, struct ev_eloop *eloop, const char *model, + const char *layout, const char *variant, const char *options, + const char *locale, const char *keymap, const char *compose_file, + size_t compose_file_len, unsigned int repeat_delay, unsigned int repeat_rate, + uterm_input_log_t log, void *log_data) { struct uterm_input *input; int ret; @@ -356,8 +337,8 @@ int uterm_input_new(struct uterm_input **out, if (ret) goto err_hook; - ret = ev_eloop_new_timer(input->eloop, &input->hide_pointer, NULL, - hide_pointer_timer, input); + ret = ev_eloop_new_timer(input->eloop, &input->hide_pointer, NULL, hide_pointer_timer, + input); if (ret) goto err_hook_pointer; @@ -365,16 +346,16 @@ int uterm_input_new(struct uterm_input **out, * variable if options is an empty string. * So if all variables are empty, use NULL instead. */ - if (model && *model == 0 && layout && *layout == 0 && - variant && *variant == 0 && options && *options == 0) { + if (model && *model == 0 && layout && *layout == 0 && variant && *variant == 0 && options && + *options == 0) { model = NULL; layout = NULL; variant = NULL; options = NULL; } - ret = uxkb_desc_init(input, model, layout, variant, options, locale, - keymap, compose_file, compose_file_len); + ret = uxkb_desc_init(input, model, layout, variant, options, locale, keymap, compose_file, + compose_file_len); if (ret) goto err_hide_timer; @@ -417,9 +398,7 @@ void uterm_input_unref(struct uterm_input *input) llog_debug(input, "free object %p", input); while (input->devices.next != &input->devices) { - dev = shl_dlist_entry(input->devices.next, - struct uterm_input_dev, - list); + dev = shl_dlist_entry(input->devices.next, struct uterm_input_dev, list); input_free_dev(dev); } @@ -434,15 +413,14 @@ void uterm_input_unref(struct uterm_input *input) * We go over the possible capabilities and return a mask of enum * uterm_input_device_capability's. */ -static unsigned int probe_device_capabilities(struct uterm_input *input, - const char *node) +static unsigned int probe_device_capabilities(struct uterm_input *input, const char *node) { int i, fd, ret; unsigned int capabilities = 0; - unsigned long evbits[NLONGS(EV_CNT)] = { 0 }; - unsigned long keybits[NLONGS(KEY_CNT)] = { 0 }; - unsigned long relbits[NLONGS(REL_CNT)] = { 0 }; - unsigned long absbits[NLONGS(ABS_CNT)] = { 0 }; + unsigned long evbits[NLONGS(EV_CNT)] = {0}; + unsigned long keybits[NLONGS(KEY_CNT)] = {0}; + unsigned long relbits[NLONGS(REL_CNT)] = {0}; + unsigned long absbits[NLONGS(ABS_CNT)] = {0}; fd = open(node, O_NONBLOCK | O_CLOEXEC | O_RDONLY); if (fd < 0) @@ -476,25 +454,21 @@ static unsigned int probe_device_capabilities(struct uterm_input *input, capabilities |= UTERM_DEVICE_HAS_TOUCH; } - if (input_bit_is_set(evbits, EV_SYN) && - input_bit_is_set(evbits, EV_REL)) { + if (input_bit_is_set(evbits, EV_SYN) && input_bit_is_set(evbits, EV_REL)) { ret = ioctl(fd, EVIOCGBIT(EV_REL, sizeof(relbits)), relbits); if (ret < 0) goto err_ioctl; - if (input_bit_is_set(relbits, REL_X) && - input_bit_is_set(relbits, REL_Y)) + if (input_bit_is_set(relbits, REL_X) && input_bit_is_set(relbits, REL_Y)) capabilities |= UTERM_DEVICE_HAS_REL; if (input_bit_is_set(relbits, REL_WHEEL)) capabilities |= UTERM_DEVICE_HAS_WHEEL; } - if (input_bit_is_set(evbits, EV_SYN) && - input_bit_is_set(evbits, EV_ABS)) { + if (input_bit_is_set(evbits, EV_SYN) && input_bit_is_set(evbits, EV_ABS)) { ret = ioctl(fd, EVIOCGBIT(EV_ABS, sizeof(absbits)), absbits); if (ret < 0) goto err_ioctl; - if (input_bit_is_set(absbits, ABS_X) && - input_bit_is_set(absbits, ABS_Y)) + if (input_bit_is_set(absbits, ABS_X) && input_bit_is_set(absbits, ABS_Y)) capabilities |= UTERM_DEVICE_HAS_ABS; } @@ -505,8 +479,7 @@ static unsigned int probe_device_capabilities(struct uterm_input *input, return capabilities; err_ioctl: - llog_warn(input, "cannot probe capabilities of device %s (%d): %m", - node, errno); + llog_warn(input, "cannot probe capabilities of device %s (%d): %m", node, errno); close(fd); return 0; } @@ -547,10 +520,9 @@ void uterm_input_remove_dev(struct uterm_input *input, const char *node) if (!input || !node) return; - shl_dlist_for_each(iter, &input->devices) { - dev = shl_dlist_entry(iter, - struct uterm_input_dev, - list); + shl_dlist_for_each(iter, &input->devices) + { + dev = shl_dlist_entry(iter, struct uterm_input_dev, list); if (!strcmp(dev->node, node)) { input_free_dev(dev); break; @@ -559,9 +531,7 @@ void uterm_input_remove_dev(struct uterm_input *input, const char *node) } SHL_EXPORT -int uterm_input_register_key_cb(struct uterm_input *input, - uterm_input_key_cb cb, - void *data) +int uterm_input_register_key_cb(struct uterm_input *input, uterm_input_key_cb cb, void *data) { if (!input || !cb) return -EINVAL; @@ -570,9 +540,7 @@ int uterm_input_register_key_cb(struct uterm_input *input, } SHL_EXPORT -void uterm_input_unregister_key_cb(struct uterm_input *input, - uterm_input_key_cb cb, - void *data) +void uterm_input_unregister_key_cb(struct uterm_input *input, uterm_input_key_cb cb, void *data) { if (!input || !cb) return; @@ -581,8 +549,7 @@ void uterm_input_unregister_key_cb(struct uterm_input *input, } SHL_EXPORT -int uterm_input_register_pointer_cb(struct uterm_input *input, - uterm_input_pointer_cb cb, +int uterm_input_register_pointer_cb(struct uterm_input *input, uterm_input_pointer_cb cb, void *data) { if (!input || !cb) @@ -592,8 +559,7 @@ int uterm_input_register_pointer_cb(struct uterm_input *input, } SHL_EXPORT -void uterm_input_unregister_pointer_cb(struct uterm_input *input, - uterm_input_pointer_cb cb, +void uterm_input_unregister_pointer_cb(struct uterm_input *input, uterm_input_pointer_cb cb, void *data) { if (!input || !cb) @@ -617,10 +583,9 @@ void uterm_input_sleep(struct uterm_input *input) llog_debug(input, "going to sleep"); - shl_dlist_for_each(iter, &input->devices) { - dev = shl_dlist_entry(iter, - struct uterm_input_dev, - list); + shl_dlist_for_each(iter, &input->devices) + { + dev = shl_dlist_entry(iter, struct uterm_input_dev, list); input_sleep_dev(dev); } } @@ -641,10 +606,9 @@ void uterm_input_wake_up(struct uterm_input *input) llog_debug(input, "wakeing up"); - shl_dlist_for_each_safe(iter, tmp, &input->devices) { - dev = shl_dlist_entry(iter, - struct uterm_input_dev, - list); + shl_dlist_for_each_safe(iter, tmp, &input->devices) + { + dev = shl_dlist_entry(iter, struct uterm_input_dev, list); ret = input_wake_up_dev(dev); if (ret) input_free_dev(dev); @@ -661,9 +625,7 @@ bool uterm_input_is_awake(struct uterm_input *input) } SHL_EXPORT -void uterm_input_set_pointer_max(struct uterm_input *input, - unsigned int max_x, - unsigned int max_y) +void uterm_input_set_pointer_max(struct uterm_input *input, unsigned int max_x, unsigned int max_y) { if (!input) return; diff --git a/src/uterm_input.h b/src/uterm_input.h index 55a05d9f..6b942170 100644 --- a/src/uterm_input.h +++ b/src/uterm_input.h @@ -40,36 +40,31 @@ struct uterm_input; -typedef void (*uterm_input_log_t) (void *data, - const char *file, - int line, - const char *func, - const char *subs, - unsigned int sev, - const char *format, - va_list args); +typedef void (*uterm_input_log_t)(void *data, const char *file, int line, const char *func, + const char *subs, unsigned int sev, const char *format, + va_list args); /* keep in sync with shl_xkb_mods */ enum uterm_input_modifier { - UTERM_SHIFT_MASK = (1 << 0), - UTERM_LOCK_MASK = (1 << 1), - UTERM_CONTROL_MASK = (1 << 2), - UTERM_ALT_MASK = (1 << 3), - UTERM_LOGO_MASK = (1 << 4), + UTERM_SHIFT_MASK = (1 << 0), + UTERM_LOCK_MASK = (1 << 1), + UTERM_CONTROL_MASK = (1 << 2), + UTERM_ALT_MASK = (1 << 3), + UTERM_LOGO_MASK = (1 << 4), }; /* keep in sync with TSM_VTE_INVALID */ #define UTERM_INPUT_INVALID 0xffffffff struct uterm_input_key_event { - bool handled; /* user-controlled, default is false */ - uint16_t keycode; /* linux keycode - KEY_* - linux/input.h */ - uint32_t ascii; /* ascii keysym for @keycode */ - unsigned int mods; /* active modifiers - uterm_modifier mask */ - - unsigned int num_syms; /* number of keysyms */ - uint32_t *keysyms; /* XKB-common keysym-array - XKB_KEY_* */ - uint32_t *codepoints; /* ucs4 unicode value or UTERM_INPUT_INVALID */ + bool handled; /* user-controlled, default is false */ + uint16_t keycode; /* linux keycode - KEY_* - linux/input.h */ + uint32_t ascii; /* ascii keysym for @keycode */ + unsigned int mods; /* active modifiers - uterm_modifier mask */ + + unsigned int num_syms; /* number of keysyms */ + uint32_t *keysyms; /* XKB-common keysym-array - XKB_KEY_* */ + uint32_t *codepoints; /* ucs4 unicode value or UTERM_INPUT_INVALID */ }; enum uterm_input_pointer_type { @@ -92,19 +87,16 @@ struct uterm_input_pointer_event { #define UTERM_INPUT_HAS_MODS(_ev, _mods) (((_ev)->mods & (_mods)) == (_mods)) -typedef void (*uterm_input_key_cb) (struct uterm_input *input, - struct uterm_input_key_event *ev, - void *data); +typedef void (*uterm_input_key_cb)(struct uterm_input *input, struct uterm_input_key_event *ev, + void *data); -typedef void (*uterm_input_pointer_cb) (struct uterm_input *input, - struct uterm_input_pointer_event *ev, - void *data); +typedef void (*uterm_input_pointer_cb)(struct uterm_input *input, + struct uterm_input_pointer_event *ev, void *data); -int uterm_input_new(struct uterm_input **out, struct ev_eloop *eloop, - const char *model, const char *layout, const char *variant, - const char *options, const char *locale, const char *keymap, - const char *compose_file, size_t compose_file_len, - unsigned int repeat_delay, unsigned int repeat_rate, +int uterm_input_new(struct uterm_input **out, struct ev_eloop *eloop, const char *model, + const char *layout, const char *variant, const char *options, + const char *locale, const char *keymap, const char *compose_file, + size_t compose_file_len, unsigned int repeat_delay, unsigned int repeat_rate, uterm_input_log_t log, void *log_data); void uterm_input_ref(struct uterm_input *input); void uterm_input_unref(struct uterm_input *input); @@ -112,21 +104,17 @@ void uterm_input_unref(struct uterm_input *input); void uterm_input_add_dev(struct uterm_input *input, const char *node, bool mouse); void uterm_input_remove_dev(struct uterm_input *input, const char *node); -int uterm_input_register_key_cb(struct uterm_input *input, uterm_input_key_cb cb, - void *data); -void uterm_input_unregister_key_cb(struct uterm_input *input, uterm_input_key_cb cb, - void *data); +int uterm_input_register_key_cb(struct uterm_input *input, uterm_input_key_cb cb, void *data); +void uterm_input_unregister_key_cb(struct uterm_input *input, uterm_input_key_cb cb, void *data); int uterm_input_register_pointer_cb(struct uterm_input *input, uterm_input_pointer_cb cb, - void *data); + void *data); void uterm_input_unregister_pointer_cb(struct uterm_input *input, uterm_input_pointer_cb cb, - void *data); + void *data); void uterm_input_sleep(struct uterm_input *input); void uterm_input_wake_up(struct uterm_input *input); bool uterm_input_is_awake(struct uterm_input *input); -void uterm_input_set_pointer_max(struct uterm_input *input, - unsigned int max_x, - unsigned int max_y); +void uterm_input_set_pointer_max(struct uterm_input *input, unsigned int max_x, unsigned int max_y); #endif /* UTERM_UTERM_INPUT_H */ diff --git a/src/uterm_input_internal.h b/src/uterm_input_internal.h index 2a99a283..fa8a5c9d 100644 --- a/src/uterm_input_internal.h +++ b/src/uterm_input_internal.h @@ -126,31 +126,20 @@ static inline bool input_bit_is_set(const unsigned long *array, int bit) return !!(array[bit / LONG_BIT] & (1UL << (bit % LONG_BIT))); } -int uxkb_desc_init(struct uterm_input *input, - const char *model, - const char *layout, - const char *variant, - const char *options, - const char *locale, - const char *keymap, - const char *compose_file, - size_t compose_file_len); +int uxkb_desc_init(struct uterm_input *input, const char *model, const char *layout, + const char *variant, const char *options, const char *locale, const char *keymap, + const char *compose_file, size_t compose_file_len); void uxkb_desc_destroy(struct uterm_input *input); int uxkb_dev_init(struct uterm_input_dev *dev); void uxkb_dev_destroy(struct uterm_input_dev *dev); -int uxkb_dev_process(struct uterm_input_dev *dev, - uint16_t key_state, - uint16_t code); +int uxkb_dev_process(struct uterm_input_dev *dev, uint16_t key_state, uint16_t code); void uxkb_dev_sleep(struct uterm_input_dev *dev); void uxkb_dev_wake_up(struct uterm_input_dev *dev); -void pointer_dev_rel(struct uterm_input_dev *dev, - uint16_t code, int32_t value); -void pointer_dev_abs(struct uterm_input_dev *dev, - uint16_t code, int32_t value); -void pointer_dev_button(struct uterm_input_dev *dev, - uint16_t code, int32_t value); +void pointer_dev_rel(struct uterm_input_dev *dev, uint16_t code, int32_t value); +void pointer_dev_abs(struct uterm_input_dev *dev, uint16_t code, int32_t value); +void pointer_dev_button(struct uterm_input_dev *dev, uint16_t code, int32_t value); void pointer_dev_sync(struct uterm_input_dev *dev); #endif /* UTERM_INPUT_INTERNAL_H */ diff --git a/src/uterm_input_pointer.c b/src/uterm_input_pointer.c index 851c381d..cdbe83d1 100644 --- a/src/uterm_input_pointer.c +++ b/src/uterm_input_pointer.c @@ -1,13 +1,12 @@ -#include #include #include +#include #include "eloop.h" #include "shl_hook.h" #include "shl_llog.h" #include "uterm_input.h" #include "uterm_input_internal.h" - static void pointer_update_inactivity_timer(struct uterm_input_dev *dev) { struct itimerspec spec; @@ -40,7 +39,8 @@ static void pointer_dev_send_wheel(struct uterm_input_dev *dev, int32_t value) shl_hook_call(dev->input->pointer_hook, dev->input, &pev); } -static void pointer_dev_send_button(struct uterm_input_dev *dev, uint8_t button, bool pressed, bool dbl_click) +static void pointer_dev_send_button(struct uterm_input_dev *dev, uint8_t button, bool pressed, + bool dbl_click) { struct uterm_input_pointer_event pev = {0}; @@ -63,8 +63,7 @@ void pointer_dev_sync(struct uterm_input_dev *dev) dev->pointer.touchpaddown = false; } -void pointer_dev_rel(struct uterm_input_dev *dev, - uint16_t code, int32_t value) +void pointer_dev_rel(struct uterm_input_dev *dev, uint16_t code, int32_t value) { switch (code) { case REL_X: @@ -91,8 +90,7 @@ void pointer_dev_rel(struct uterm_input_dev *dev, } } -void pointer_dev_abs(struct uterm_input_dev *dev, - uint16_t code, int32_t value) +void pointer_dev_abs(struct uterm_input_dev *dev, uint16_t code, int32_t value) { switch (code) { case ABS_X: @@ -110,7 +108,9 @@ void pointer_dev_abs(struct uterm_input_dev *dev, dev->pointer.off_x = dev->input->pointer_max_x - value; } } else if (dev->pointer.kind == POINTER_VMOUSE) { - dev->pointer.x = ((value - dev->pointer.min_x) * dev->input->pointer_max_x) / (dev->pointer.max_x - dev->pointer.min_x); + dev->pointer.x = + ((value - dev->pointer.min_x) * dev->input->pointer_max_x) / + (dev->pointer.max_x - dev->pointer.min_x); } else { return; } @@ -130,7 +130,9 @@ void pointer_dev_abs(struct uterm_input_dev *dev, dev->pointer.off_y = dev->input->pointer_max_y - value; } } else if (dev->pointer.kind == POINTER_VMOUSE) { - dev->pointer.y = ((value - dev->pointer.min_y) * dev->input->pointer_max_y) / (dev->pointer.max_y - dev->pointer.min_y); + dev->pointer.y = + ((value - dev->pointer.min_y) * dev->input->pointer_max_y) / + (dev->pointer.max_y - dev->pointer.min_y); } else { return; } @@ -141,8 +143,7 @@ void pointer_dev_abs(struct uterm_input_dev *dev, pointer_dev_send_move(dev); } -void pointer_dev_button(struct uterm_input_dev *dev, - uint16_t code, int32_t value) +void pointer_dev_button(struct uterm_input_dev *dev, uint16_t code, int32_t value) { struct timespec tp; uint64_t elapsed; @@ -153,7 +154,8 @@ void pointer_dev_button(struct uterm_input_dev *dev, case BTN_LEFT: if (pressed) { clock_gettime(CLOCK_MONOTONIC, &tp); - elapsed = (tp.tv_sec - dev->pointer.last_click.tv_sec) * 1000 + (tp.tv_nsec - dev->pointer.last_click.tv_nsec) / 1000000; + elapsed = (tp.tv_sec - dev->pointer.last_click.tv_sec) * 1000 + + (tp.tv_nsec - dev->pointer.last_click.tv_nsec) / 1000000; dbl_click = (elapsed < 500); dev->pointer.last_click = tp; } @@ -174,4 +176,3 @@ void pointer_dev_button(struct uterm_input_dev *dev, break; } } - diff --git a/src/uterm_input_uxkb.c b/src/uterm_input_uxkb.c index 926b6725..d0773799 100644 --- a/src/uterm_input_uxkb.c +++ b/src/uterm_input_uxkb.c @@ -31,19 +31,19 @@ #include #include #include -#include #include +#include #include "shl_hook.h" #include "shl_llog.h" #include "shl_misc.h" #include "uterm_input.h" -#include "uterm_input_internal.h" #include "uterm_input_fallback.xkb.bin.h" +#include "uterm_input_internal.h" #define LLOG_SUBSYSTEM "uterm_uxkb" -static void uxkb_log(struct xkb_context *context, enum xkb_log_level level, - const char *format, va_list args) +static void uxkb_log(struct xkb_context *context, enum xkb_log_level level, const char *format, + va_list args) { struct uterm_input *input; unsigned int sev; @@ -72,22 +72,12 @@ static void uxkb_log(struct xkb_context *context, enum xkb_log_level level, break; } - input->llog(input->llog_data, - LLOG_DEFAULT, - sev, - format, - args); + input->llog(input->llog_data, LLOG_DEFAULT, sev, format, args); } -int uxkb_desc_init(struct uterm_input *input, - const char *model, - const char *layout, - const char *variant, - const char *options, - const char *locale, - const char *keymap, - const char *compose_file, - size_t compose_file_len) +int uxkb_desc_init(struct uterm_input *input, const char *model, const char *layout, + const char *variant, const char *options, const char *locale, const char *keymap, + const char *compose_file, size_t compose_file_len) { int ret; struct xkb_rule_names rmlvo = { @@ -115,11 +105,10 @@ int uxkb_desc_init(struct uterm_input *input, /* If a complete keymap file was given, first try that. */ if (keymap && *keymap) { - input->keymap = xkb_keymap_new_from_string(input->ctx, - keymap, XKB_KEYMAP_FORMAT_TEXT_V1, 0); + input->keymap = xkb_keymap_new_from_string(input->ctx, keymap, + XKB_KEYMAP_FORMAT_TEXT_V1, 0); if (input->keymap) { - llog_debug(input, - "new keyboard description from memory"); + llog_debug(input, "new keyboard description from memory"); } else { llog_warn(input, "cannot parse keymap, reverting to rmlvo"); } @@ -130,26 +119,25 @@ int uxkb_desc_init(struct uterm_input *input, } if (!input->keymap) { - llog_warn(input, "failed to create keymap (%s, %s, %s, %s), " + llog_warn(input, + "failed to create keymap (%s, %s, %s, %s), " "reverting to default system keymap", - model, layout, variant, options); + model, layout, variant, options); rmlvo.model = ""; rmlvo.layout = ""; rmlvo.variant = ""; rmlvo.options = ""; - input->keymap = xkb_keymap_new_from_names(input->ctx, - &rmlvo, 0); + input->keymap = xkb_keymap_new_from_names(input->ctx, &rmlvo, 0); if (!input->keymap) { llog_warn(input, "failed to create XKB default keymap, " - "reverting to built-in fallback"); + "reverting to built-in fallback"); - input->keymap = xkb_keymap_new_from_string(input->ctx, - fallback, XKB_KEYMAP_FORMAT_TEXT_V1, 0); + input->keymap = xkb_keymap_new_from_string(input->ctx, fallback, + XKB_KEYMAP_FORMAT_TEXT_V1, 0); if (!input->keymap) { - llog_error(input, - "cannot create fallback keymap"); + llog_error(input, "cannot create fallback keymap"); ret = -EFAULT; goto err_ctx; } @@ -157,36 +145,28 @@ int uxkb_desc_init(struct uterm_input *input, llog_debug(input, "new fallback keyboard description"); } else { - llog_debug(input, "new keyboard description (%s, %s, %s, %s)", - model, layout, variant, options); + llog_debug(input, "new keyboard description (%s, %s, %s, %s)", model, layout, + variant, options); } if (compose_file && *compose_file) { input->compose_table = xkb_compose_table_new_from_buffer( - input->ctx, - compose_file, - compose_file_len, - locale, - XKB_COMPOSE_FORMAT_TEXT_V1, - 0); + input->ctx, compose_file, compose_file_len, locale, + XKB_COMPOSE_FORMAT_TEXT_V1, 0); if (input->compose_table) { - llog_debug(input, - "new compose table from memory"); + llog_debug(input, "new compose table from memory"); } else { llog_warn(input, "cannot parse compose table, " - "reverting to default"); + "reverting to default"); } } if (!input->compose_table) { - input->compose_table = xkb_compose_table_new_from_locale( - input->ctx, - locale, - 0); + input->compose_table = xkb_compose_table_new_from_locale(input->ctx, locale, 0); if (!input->compose_table) { llog_warn(input, "failed to create XKB default compose " - "table, disabling compose support"); + "table, disabling compose support"); } } @@ -216,8 +196,7 @@ int uxkb_dev_init(struct uterm_input_dev *dev) { int ret; - ret = ev_eloop_new_timer(dev->input->eloop, &dev->repeat_timer, NULL, - timer_event, dev); + ret = ev_eloop_new_timer(dev->input->eloop, &dev->repeat_timer, NULL, timer_event, dev); if (ret) return ret; @@ -229,12 +208,10 @@ int uxkb_dev_init(struct uterm_input_dev *dev) } if (dev->input->compose_table) { - dev->compose_state = xkb_compose_state_new( - dev->input->compose_table, - 0); + dev->compose_state = xkb_compose_state_new(dev->input->compose_table, 0); if (!dev->compose_state) llog_warn(dev->input, "cannot create compose state, " - "disabling compose support"); + "disabling compose support"); } return 0; @@ -264,9 +241,9 @@ static void uxkb_dev_update_keyboard_leds(struct uterm_input_dev *dev) int evdev_led; const char *xkb_led; } leds[] = { - { LED_NUML, XKB_LED_NAME_NUM }, - { LED_CAPSL, XKB_LED_NAME_CAPS }, - { LED_SCROLLL, XKB_LED_NAME_SCROLL }, + {LED_NUML, XKB_LED_NAME_NUM}, + {LED_CAPSL, XKB_LED_NAME_CAPS}, + {LED_SCROLLL, XKB_LED_NAME_SCROLL}, }; struct input_event events[sizeof(leds) / sizeof(*leds)]; int i, ret; @@ -279,15 +256,13 @@ static void uxkb_dev_update_keyboard_leds(struct uterm_input_dev *dev) for (i = 0; i < sizeof(leds) / sizeof(*leds); i++) { events[i].type = EV_LED; events[i].code = leds[i].evdev_led; - if (xkb_state_led_name_is_active(dev->state, - leds[i].xkb_led) > 0) + if (xkb_state_led_name_is_active(dev->state, leds[i].xkb_led) > 0) events[i].value = 1; } ret = write(dev->rfd, events, sizeof(events)); if (ret != sizeof(events)) - llog_warning(dev->input, "cannot update LED state (%d): %m", - errno); + llog_warning(dev->input, "cannot update LED state (%d): %m", errno); } static inline int uxkb_dev_resize_event(struct uterm_input_dev *dev, size_t s) @@ -295,38 +270,30 @@ static inline int uxkb_dev_resize_event(struct uterm_input_dev *dev, size_t s) uint32_t *tmp; if (s > dev->num_syms) { - tmp = realloc(dev->event.keysyms, - sizeof(uint32_t) * s); + tmp = realloc(dev->event.keysyms, sizeof(uint32_t) * s); if (!tmp) { - llog_warning(dev->input, - "cannot reallocate keysym buffer"); + llog_warning(dev->input, "cannot reallocate keysym buffer"); return -ENOKEY; } dev->event.keysyms = tmp; - tmp = realloc(dev->event.codepoints, - sizeof(uint32_t) * s); + tmp = realloc(dev->event.codepoints, sizeof(uint32_t) * s); if (!tmp) { - llog_warning(dev->input, - "cannot reallocate codepoints buffer"); + llog_warning(dev->input, "cannot reallocate codepoints buffer"); return -ENOKEY; } dev->event.codepoints = tmp; - tmp = realloc(dev->repeat_event.keysyms, - sizeof(uint32_t) * s); + tmp = realloc(dev->repeat_event.keysyms, sizeof(uint32_t) * s); if (!tmp) { - llog_warning(dev->input, - "cannot reallocate keysym buffer"); + llog_warning(dev->input, "cannot reallocate keysym buffer"); return -ENOKEY; } dev->repeat_event.keysyms = tmp; - tmp = realloc(dev->repeat_event.codepoints, - sizeof(uint32_t) * s); + tmp = realloc(dev->repeat_event.codepoints, sizeof(uint32_t) * s); if (!tmp) { - llog_warning(dev->input, - "cannot reallocate codepoints buffer"); + llog_warning(dev->input, "cannot reallocate codepoints buffer"); return -ENOKEY; } dev->repeat_event.codepoints = tmp; @@ -337,11 +304,8 @@ static inline int uxkb_dev_resize_event(struct uterm_input_dev *dev, size_t s) return 0; } -static int uxkb_dev_fill_event(struct uterm_input_dev *dev, - struct uterm_input_key_event *ev, - xkb_keycode_t code, - int num_syms, - const xkb_keysym_t *syms) +static int uxkb_dev_fill_event(struct uterm_input_dev *dev, struct uterm_input_key_event *ev, + xkb_keycode_t code, int num_syms, const xkb_keysym_t *syms) { int ret, i; @@ -380,8 +344,7 @@ static void uxkb_dev_repeat(struct uterm_input_dev *dev, unsigned int state) return; } - if (state == KEY_PRESSED && - xkb_keymap_key_repeats(keymap, dev->event.keycode)) { + if (state == KEY_PRESSED && xkb_keymap_key_repeats(keymap, dev->event.keycode)) { dev->repeat_event.keycode = dev->event.keycode; dev->repeat_event.ascii = dev->event.ascii; dev->repeat_event.mods = dev->event.mods; @@ -389,19 +352,15 @@ static void uxkb_dev_repeat(struct uterm_input_dev *dev, unsigned int state) for (i = 0; i < dev->event.num_syms; ++i) { dev->repeat_event.keysyms[i] = dev->event.keysyms[i]; - dev->repeat_event.codepoints[i] = - dev->event.codepoints[i]; + dev->repeat_event.codepoints[i] = dev->event.codepoints[i]; } - } else if (dev->repeating && - !xkb_keymap_key_repeats(keymap, dev->event.keycode)) { - num_keysyms = xkb_state_key_get_syms(dev->state, - dev->repeat_event.keycode, - &keysyms); + } else if (dev->repeating && !xkb_keymap_key_repeats(keymap, dev->event.keycode)) { + num_keysyms = + xkb_state_key_get_syms(dev->state, dev->repeat_event.keycode, &keysyms); if (num_keysyms <= 0) return; - ret = uxkb_dev_fill_event(dev, &dev->repeat_event, - dev->repeat_event.keycode, + ret = uxkb_dev_fill_event(dev, &dev->repeat_event, dev->repeat_event.keycode, num_keysyms, keysyms); if (ret) return; @@ -419,8 +378,7 @@ static void uxkb_dev_repeat(struct uterm_input_dev *dev, unsigned int state) ev_timer_update(dev->repeat_timer, &spec); } -int uxkb_dev_process(struct uterm_input_dev *dev, - uint16_t key_state, uint16_t code) +int uxkb_dev_process(struct uterm_input_dev *dev, uint16_t key_state, uint16_t code) { struct xkb_state *state; struct xkb_compose_state *compose_state; @@ -517,12 +475,10 @@ int uxkb_dev_process(struct uterm_input_dev *dev, if (num_keysyms <= 0) return -ENOKEY; - if (compose_status == XKB_COMPOSE_COMPOSING || - compose_status == XKB_COMPOSE_CANCELLED) + if (compose_status == XKB_COMPOSE_COMPOSING || compose_status == XKB_COMPOSE_CANCELLED) return -ENOKEY; - ret = uxkb_dev_fill_event(dev, &dev->event, keycode, num_keysyms, - keysyms); + ret = uxkb_dev_fill_event(dev, &dev->event, keycode, num_keysyms, keysyms); if (ret) return -ENOKEY; @@ -556,11 +512,9 @@ void uxkb_dev_sleep(struct uterm_input_dev *dev) */ memset(dev->key_state_bits, 0, sizeof(dev->key_state_bits)); errno = 0; - ioctl(dev->rfd, EVIOCGKEY(sizeof(dev->key_state_bits)), - dev->key_state_bits); + ioctl(dev->rfd, EVIOCGKEY(sizeof(dev->key_state_bits)), dev->key_state_bits); if (errno) - llog_warn(dev->input, "failed to save keyboard state (%d): %m", - errno); + llog_warn(dev->input, "failed to save keyboard state (%d): %m", errno); } void uxkb_dev_wake_up(struct uterm_input_dev *dev) @@ -575,9 +529,7 @@ void uxkb_dev_wake_up(struct uterm_input_dev *dev) errno = 0; ioctl(dev->rfd, EVIOCGKEY(sizeof(cur_bits)), cur_bits); if (errno) { - llog_warn(dev->input, - "failed to get current keyboard state (%d): %m", - errno); + llog_warn(dev->input, "failed to get current keyboard state (%d): %m", errno); return; } diff --git a/src/uterm_mod_drm3d.c b/src/uterm_mod_drm3d.c index 3fabfe42..6b38f299 100644 --- a/src/uterm_mod_drm3d.c +++ b/src/uterm_mod_drm3d.c @@ -30,8 +30,8 @@ #include #include -#include "shl_module_interface.h" #include "shl_log.h" +#include "shl_module_interface.h" #include "uterm_video_internal.h" extern struct uterm_video_module drm3d_module; diff --git a/src/uterm_monitor.c b/src/uterm_monitor.c index f705d920..cf526459 100644 --- a/src/uterm_monitor.c +++ b/src/uterm_monitor.c @@ -107,9 +107,9 @@ static void monitor_refresh_seats(struct uterm_monitor *mon) } /* Remove all seats that are no longer present */ - shl_dlist_for_each_safe(iter, tmp, &mon->seats) { - seat = shl_dlist_entry(iter, struct uterm_monitor_seat, - list); + shl_dlist_for_each_safe(iter, tmp, &mon->seats) + { + seat = shl_dlist_entry(iter, struct uterm_monitor_seat, list); for (i = 0; i < num; ++i) { if (!strcmp(seats[i], seat->name)) break; @@ -134,9 +134,7 @@ static void monitor_refresh_seats(struct uterm_monitor *mon) free(seats); } -static void monitor_sd_event(struct ev_fd *fd, - int mask, - void *data) +static void monitor_sd_event(struct ev_fd *fd, int mask, void *data) { struct uterm_monitor *mon = data; @@ -174,8 +172,7 @@ static int monitor_sd_init(struct uterm_monitor *mon) goto err_sd; } - ret = ev_eloop_new_fd(mon->eloop, &mon->sd_mon_fd, sfd, EV_READABLE, - monitor_sd_event, mon); + ret = ev_eloop_new_fd(mon->eloop, &mon->sd_mon_fd, sfd, EV_READABLE, monitor_sd_event, mon); if (ret) goto err_sd; @@ -195,10 +192,8 @@ static void monitor_sd_deinit(struct uterm_monitor *mon) uterm_sd_free(mon->sd); } -static void seat_new_dev(struct uterm_monitor_seat *seat, - unsigned int type, - unsigned int flags, - const char *node) +static void seat_new_dev(struct uterm_monitor_seat *seat, unsigned int type, unsigned int flags, + const char *node) { struct uterm_monitor_dev *dev; struct uterm_monitor_event ev; @@ -261,7 +256,7 @@ static void seat_free_dev(struct uterm_monitor_dev *dev) } static struct uterm_monitor_dev *monitor_find_dev(struct uterm_monitor *mon, - struct udev_device *dev) + struct udev_device *dev) { const char *node; struct shl_dlist *iter, *iter2; @@ -272,13 +267,12 @@ static struct uterm_monitor_dev *monitor_find_dev(struct uterm_monitor *mon, if (!node) return NULL; - shl_dlist_for_each(iter, &mon->seats) { - seat = shl_dlist_entry(iter, struct uterm_monitor_seat, - list); - shl_dlist_for_each(iter2, &seat->devices) { - sdev = shl_dlist_entry(iter2, - struct uterm_monitor_dev, - list); + shl_dlist_for_each(iter, &mon->seats) + { + seat = shl_dlist_entry(iter, struct uterm_monitor_seat, list); + shl_dlist_for_each(iter2, &seat->devices) + { + sdev = shl_dlist_entry(iter2, struct uterm_monitor_dev, list); if (!strcmp(node, sdev->node)) return sdev; } @@ -327,9 +321,7 @@ static void monitor_free_seat(struct uterm_monitor_seat *seat) log_debug("free seat %s", seat->name); while (seat->devices.next != &seat->devices) { - dev = shl_dlist_entry(seat->devices.next, - struct uterm_monitor_dev, - list); + dev = shl_dlist_entry(seat->devices.next, struct uterm_monitor_dev, list); seat_free_dev(dev); } @@ -416,14 +408,15 @@ static unsigned int get_fbdev_flags(struct uterm_monitor *mon, const char *node) fd = open(node, O_RDWR | O_CLOEXEC); if (fd < 0) { - log_warning("cannot open fbdev node %s for drm-device verification (%d): %m", - node, errno); + log_warning("cannot open fbdev node %s for drm-device verification (%d): %m", node, + errno); return flags; } ret = ioctl(fd, FBIOGET_FSCREENINFO, &finfo); if (ret) { - log_warning("cannot retrieve finfo from fbdev node %s for drm-device verification (%d): %m", + log_warning("cannot retrieve finfo from fbdev node %s for drm-device verification " + "(%d): %m", node, errno); goto out_close; } @@ -435,8 +428,7 @@ static unsigned int get_fbdev_flags(struct uterm_monitor *mon, const char *node) * checking whether the parent udev device node does also provide a DRM * device. */ len = strlen(finfo.id); - if ((len < 5 || strcmp(&finfo.id[len - 5], "drmfb")) && - strcmp(finfo.id, "nouveaufb") && + if ((len < 5 || strcmp(&finfo.id[len - 5], "drmfb")) && strcmp(finfo.id, "nouveaufb") && strcmp(finfo.id, "psbfb")) flags &= ~UTERM_MONITOR_DRM_BACKED; @@ -450,8 +442,7 @@ static unsigned int get_fbdev_flags(struct uterm_monitor *mon, const char *node) return flags; } -static bool is_drm_primary(struct uterm_monitor *mon, struct udev_device *dev, - const char *node) +static bool is_drm_primary(struct uterm_monitor *mon, struct udev_device *dev, const char *node) { struct udev_device *pci; const char *id; @@ -476,15 +467,15 @@ static bool is_drm_primary(struct uterm_monitor *mon, struct udev_device *dev, */ struct uterm_drm_version { - int version_major; /**< Major version */ - int version_minor; /**< Minor version */ - int version_patchlevel; /**< Patch level */ - size_t name_len; /**< Length of name buffer */ - char *name; /**< Name of driver */ - size_t date_len; /**< Length of date buffer */ - char *date; /**< User-space buffer to hold date */ - size_t desc_len; /**< Length of desc buffer */ - char *desc; /**< User-space buffer to hold desc */ + int version_major; /**< Major version */ + int version_minor; /**< Minor version */ + int version_patchlevel; /**< Patch level */ + size_t name_len; /**< Length of name buffer */ + char *name; /**< Name of driver */ + size_t date_len; /**< Length of date buffer */ + char *date; /**< User-space buffer to hold date */ + size_t desc_len; /**< Length of desc buffer */ + char *desc; /**< User-space buffer to hold desc */ }; #define UTERM_DRM_IOCTL_VERSION _IOWR('d', 0x00, struct uterm_drm_version) @@ -524,8 +515,7 @@ static bool is_drm_usb(struct uterm_monitor *mon, const char *node, int fd) name = get_drm_name(fd); if (!name) { - log_warning("cannot get driver name for DRM device %s (%d): %m", - node, errno); + log_warning("cannot get driver name for DRM device %s (%d): %m", node, errno); return false; } @@ -539,16 +529,16 @@ static bool is_drm_usb(struct uterm_monitor *mon, const char *node, int fd) return res; } -static unsigned int get_drm_flags(struct uterm_monitor *mon, - struct udev_device *dev, const char *node) +static unsigned int get_drm_flags(struct uterm_monitor *mon, struct udev_device *dev, + const char *node) { int fd; unsigned int flags = 0; fd = open(node, O_RDWR | O_CLOEXEC); if (fd < 0) { - log_warning("cannot open DRM device %s for primary-detection (%d): %m", - node, errno); + log_warning("cannot open DRM device %s for primary-detection (%d): %m", node, + errno); return flags; } @@ -561,8 +551,7 @@ static unsigned int get_drm_flags(struct uterm_monitor *mon, return flags; } -static void monitor_udev_add(struct uterm_monitor *mon, - struct udev_device *dev) +static void monitor_udev_add(struct uterm_monitor *mon, struct udev_device *dev) { const char *sname, *subs, *node, *name, *sysname; struct shl_dlist *iter; @@ -624,8 +613,7 @@ static void monitor_udev_add(struct uterm_monitor *mon, log_debug("adding unsupported input dev %s", name); return; } - p = udev_device_get_parent_with_subsystem_devtype(dev, - "input", NULL); + p = udev_device_get_parent_with_subsystem_devtype(dev, "input", NULL); if (!p) { log_debug("adding device without parent %s", name); return; @@ -638,8 +626,7 @@ static void monitor_udev_add(struct uterm_monitor *mon, type = UTERM_MONITOR_INPUT; flags = 0; } else { - log_debug("adding device with unknown subsystem %s (%s)", - subs, name); + log_debug("adding device with unknown subsystem %s (%s)", subs, name); return; } @@ -647,24 +634,22 @@ static void monitor_udev_add(struct uterm_monitor *mon, sname = "seat0"; /* find correct seat */ - shl_dlist_for_each(iter, &mon->seats) { - seat = shl_dlist_entry(iter, struct uterm_monitor_seat, - list); + shl_dlist_for_each(iter, &mon->seats) + { + seat = shl_dlist_entry(iter, struct uterm_monitor_seat, list); if (!strcmp(sname, seat->name)) break; } if (iter == &mon->seats) { - log_debug("adding device for unknown seat %s (%s)", - sname, name); + log_debug("adding device for unknown seat %s (%s)", sname, name); return; } seat_new_dev(seat, type, flags, node); } -static void monitor_udev_remove(struct uterm_monitor *mon, - struct udev_device *dev) +static void monitor_udev_remove(struct uterm_monitor *mon, struct udev_device *dev) { struct uterm_monitor_dev *sdev; @@ -677,8 +662,7 @@ static void monitor_udev_remove(struct uterm_monitor *mon, seat_free_dev(sdev); } -static void monitor_udev_change(struct uterm_monitor *mon, - struct udev_device *dev) +static void monitor_udev_change(struct uterm_monitor *mon, struct udev_device *dev) { const char *sname, *val; struct uterm_monitor_dev *sdev; @@ -708,8 +692,7 @@ static void monitor_udev_change(struct uterm_monitor *mon, ev.dev_type = sdev->type; ev.dev_node = sdev->node; ev.dev_data = sdev->data; - sdev->seat->mon->cb(sdev->seat->mon, &ev, - sdev->seat->mon->data); + sdev->seat->mon->cb(sdev->seat->mon, &ev, sdev->seat->mon->data); } } else { /* Unknown device; maybe it switched into a known seat? Try @@ -718,9 +701,7 @@ static void monitor_udev_change(struct uterm_monitor *mon, } } -static void monitor_udev_event(struct ev_fd *fd, - int mask, - void *data) +static void monitor_udev_event(struct ev_fd *fd, int mask, void *data) { struct uterm_monitor *mon = data; struct udev_device *dev; @@ -762,10 +743,8 @@ static void monitor_udev_event(struct ev_fd *fd, } SHL_EXPORT -int uterm_monitor_new(struct uterm_monitor **out, - struct ev_eloop *eloop, - uterm_monitor_cb cb, - void *data) +int uterm_monitor_new(struct uterm_monitor **out, struct ev_eloop *eloop, uterm_monitor_cb cb, + void *data) { struct uterm_monitor *mon; int ret, ufd, set; @@ -801,8 +780,7 @@ int uterm_monitor_new(struct uterm_monitor **out, goto err_udev; } - ret = udev_monitor_filter_add_match_subsystem_devtype(mon->umon, - "drm", "drm_minor"); + ret = udev_monitor_filter_add_match_subsystem_devtype(mon->umon, "drm", "drm_minor"); if (ret) { errno = -ret; log_err("cannot add udev filter (%d): %m", ret); @@ -810,8 +788,7 @@ int uterm_monitor_new(struct uterm_monitor **out, goto err_umon; } - ret = udev_monitor_filter_add_match_subsystem_devtype(mon->umon, - "graphics", NULL); + ret = udev_monitor_filter_add_match_subsystem_devtype(mon->umon, "graphics", NULL); if (ret) { errno = -ret; log_err("cannot add udev filter (%d): %m", ret); @@ -819,8 +796,7 @@ int uterm_monitor_new(struct uterm_monitor **out, goto err_umon; } - ret = udev_monitor_filter_add_match_subsystem_devtype(mon->umon, - "input", NULL); + ret = udev_monitor_filter_add_match_subsystem_devtype(mon->umon, "input", NULL); if (ret) { errno = -ret; log_err("cannot add udev filter (%d): %m", ret); @@ -858,8 +834,7 @@ int uterm_monitor_new(struct uterm_monitor **out, goto err_umon; } - ret = ev_eloop_new_fd(mon->eloop, &mon->umon_fd, ufd, EV_READABLE, - monitor_udev_event, mon); + ret = ev_eloop_new_fd(mon->eloop, &mon->umon_fd, ufd, EV_READABLE, monitor_udev_event, mon); if (ret) goto err_umon; @@ -896,9 +871,7 @@ void uterm_monitor_unref(struct uterm_monitor *mon) return; while (mon->seats.next != &mon->seats) { - seat = shl_dlist_entry(mon->seats.next, - struct uterm_monitor_seat, - list); + seat = shl_dlist_entry(mon->seats.next, struct uterm_monitor_seat, list); monitor_free_seat(seat); } @@ -957,7 +930,8 @@ void uterm_monitor_scan(struct uterm_monitor *mon) goto out_enum; } - udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) { + udev_list_entry_foreach(entry, udev_enumerate_get_list_entry(e)) + { path = udev_list_entry_get_name(entry); if (!path) { log_debug("udev device without syspath"); diff --git a/src/uterm_monitor.h b/src/uterm_monitor.h index caf70c3a..d201afac 100644 --- a/src/uterm_monitor.h +++ b/src/uterm_monitor.h @@ -56,9 +56,9 @@ enum uterm_monitor_dev_type { }; enum uterm_monitor_dev_flag { - UTERM_MONITOR_DRM_BACKED = 0x01, - UTERM_MONITOR_PRIMARY = 0x02, - UTERM_MONITOR_AUX = 0x04, + UTERM_MONITOR_DRM_BACKED = 0x01, + UTERM_MONITOR_PRIMARY = 0x02, + UTERM_MONITOR_AUX = 0x04, }; struct uterm_monitor_event { @@ -75,12 +75,11 @@ struct uterm_monitor_event { void *dev_data; }; -typedef void (*uterm_monitor_cb) (struct uterm_monitor *mon, - struct uterm_monitor_event *event, - void *data); +typedef void (*uterm_monitor_cb)(struct uterm_monitor *mon, struct uterm_monitor_event *event, + void *data); -int uterm_monitor_new(struct uterm_monitor **out, struct ev_eloop *eloop, - uterm_monitor_cb cb, void *data); +int uterm_monitor_new(struct uterm_monitor **out, struct ev_eloop *eloop, uterm_monitor_cb cb, + void *data); void uterm_monitor_ref(struct uterm_monitor *mon); void uterm_monitor_unref(struct uterm_monitor *mon); void uterm_monitor_scan(struct uterm_monitor *mon); diff --git a/src/uterm_systemd.c b/src/uterm_systemd.c index c316bedd..25c99046 100644 --- a/src/uterm_systemd.c +++ b/src/uterm_systemd.c @@ -56,8 +56,8 @@ int uterm_sd_new(struct uterm_sd **out) ret = sd_booted(); if (ret < 0) { - log_warning("cannot determine whether system booted with systemd (%d): %s", - ret, strerror(-ret)); + log_warning("cannot determine whether system booted with systemd (%d): %s", ret, + strerror(-ret)); return -EOPNOTSUPP; } else if (!ret) { log_info("system not booted with systemd, disabling multi-seat support"); @@ -73,8 +73,7 @@ int uterm_sd_new(struct uterm_sd **out) ret = sd_login_monitor_new("seat", &sd->mon); if (ret) { - log_err("cannot create systemd login monitor (%d): %s", - ret, strerror(-ret)); + log_err("cannot create systemd login monitor (%d): %s", ret, strerror(-ret)); ret = -EFAULT; goto err_free; } @@ -122,8 +121,7 @@ int uterm_sd_get_seats(struct uterm_sd *sd, char ***seats) ret = sd_get_seats(&s); if (ret < 0) { - log_warning("cannot read seat information from systemd: %d", - ret); + log_warning("cannot read seat information from systemd: %d", ret); return -EFAULT; } diff --git a/src/uterm_systemd_internal.h b/src/uterm_systemd_internal.h index c3a1fd44..356298ce 100644 --- a/src/uterm_systemd_internal.h +++ b/src/uterm_systemd_internal.h @@ -52,18 +52,14 @@ static inline int uterm_sd_new(struct uterm_sd **out) return -EOPNOTSUPP; } -static inline void uterm_sd_free(struct uterm_sd *sd) -{ -} +static inline void uterm_sd_free(struct uterm_sd *sd) {} static inline int uterm_sd_get_fd(struct uterm_sd *sd) { return -1; } -static inline void uterm_sd_flush(struct uterm_sd *sd) -{ -} +static inline void uterm_sd_flush(struct uterm_sd *sd) {} static inline int uterm_sd_get_seats(struct uterm_sd *sd, char ***seats) { diff --git a/src/uterm_video.c b/src/uterm_video.c index 68ca9743..cb9100df 100644 --- a/src/uterm_video.c +++ b/src/uterm_video.c @@ -35,11 +35,11 @@ #include #include #include "eloop.h" -#include "shl_module.h" #include "shl_dlist.h" #include "shl_hook.h" #include "shl_log.h" #include "shl_misc.h" +#include "shl_module.h" #include "shl_register.h" #include "uterm_video.h" #include "uterm_video_internal.h" @@ -48,7 +48,6 @@ static struct shl_register video_reg = SHL_REGISTER_INIT(video_reg); - static inline void uterm_video_destroy(void *data) { const struct uterm_video_module *ops = data; @@ -195,8 +194,7 @@ int display_schedule_vblank_timer(struct uterm_display *disp) return 0; } -void display_set_vblank_timer(struct uterm_display *disp, - unsigned int msecs) +void display_set_vblank_timer(struct uterm_display *disp, unsigned int msecs) { if (msecs >= 1000) msecs = 999; @@ -206,9 +204,7 @@ void display_set_vblank_timer(struct uterm_display *disp, disp->vblank_spec.it_value.tv_nsec = msecs * 1000 * 1000; } -static void display_vblank_timer_event(struct ev_timer *timer, - uint64_t expirations, - void *data) +static void display_vblank_timer_event(struct ev_timer *timer, uint64_t expirations, void *data) { struct uterm_display *disp = data; @@ -240,8 +236,7 @@ int display_new(struct uterm_display **out, const struct display_ops *ops) disp->vblank_spec.it_value.tv_nsec = 15 * 1000 * 1000; - ret = ev_timer_new(&disp->vblank_timer, NULL, - display_vblank_timer_event, disp, NULL, NULL); + ret = ev_timer_new(&disp->vblank_timer, NULL, display_vblank_timer_event, disp, NULL, NULL); if (ret) goto err_hook; @@ -281,8 +276,7 @@ void uterm_display_unref(struct uterm_display *disp) log_info("free display %p", disp); while (!shl_dlist_empty(&disp->modes)) { - mode = shl_dlist_entry(disp->modes.prev, struct uterm_mode, - list); + mode = shl_dlist_entry(disp->modes.prev, struct uterm_mode, list); uterm_mode_unbind(mode); } @@ -350,8 +344,7 @@ struct uterm_display *uterm_display_next(struct uterm_display *disp) } SHL_EXPORT -int uterm_display_register_cb(struct uterm_display *disp, uterm_display_cb cb, - void *data) +int uterm_display_register_cb(struct uterm_display *disp, uterm_display_cb cb, void *data) { if (!disp) return -EINVAL; @@ -360,8 +353,7 @@ int uterm_display_register_cb(struct uterm_display *disp, uterm_display_cb cb, } SHL_EXPORT -void uterm_display_unregister_cb(struct uterm_display *disp, - uterm_display_cb cb, void *data) +void uterm_display_unregister_cb(struct uterm_display *disp, uterm_display_cb cb, void *data) { if (!disp) return; @@ -428,8 +420,7 @@ int uterm_display_get_state(struct uterm_display *disp) SHL_EXPORT int uterm_display_activate(struct uterm_display *disp, struct uterm_mode *mode) { - if (!disp || !disp->video || display_is_online(disp) || - !video_is_awake(disp->video)) + if (!disp || !disp->video || display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; if (!mode) @@ -475,15 +466,13 @@ int uterm_display_use(struct uterm_display *disp, bool *opengl) } SHL_EXPORT -int uterm_display_get_buffers(struct uterm_display *disp, - struct uterm_video_buffer *buffer, +int uterm_display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, unsigned int formats) { if (!disp || !display_is_online(disp) || !buffer) return -EINVAL; - return VIDEO_CALL(disp->ops->get_buffers, -EOPNOTSUPP, disp, buffer, - formats); + return VIDEO_CALL(disp->ops->get_buffers, -EOPNOTSUPP, disp, buffer, formats); } SHL_EXPORT @@ -505,23 +494,18 @@ bool uterm_display_is_swapping(struct uterm_display *disp) } SHL_EXPORT -int uterm_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height) +int uterm_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, unsigned int x, + unsigned int y, unsigned int width, unsigned int height) { if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; - return VIDEO_CALL(disp->ops->fill, -EOPNOTSUPP, disp, r, g, b, x, y, - width, height); + return VIDEO_CALL(disp->ops->fill, -EOPNOTSUPP, disp, r, g, b, x, y, width, height); } SHL_EXPORT -int uterm_display_fake_blend(struct uterm_display *disp, - const struct uterm_video_buffer *buf, - unsigned int x, unsigned int y, - uint8_t fr, uint8_t fg, uint8_t fb, +int uterm_display_fake_blend(struct uterm_display *disp, const struct uterm_video_buffer *buf, + unsigned int x, unsigned int y, uint8_t fr, uint8_t fg, uint8_t fb, uint8_t br, uint8_t bg, uint8_t bb) { struct uterm_video_blend_req req; @@ -544,8 +528,7 @@ int uterm_display_fake_blend(struct uterm_display *disp, } SHL_EXPORT -int uterm_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, +int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num) { if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) @@ -555,9 +538,8 @@ int uterm_display_fake_blendv(struct uterm_display *disp, } SHL_EXPORT -int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, - const char *node, const char *backend, - unsigned int desired_width, unsigned int desired_height) +int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, const char *node, + const char *backend, unsigned int desired_width, unsigned int desired_height) { struct shl_register_record *record; const char *name = backend ? backend : ""; @@ -635,8 +617,7 @@ void uterm_video_unref(struct uterm_video *video) log_info("free device %p", video); while (!shl_dlist_empty(&video->displays)) { - disp = shl_dlist_entry(video->displays.prev, - struct uterm_display, list); + disp = shl_dlist_entry(video->displays.prev, struct uterm_display, list); uterm_display_unbind(disp); } @@ -661,13 +642,11 @@ struct uterm_display *uterm_video_get_displays(struct uterm_video *video) if (!video || shl_dlist_empty(&video->displays)) return NULL; - return shl_dlist_entry(video->displays.next, struct uterm_display, - list); + return shl_dlist_entry(video->displays.next, struct uterm_display, list); } SHL_EXPORT -int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb, - void *data) +int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb, void *data) { if (!video || !cb) return -EINVAL; @@ -676,8 +655,7 @@ int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb, } SHL_EXPORT -void uterm_video_unregister_cb(struct uterm_video *video, uterm_video_cb cb, - void *data) +void uterm_video_unregister_cb(struct uterm_video *video, uterm_video_cb cb, void *data) { if (!video || !cb) return; @@ -704,11 +682,9 @@ int uterm_video_register(const struct uterm_video_module *ops) log_debug("register video backend %s", ops->name); - ret = shl_register_add_cb(&video_reg, ops->name, (void*)ops, - uterm_video_destroy); + ret = shl_register_add_cb(&video_reg, ops->name, (void *)ops, uterm_video_destroy); if (ret) { - log_error("cannot register video backend %s: %d", ops->name, - ret); + log_error("cannot register video backend %s: %d", ops->name, ret); return ret; } diff --git a/src/uterm_video.h b/src/uterm_video.h index ec451048..4da496bb 100644 --- a/src/uterm_video.h +++ b/src/uterm_video.h @@ -97,10 +97,10 @@ struct uterm_display_event { }; enum uterm_video_format { - UTERM_FORMAT_GREY = 0x01, - UTERM_FORMAT_XRGB32 = 0x02, - UTERM_FORMAT_RGB16 = 0x04, - UTERM_FORMAT_RGB24 = 0x08, + UTERM_FORMAT_GREY = 0x01, + UTERM_FORMAT_XRGB32 = 0x02, + UTERM_FORMAT_RGB16 = 0x04, + UTERM_FORMAT_RGB24 = 0x08, }; struct uterm_video_buffer { @@ -123,12 +123,10 @@ struct uterm_video_blend_req { uint8_t bb; }; -typedef void (*uterm_video_cb) (struct uterm_video *video, - struct uterm_video_hotplug *arg, - void *data); -typedef void (*uterm_display_cb) (struct uterm_display *disp, - struct uterm_display_event *arg, - void *data); +typedef void (*uterm_video_cb)(struct uterm_video *video, struct uterm_video_hotplug *arg, + void *data); +typedef void (*uterm_display_cb)(struct uterm_display *disp, struct uterm_display_event *arg, + void *data); /* misc */ @@ -152,10 +150,8 @@ bool uterm_display_is_drm(struct uterm_display *disp); const char *uterm_display_backend_name(struct uterm_display *disp); struct uterm_display *uterm_display_next(struct uterm_display *disp); -int uterm_display_register_cb(struct uterm_display *disp, uterm_display_cb cb, - void *data); -void uterm_display_unregister_cb(struct uterm_display *disp, - uterm_display_cb cb, void *data); +int uterm_display_register_cb(struct uterm_display *disp, uterm_display_cb cb, void *data); +void uterm_display_unregister_cb(struct uterm_display *disp, uterm_display_cb cb, void *data); struct uterm_mode *uterm_display_get_modes(struct uterm_display *disp); struct uterm_mode *uterm_display_get_current(struct uterm_display *disp); @@ -169,39 +165,30 @@ int uterm_display_set_dpms(struct uterm_display *disp, int state); int uterm_display_get_dpms(const struct uterm_display *disp); int uterm_display_use(struct uterm_display *disp, bool *opengl); -int uterm_display_get_buffers(struct uterm_display *disp, - struct uterm_video_buffer *buffer, +int uterm_display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, unsigned int formats); int uterm_display_swap(struct uterm_display *disp, bool immediate); bool uterm_display_is_swapping(struct uterm_display *disp); -int uterm_display_fill(struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, - unsigned int x, unsigned int y, - unsigned int width, unsigned int height); -int uterm_display_fake_blend(struct uterm_display *disp, - const struct uterm_video_buffer *buf, - unsigned int x, unsigned int y, - uint8_t fr, uint8_t fg, uint8_t fb, +int uterm_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, unsigned int x, + unsigned int y, unsigned int width, unsigned int height); +int uterm_display_fake_blend(struct uterm_display *disp, const struct uterm_video_buffer *buf, + unsigned int x, unsigned int y, uint8_t fr, uint8_t fg, uint8_t fb, uint8_t br, uint8_t bg, uint8_t bb); -int uterm_display_fake_blendv(struct uterm_display *disp, - const struct uterm_video_blend_req *req, +int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num); /* video interface */ -int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, - const char *node, const char *backend, - unsigned int desired_width, unsigned int desired_height); +int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, const char *node, + const char *backend, unsigned int desired_width, unsigned int desired_height); void uterm_video_ref(struct uterm_video *video); void uterm_video_unref(struct uterm_video *video); void uterm_video_segfault(struct uterm_video *video); struct uterm_display *uterm_video_get_displays(struct uterm_video *video); -int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb, - void *data); -void uterm_video_unregister_cb(struct uterm_video *video, uterm_video_cb cb, - void *data); +int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb, void *data); +void uterm_video_unregister_cb(struct uterm_video *video, uterm_video_cb cb, void *data); int uterm_video_register(const struct uterm_video_module *ops); void uterm_video_unregister(const char *name); @@ -213,7 +200,8 @@ void uterm_video_poll(struct uterm_video *video); #ifdef BUILD_ENABLE_VIDEO_DRM2D extern struct uterm_video_module drm2d_module; -static inline void uterm_register_drm2d(void) { +static inline void uterm_register_drm2d(void) +{ uterm_video_register(&drm2d_module); } @@ -224,7 +212,8 @@ static inline void uterm_register_drm2d(void) {} #ifdef BUILD_ENABLE_VIDEO_FBDEV extern struct uterm_video_module fbdev_module; -static inline void uterm_register_fbdev(void) { +static inline void uterm_register_fbdev(void) +{ uterm_video_register(&fbdev_module); } #else diff --git a/src/uterm_video_internal.h b/src/uterm_video_internal.h index 020b7bbd..da355d02 100644 --- a/src/uterm_video_internal.h +++ b/src/uterm_video_internal.h @@ -40,39 +40,36 @@ /* backend-operations */ struct mode_ops { - int (*init) (struct uterm_mode *mode); - void (*destroy) (struct uterm_mode *mode); - const char *(*get_name) (const struct uterm_mode *mode); - unsigned int (*get_width) (const struct uterm_mode *mode); - unsigned int (*get_height) (const struct uterm_mode *mode); + int (*init)(struct uterm_mode *mode); + void (*destroy)(struct uterm_mode *mode); + const char *(*get_name)(const struct uterm_mode *mode); + unsigned int (*get_width)(const struct uterm_mode *mode); + unsigned int (*get_height)(const struct uterm_mode *mode); }; struct display_ops { - int (*init) (struct uterm_display *display); - void (*destroy) (struct uterm_display *display); - int (*activate) (struct uterm_display *disp, struct uterm_mode *mode); - void (*deactivate) (struct uterm_display *disp); - int (*set_dpms) (struct uterm_display *disp, int state); - int (*use) (struct uterm_display *disp, bool *opengl); - int (*get_buffers) (struct uterm_display *disp, - struct uterm_video_buffer *buffer, - unsigned int formats); - int (*swap) (struct uterm_display *disp, bool immediate); - int (*fake_blendv) (struct uterm_display *disp, - const struct uterm_video_blend_req *req, - size_t num); - int (*fill) (struct uterm_display *disp, - uint8_t r, uint8_t g, uint8_t b, unsigned int x, - unsigned int y, unsigned int width, unsigned int height); + int (*init)(struct uterm_display *display); + void (*destroy)(struct uterm_display *display); + int (*activate)(struct uterm_display *disp, struct uterm_mode *mode); + void (*deactivate)(struct uterm_display *disp); + int (*set_dpms)(struct uterm_display *disp, int state); + int (*use)(struct uterm_display *disp, bool *opengl); + int (*get_buffers)(struct uterm_display *disp, struct uterm_video_buffer *buffer, + unsigned int formats); + int (*swap)(struct uterm_display *disp, bool immediate); + int (*fake_blendv)(struct uterm_display *disp, const struct uterm_video_blend_req *req, + size_t num); + int (*fill)(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, unsigned int x, + unsigned int y, unsigned int width, unsigned int height); }; struct video_ops { - int (*init) (struct uterm_video *video, const char *node); - void (*destroy) (struct uterm_video *video); - void (*segfault) (struct uterm_video *video); - int (*poll) (struct uterm_video *video); - void (*sleep) (struct uterm_video *video); - int (*wake_up) (struct uterm_video *video); + int (*init)(struct uterm_video *video, const char *node); + void (*destroy)(struct uterm_video *video); + void (*segfault)(struct uterm_video *video); + int (*poll)(struct uterm_video *video); + void (*sleep)(struct uterm_video *video); + int (*wake_up)(struct uterm_video *video); }; struct uterm_video_module { @@ -100,13 +97,13 @@ void uterm_mode_unbind(struct uterm_mode *mode); /* uterm_display */ -#define DISPLAY_ONLINE 0x01 -#define DISPLAY_VSYNC 0x02 -#define DISPLAY_AVAILABLE 0x04 -#define DISPLAY_OPEN 0x08 -#define DISPLAY_DBUF 0x10 -#define DISPLAY_DITHERING 0x20 -#define DISPLAY_PFLIP 0x40 +#define DISPLAY_ONLINE 0x01 +#define DISPLAY_VSYNC 0x02 +#define DISPLAY_AVAILABLE 0x04 +#define DISPLAY_OPEN 0x08 +#define DISPLAY_DBUF 0x10 +#define DISPLAY_DITHERING 0x20 +#define DISPLAY_PFLIP 0x40 struct uterm_display { struct shl_dlist list; @@ -131,16 +128,16 @@ struct uterm_display { }; int display_new(struct uterm_display **out, const struct display_ops *ops); -void display_set_vblank_timer(struct uterm_display *disp, - unsigned int msecs); +void display_set_vblank_timer(struct uterm_display *disp, unsigned int msecs); int display_schedule_vblank_timer(struct uterm_display *disp); int uterm_display_bind(struct uterm_display *disp, struct uterm_video *video); void uterm_display_unbind(struct uterm_display *disp); -#define DISPLAY_CB(disp, act) shl_hook_call((disp)->hook, (disp), \ - &(struct uterm_display_event){ \ - .action = (act), \ - }) +#define DISPLAY_CB(disp, act) \ + shl_hook_call((disp)->hook, (disp), \ + &(struct uterm_display_event){ \ + .action = (act), \ + }) static inline bool display_is_online(const struct uterm_display *disp) { @@ -149,8 +146,8 @@ static inline bool display_is_online(const struct uterm_display *disp) /* uterm_video */ -#define VIDEO_AWAKE 0x01 -#define VIDEO_HOTPLUG 0x02 +#define VIDEO_AWAKE 0x01 +#define VIDEO_HOTPLUG 0x02 struct uterm_video { unsigned long ref; @@ -177,9 +174,10 @@ static inline bool video_need_hotplug(const struct uterm_video *video) return video->flags & VIDEO_HOTPLUG; } -#define VIDEO_CB(vid, disp, act) shl_hook_call((vid)->hook, (vid), \ - &(struct uterm_video_hotplug){ \ - .display = (disp), \ - .action = (act), \ - }) +#define VIDEO_CB(vid, disp, act) \ + shl_hook_call((vid)->hook, (vid), \ + &(struct uterm_video_hotplug){ \ + .display = (disp), \ + .action = (act), \ + }) #endif /* UTERM_VIDEO_INTERNAL_H */ diff --git a/src/uterm_vt.c b/src/uterm_vt.c index 1760a429..42ef06e0 100644 --- a/src/uterm_vt.c +++ b/src/uterm_vt.c @@ -85,8 +85,7 @@ struct uterm_vt_master { struct shl_dlist vts; }; -static int vt_call(struct uterm_vt *vt, unsigned int event, int target, - bool force) +static int vt_call(struct uterm_vt *vt, unsigned int event, int target, bool force) { int ret; struct uterm_vt_event ev; @@ -106,8 +105,7 @@ static int vt_call(struct uterm_vt *vt, unsigned int event, int target, ret = vt->cb(vt, &ev, vt->data); if (ret) - log_warning("vt event handler returned %d instead of 0 on activation", - ret); + log_warning("vt event handler returned %d instead of 0 on activation", ret); break; case UTERM_VT_DEACTIVATE: if (!vt->active) @@ -118,7 +116,8 @@ static int vt_call(struct uterm_vt *vt, unsigned int event, int target, ret = vt->cb(vt, &ev, vt->data); if (ret) { if (force) - log_warning("vt event handler returned %d instead of 0 on forced deactivation", + log_warning("vt event handler returned %d instead of 0 on forced " + "deactivation", ret); else return ret; @@ -198,11 +197,9 @@ static void real_sig_enter(struct uterm_vt *vt, struct signalfd_siginfo *info) if (vt->real_delayed) { vt->real_delayed = false; - ev_eloop_unregister_idle_cb(vt->vtm->eloop, real_delayed, vt, - EV_NORMAL); + ev_eloop_unregister_idle_cb(vt->vtm->eloop, real_delayed, vt, EV_NORMAL); } else if (vt->active) { - log_warning("activating VT %d even though it's already active", - vt->real_num); + log_warning("activating VT %d even though it's already active", vt->real_num); } else { uterm_input_wake_up(vt->input); } @@ -239,12 +236,10 @@ static void real_sig_leave(struct uterm_vt *vt, struct signalfd_siginfo *info) if (vt->real_delayed) { vt->real_delayed = false; - ev_eloop_unregister_idle_cb(vt->vtm->eloop, real_delayed, vt, - EV_NORMAL); + ev_eloop_unregister_idle_cb(vt->vtm->eloop, real_delayed, vt, EV_NORMAL); uterm_input_sleep(vt->input); } else if (!active) { - log_warning("deactivating VT %d even though it's not active", - vt->real_num); + log_warning("deactivating VT %d even though it's not active", vt->real_num); } else { uterm_input_sleep(vt->input); } @@ -351,8 +346,8 @@ static int real_open(struct uterm_vt *vt, const char *vt_name) if (ret) return ret; - ret = ev_eloop_new_fd(vt->vtm->eloop, &vt->real_efd, vt->real_fd, - EV_READABLE, real_vt_input, vt); + ret = ev_eloop_new_fd(vt->vtm->eloop, &vt->real_efd, vt->real_fd, EV_READABLE, + real_vt_input, vt); if (ret) goto err_fd; @@ -409,8 +404,7 @@ static int real_open(struct uterm_vt *vt, const char *vt_name) log_warning("cannot set VT KBMODE to K_OFF (%d): %m", errno); if (vts.v_active == vt->real_num) { - ret = ev_eloop_register_idle_cb(vt->vtm->eloop, real_delayed, - vt, EV_NORMAL); + ret = ev_eloop_register_idle_cb(vt->vtm->eloop, real_delayed, vt, EV_NORMAL); if (ret) { log_error("cannot register idle cb for VT switch"); goto err_kbdmode; @@ -424,20 +418,17 @@ static int real_open(struct uterm_vt *vt, const char *vt_name) err_kbdmode: err = ioctl(vt->real_fd, KDSKBMODE, vt->real_kbmode); if (err) - log_error("cannot reset VT KBMODE to %d (%d): %m", - vt->real_kbmode, errno); + log_error("cannot reset VT KBMODE to %d (%d): %m", vt->real_kbmode, errno); err_setmode: memset(&mode, 0, sizeof(mode)); mode.mode = VT_AUTO; err = ioctl(vt->real_fd, VT_SETMODE, &mode); if (err) - log_warning("cannot reset VT %d to VT_AUTO mode (%d): %m", - vt->real_num, errno); + log_warning("cannot reset VT %d to VT_AUTO mode (%d): %m", vt->real_num, errno); err_text: err = ioctl(vt->real_fd, KDSETMODE, KD_TEXT); if (err) - log_warning("cannot reset VT %d to text-mode (%d): %m", - vt->real_num, errno); + log_warning("cannot reset VT %d to text-mode (%d): %m", vt->real_num, errno); err_eloop: ev_eloop_rm_fd(vt->real_efd); vt->real_efd = NULL; @@ -455,8 +446,7 @@ static void real_close(struct uterm_vt *vt) if (vt->real_delayed) { vt->real_delayed = false; - ev_eloop_unregister_idle_cb(vt->vtm->eloop, real_delayed, vt, - EV_NORMAL); + ev_eloop_unregister_idle_cb(vt->vtm->eloop, real_delayed, vt, EV_NORMAL); uterm_input_sleep(vt->input); } else if (vt->active) { uterm_input_sleep(vt->input); @@ -465,20 +455,17 @@ static void real_close(struct uterm_vt *vt) ret = ioctl(vt->real_fd, KDSKBMODE, vt->real_kbmode); if (ret && !vt->hup) - log_error("cannot reset VT KBMODE to %d (%d): %m", - vt->real_kbmode, errno); + log_error("cannot reset VT KBMODE to %d (%d): %m", vt->real_kbmode, errno); memset(&mode, 0, sizeof(mode)); mode.mode = VT_AUTO; ret = ioctl(vt->real_fd, VT_SETMODE, &mode); if (ret && !vt->hup) - log_warning("cannot reset VT %d to VT_AUTO mode (%d): %m", - vt->real_num, errno); + log_warning("cannot reset VT %d to VT_AUTO mode (%d): %m", vt->real_num, errno); ret = ioctl(vt->real_fd, KDSETMODE, KD_TEXT); if (ret && !vt->hup) - log_warning("cannot reset VT %d to text-mode (%d): %m", - vt->real_num, errno); + log_warning("cannot reset VT %d to text-mode (%d): %m", vt->real_num, errno); ev_eloop_rm_fd(vt->real_efd); vt->real_efd = NULL; @@ -510,8 +497,7 @@ static int real_activate(struct uterm_vt *vt) return 0; if (vt->active) - log_warning("activating VT %d even though it's already active", - vt->real_num); + log_warning("activating VT %d even though it's already active", vt->real_num); vt->real_target = -1; ret = ioctl(vt->real_fd, VT_ACTIVATE, vt->real_num); @@ -556,20 +542,18 @@ static int real_deactivate(struct uterm_vt *vt) return 0; if (!vt->active) - log_warning("deactivating VT %d even though it's not active", - vt->real_num); + log_warning("deactivating VT %d even though it's not active", vt->real_num); vt->real_target = vt->real_saved_num; vt->real_target_time = time(NULL); ret = ioctl(vt->real_fd, VT_ACTIVATE, vt->real_saved_num); if (ret) { - log_warn("cannot leave VT %d to VT %d (%d): %m", vt->real_num, - vt->real_saved_num, errno); + log_warn("cannot leave VT %d to VT %d (%d): %m", vt->real_num, vt->real_saved_num, + errno); return -EFAULT; } - log_debug("leaving VT %d on demand to VT %d", vt->real_num, - vt->real_saved_num); + log_debug("leaving VT %d on demand to VT %d", vt->real_num, vt->real_saved_num); return -EINPROGRESS; } @@ -609,15 +593,13 @@ static void real_input(struct uterm_vt *vt, struct uterm_input_key_event *ev) if (!id || id == vt->real_num) return; - log_debug("deactivating VT %d to %d due to user input", vt->real_num, - id); + log_debug("deactivating VT %d to %d due to user input", vt->real_num, id); vt->real_target = id; vt->real_target_time = time(NULL); ret = ioctl(vt->real_fd, VT_ACTIVATE, id); if (ret) { - log_warn("cannot leave VT %d to %d (%d): %m", vt->real_num, - id, errno); + log_warn("cannot leave VT %d to %d (%d): %m", vt->real_num, id, errno); return; } } @@ -646,16 +628,13 @@ static void real_retry(struct uterm_vt *vt) } if (!vt->active) - log_warning("leaving VT %d even though it's not active", - vt->real_num); + log_warning("leaving VT %d even though it's not active", vt->real_num); - log_debug("deactivating VT %d to %d (retry)", vt->real_num, - vt->real_target); + log_debug("deactivating VT %d to %d (retry)", vt->real_num, vt->real_target); ret = ioctl(vt->real_fd, VT_ACTIVATE, vt->real_target); if (ret) { - log_warn("cannot leave VT %d to %d (%d): %m", vt->real_num, - vt->real_target, errno); + log_warn("cannot leave VT %d to %d (%d): %m", vt->real_num, vt->real_target, errno); return; } } @@ -748,9 +727,7 @@ static void fake_close(struct uterm_vt *vt) * handling. */ -static void vt_input(struct uterm_input *input, - struct uterm_input_key_event *ev, - void *data) +static void vt_input(struct uterm_input *input, struct uterm_input_key_event *ev, void *data) { struct uterm_vt *vt = data; @@ -760,8 +737,7 @@ static void vt_input(struct uterm_input *input, fake_input(vt, ev); } -static void vt_sigusr1(struct ev_eloop *eloop, struct signalfd_siginfo *info, - void *data) +static void vt_sigusr1(struct ev_eloop *eloop, struct signalfd_siginfo *info, void *data) { struct uterm_vt *vt = data; @@ -769,8 +745,7 @@ static void vt_sigusr1(struct ev_eloop *eloop, struct signalfd_siginfo *info, real_sig_enter(vt, info); } -static void vt_sigusr2(struct ev_eloop *eloop, struct signalfd_siginfo *info, - void *data) +static void vt_sigusr2(struct ev_eloop *eloop, struct signalfd_siginfo *info, void *data) { struct uterm_vt *vt = data; @@ -801,8 +776,7 @@ static int seat_find_vt(const char *seat, char **out) /* First check whether our controlling terminal is a real VT. If * it is, use it but verify very hard that it really is. */ ret = fstat(STDERR_FILENO, &st); - if (!ret && major(st.st_rdev) == TTY_MAJOR && - minor(st.st_rdev) > 0) { + if (!ret && major(st.st_rdev) == TTY_MAJOR && minor(st.st_rdev) > 0) { ret = asprintf(&vt, "/dev/tty%d", minor(st.st_rdev)); if (ret < 0) return -ENOMEM; @@ -820,11 +794,9 @@ static int seat_find_vt(const char *seat, char **out) fd = open(def_vt, O_NONBLOCK | O_NOCTTY | O_CLOEXEC); if (fd < 0) { err1 = errno; - fd = open("/dev/tty1", - O_NONBLOCK | O_NOCTTY | O_CLOEXEC); + fd = open("/dev/tty1", O_NONBLOCK | O_NOCTTY | O_CLOEXEC); if (fd < 0) { - log_error("cannot find parent tty (%d, %d): %m", - err1, errno); + log_error("cannot find parent tty (%d, %d): %m", err1, errno); return -EFAULT; } } @@ -850,14 +822,9 @@ static int seat_find_vt(const char *seat, char **out) } SHL_EXPORT -int uterm_vt_allocate(struct uterm_vt_master *vtm, - struct uterm_vt **out, - unsigned int allowed_types, - const char *seat, - struct uterm_input *input, - const char *vt_name, - uterm_vt_cb cb, - void *data) +int uterm_vt_allocate(struct uterm_vt_master *vtm, struct uterm_vt **out, + unsigned int allowed_types, const char *seat, struct uterm_input *input, + const char *vt_name, uterm_vt_cb cb, void *data) { struct uterm_vt *vt; int ret; @@ -1046,8 +1013,7 @@ unsigned int uterm_vt_get_num(struct uterm_vt *vt) } SHL_EXPORT -int uterm_vt_master_new(struct uterm_vt_master **out, - struct ev_eloop *eloop) +int uterm_vt_master_new(struct uterm_vt_master **out, struct ev_eloop *eloop) { struct uterm_vt_master *vtm; @@ -1087,9 +1053,7 @@ void uterm_vt_master_unref(struct uterm_vt_master *vtm) return; while (vtm->vts.next != &vtm->vts) { - vt = shl_dlist_entry(vtm->vts.next, - struct uterm_vt, - list); + vt = shl_dlist_entry(vtm->vts.next, struct uterm_vt, list); uterm_vt_deallocate(vt); } @@ -1111,7 +1075,8 @@ int uterm_vt_master_activate_all(struct uterm_vt_master *vtm) if (!vtm) return -EINVAL; - shl_dlist_for_each(iter, &vtm->vts) { + shl_dlist_for_each(iter, &vtm->vts) + { vt = shl_dlist_entry(iter, struct uterm_vt, list); ret = uterm_vt_activate(vt); if (ret == -EINPROGRESS) @@ -1140,7 +1105,8 @@ int uterm_vt_master_deactivate_all(struct uterm_vt_master *vtm) if (!vtm) return -EINVAL; - shl_dlist_for_each(iter, &vtm->vts) { + shl_dlist_for_each(iter, &vtm->vts) + { vt = shl_dlist_entry(iter, struct uterm_vt, list); ret = uterm_vt_deactivate(vt); if (ret == -EINPROGRESS) diff --git a/src/uterm_vt.h b/src/uterm_vt.h index 9418bb73..c73fd1dc 100644 --- a/src/uterm_vt.h +++ b/src/uterm_vt.h @@ -62,21 +62,18 @@ enum uterm_vt_type { UTERM_VT_FAKE = 0x02, }; -typedef int (*uterm_vt_cb) (struct uterm_vt *vt, struct uterm_vt_event *ev, - void *data); +typedef int (*uterm_vt_cb)(struct uterm_vt *vt, struct uterm_vt_event *ev, void *data); -int uterm_vt_master_new(struct uterm_vt_master **out, - struct ev_eloop *eloop); +int uterm_vt_master_new(struct uterm_vt_master **out, struct ev_eloop *eloop); void uterm_vt_master_ref(struct uterm_vt_master *vtm); void uterm_vt_master_unref(struct uterm_vt_master *vtm); int uterm_vt_master_activate_all(struct uterm_vt_master *vtm); int uterm_vt_master_deactivate_all(struct uterm_vt_master *vtm); -int uterm_vt_allocate(struct uterm_vt_master *vt, struct uterm_vt **out, - unsigned int allowed_types, - const char *seat, struct uterm_input *input, - const char *vt_name, uterm_vt_cb cb, void *data); +int uterm_vt_allocate(struct uterm_vt_master *vt, struct uterm_vt **out, unsigned int allowed_types, + const char *seat, struct uterm_input *input, const char *vt_name, + uterm_vt_cb cb, void *data); void uterm_vt_deallocate(struct uterm_vt *vt); void uterm_vt_ref(struct uterm_vt *vt); void uterm_vt_unref(struct uterm_vt *vt); From 12526c778f878060e91bc04ea6fd8aec80032b76 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 14:32:05 +0100 Subject: [PATCH 11/31] format tests with clang-format Signed-off-by: Jocelyn Falempe --- tests/test_common.h | 48 ++++++++++------------ tests/test_include.h | 41 +++++++++---------- tests/test_input.c | 44 +++++++------------- tests/test_key.c | 18 ++++----- tests/test_output.c | 28 ++++++------- tests/test_shl.c | 95 ++++++++++++++++++++------------------------ tests/test_vt.c | 13 +++--- 7 files changed, 120 insertions(+), 167 deletions(-) diff --git a/tests/test_common.h b/tests/test_common.h index 34338fc6..33e43946 100644 --- a/tests/test_common.h +++ b/tests/test_common.h @@ -45,22 +45,22 @@ #include /* lower address-space is protected from user-allocation, so this is invalid */ -#define TEST_INVALID_PTR ((void*)0x10) +#define TEST_INVALID_PTR ((void *)0x10) #define UNUSED(x) (void)(x) -#define TEST_DEFINE_CASE(_name) \ - static TCase *test_create_case_##_name(void) \ - { \ - TCase *tc; \ - \ - tc = tcase_create(#_name); \ +#define TEST_DEFINE_CASE(_name) \ + static TCase *test_create_case_##_name(void) \ + { \ + TCase *tc; \ + \ + tc = tcase_create(#_name); #define TEST(_name) tcase_add_test(tc, _name); -#define TEST_END_CASE \ - return tc; \ - } \ +#define TEST_END_CASE \ + return tc; \ + } #define TEST_END NULL @@ -75,7 +75,7 @@ static inline Suite *test_create_suite(const char *name, ...) s = suite_create(name); va_start(list, name); - while ((fn = va_arg(list, TCase *(*)(void)))) + while ((fn = va_arg(list, TCase * (*)(void)))) suite_add_tcase(s, fn()); va_end(list); @@ -97,26 +97,20 @@ static inline int test_run_suite(Suite *s) return ret; } -#define TEST_DEFINE(_suite) \ - int main(int argc, char **argv) \ - { \ - return test_run_suite(_suite); \ +#define TEST_DEFINE(_suite) \ + int main(int argc, char **argv) \ + { \ + return test_run_suite(_suite); \ } #ifndef ck_assert_mem_eq #include -#define ck_assert_mem_eq(_x, _y, _len) \ - ck_assert(memcmp((_x), (_y), (_len)) == 0) -#define ck_assert_mem_ne(_x, _y, _len) \ - ck_assert(memcmp((_x), (_y), (_len)) != 0) -#define ck_assert_mem_lt(_x, _y, _len) \ - ck_assert(memcmp((_x), (_y), (_len)) < 0) -#define ck_assert_mem_le(_x, _y, _len) \ - ck_assert(memcmp((_x), (_y), (_len)) <= 0) -#define ck_assert_mem_gt(_x, _y, _len) \ - ck_assert(memcmp((_x), (_y), (_len)) > 0) -#define ck_assert_mem_ge(_x, _y, _len) \ - ck_assert(memcmp((_x), (_y), (_len)) >= 0) +#define ck_assert_mem_eq(_x, _y, _len) ck_assert(memcmp((_x), (_y), (_len)) == 0) +#define ck_assert_mem_ne(_x, _y, _len) ck_assert(memcmp((_x), (_y), (_len)) != 0) +#define ck_assert_mem_lt(_x, _y, _len) ck_assert(memcmp((_x), (_y), (_len)) < 0) +#define ck_assert_mem_le(_x, _y, _len) ck_assert(memcmp((_x), (_y), (_len)) <= 0) +#define ck_assert_mem_gt(_x, _y, _len) ck_assert(memcmp((_x), (_y), (_len)) > 0) +#define ck_assert_mem_ge(_x, _y, _len) ck_assert(memcmp((_x), (_y), (_len)) >= 0) #endif #endif /* TEST_COMMON_H */ diff --git a/tests/test_include.h b/tests/test_include.h index afbaefba..a3aa5fa1 100644 --- a/tests/test_include.h +++ b/tests/test_include.h @@ -33,10 +33,10 @@ #include "eloop.h" #include "shl_log.h" -#define TEST_HELP \ - "\t-h, --help [off] Print this help and exit\n" \ - "\t-v, --verbose [off] Print verbose messages\n" \ - "\t --debug [off] Enable debug mode\n" \ +#define TEST_HELP \ + "\t-h, --help [off] Print this help and exit\n" \ + "\t-v, --verbose [off] Print verbose messages\n" \ + "\t --debug [off] Enable debug mode\n" \ "\t --silent [off] Suppress notices and warnings\n" static struct { @@ -49,8 +49,7 @@ static struct { static struct conf_ctx *test_ctx; -static int aftercheck_debug(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_debug(struct conf_option *opt, int argc, char **argv, int idx) { /* --debug implies --verbose */ if (test_conf.debug) @@ -59,8 +58,7 @@ static int aftercheck_debug(struct conf_option *opt, int argc, char **argv, return 0; } -static int aftercheck_help(struct conf_option *opt, int argc, char **argv, - int idx) +static int aftercheck_help(struct conf_option *opt, int argc, char **argv, int idx) { /* exit after printing --help information */ if (test_conf.help) { @@ -71,14 +69,14 @@ static int aftercheck_help(struct conf_option *opt, int argc, char **argv, return 0; } -#define TEST_OPTIONS \ - CONF_OPTION_BOOL_FULL('h', "help", aftercheck_help, NULL, NULL, &test_conf.help, false), \ - CONF_OPTION_BOOL('v', "verbose", &test_conf.verbose, false), \ - CONF_OPTION_BOOL_FULL(0, "debug", aftercheck_debug, NULL, NULL, &test_conf.debug, false), \ - CONF_OPTION_BOOL(0, "silent", &test_conf.silent, false) +#define TEST_OPTIONS \ + CONF_OPTION_BOOL_FULL('h', "help", aftercheck_help, NULL, NULL, &test_conf.help, false), \ + CONF_OPTION_BOOL('v', "verbose", &test_conf.verbose, false), \ + CONF_OPTION_BOOL_FULL(0, "debug", aftercheck_debug, NULL, NULL, &test_conf.debug, \ + false), \ + CONF_OPTION_BOOL(0, "silent", &test_conf.silent, false) -static void sig_generic(struct ev_eloop *p, struct signalfd_siginfo *info, - void *data) +static void sig_generic(struct ev_eloop *p, struct signalfd_siginfo *info, void *data) { struct ev_eloop *eloop = data; @@ -86,8 +84,8 @@ static void sig_generic(struct ev_eloop *p, struct signalfd_siginfo *info, log_info("terminating due to caught signal %d", info->ssi_signo); } -static int test_prepare(struct conf_option *opts, size_t len, - int argc, char **argv, struct ev_eloop **out) +static int test_prepare(struct conf_option *opts, size_t len, int argc, char **argv, + struct ev_eloop **out) { int ret; struct ev_eloop *eloop; @@ -108,8 +106,7 @@ static int test_prepare(struct conf_option *opts, size_t len, if (!test_conf.debug && !test_conf.verbose && test_conf.silent) log_set_config(&LOG_CONFIG_WARNING(0, 0, 0, 0)); else - log_set_config(&LOG_CONFIG_INFO(test_conf.debug, - test_conf.verbose)); + log_set_config(&LOG_CONFIG_INFO(test_conf.debug, test_conf.verbose)); log_print_init(argv[0]); @@ -123,8 +120,7 @@ static int test_prepare(struct conf_option *opts, size_t len, ret = ev_eloop_register_signal_cb(eloop, SIGINT, sig_generic, eloop); if (ret) { - ev_eloop_unregister_signal_cb(eloop, SIGTERM, - sig_generic, eloop); + ev_eloop_unregister_signal_cb(eloop, SIGTERM, sig_generic, eloop); goto err_unref; } @@ -144,8 +140,7 @@ static void test_fail(int ret) log_err("init failed, errno %d: %s", ret, strerror(-ret)); } -static void test_exit(struct conf_option *opts, size_t len, - struct ev_eloop *eloop) +static void test_exit(struct conf_option *opts, size_t len, struct ev_eloop *eloop) { ev_eloop_unregister_signal_cb(eloop, SIGINT, sig_generic, eloop); ev_eloop_unregister_signal_cb(eloop, SIGTERM, sig_generic, eloop); diff --git a/tests/test_input.c b/tests/test_input.c index ae1f1069..c06304bc 100644 --- a/tests/test_input.c +++ b/tests/test_input.c @@ -39,9 +39,9 @@ static void print_help(); #include #include "eloop.h" #include "shl_log.h" +#include "test_include.h" #include "uterm_input.h" #include "uterm_monitor.h" -#include "test_include.h" static struct ev_eloop *eloop; static struct uterm_input *input; @@ -57,9 +57,7 @@ struct { } input_conf; /* Pressing Ctrl-\ should toggle the capturing. */ -static void sig_quit(struct ev_eloop *p, - struct signalfd_siginfo *info, - void *data) +static void sig_quit(struct ev_eloop *p, struct signalfd_siginfo *info, void *data) { if (!input) return; @@ -88,9 +86,7 @@ static void print_modifiers(unsigned int mods) printf("\n"); } -static void input_arrived(struct uterm_input *input, - struct uterm_input_key_event *ev, - void *data) +static void input_arrived(struct uterm_input *input, struct uterm_input_key_event *ev, void *data) { char s[32]; @@ -106,9 +102,7 @@ static void input_arrived(struct uterm_input *input, print_modifiers(ev->mods); } -static void monitor_event(struct uterm_monitor *mon, - struct uterm_monitor_event *ev, - void *data) +static void monitor_event(struct uterm_monitor *mon, struct uterm_monitor_event *ev, void *data) { int ret; char *keymap, *compose_file; @@ -120,32 +114,26 @@ static void monitor_event(struct uterm_monitor *mon, keymap = NULL; if (input_conf.xkb_keymap && *input_conf.xkb_keymap) { - ret = shl_read_file(input_conf.xkb_keymap, &keymap, - NULL); + ret = shl_read_file(input_conf.xkb_keymap, &keymap, NULL); if (ret) - log_error("cannot read keymap file %s: %d", - input_conf.xkb_keymap, ret); + log_error("cannot read keymap file %s: %d", input_conf.xkb_keymap, + ret); } compose_file = NULL; compose_file_len = 0; - if (input_conf.xkb_compose_file && - *input_conf.xkb_compose_file) { - ret = shl_read_file(input_conf.xkb_compose_file, - &compose_file, &compose_file_len); + if (input_conf.xkb_compose_file && *input_conf.xkb_compose_file) { + ret = shl_read_file(input_conf.xkb_compose_file, &compose_file, + &compose_file_len); if (ret) log_error("cannot read compose file %s: %d", input_conf.xkb_compose_file, ret); } - ret = uterm_input_new(&input, eloop, - input_conf.xkb_model, - input_conf.xkb_layout, - input_conf.xkb_variant, - input_conf.xkb_options, - input_conf.locale, - keymap, compose_file, compose_file_len, - 0, 0, log_llog, NULL); + ret = uterm_input_new(&input, eloop, input_conf.xkb_model, input_conf.xkb_layout, + input_conf.xkb_variant, input_conf.xkb_options, + input_conf.locale, keymap, compose_file, compose_file_len, 0, + 0, log_llog, NULL); if (ret) return; ret = uterm_input_register_key_cb(input, input_arrived, NULL); @@ -185,9 +173,7 @@ static void print_help() "You can prefix boolean options with \"no-\" to negate it. If an argument is\n" "given multiple times, only the last argument matters if not otherwise stated.\n" "\n" - "General Options:\n" - TEST_HELP - "\n" + "General Options:\n" TEST_HELP "\n" "Input Device Options:\n" "\t --xkb-model [-] Set XkbModel for input devices\n" "\t --xkb-layout [-] Set XkbLayout for input devices\n" diff --git a/tests/test_key.c b/tests/test_key.c index f5e2446b..ab348731 100644 --- a/tests/test_key.c +++ b/tests/test_key.c @@ -37,17 +37,16 @@ int main() bool reset = false; fprintf(stderr, "Quit with 'q' (maybe followed by 'enter'/'return')\r\n"); - fprintf(stderr, "Maybe your terminal may be unusable after this, use 'reset' to fix it\r\n"); + fprintf(stderr, + "Maybe your terminal may be unusable after this, use 'reset' to fix it\r\n"); if (tcgetattr(0, &omode) < 0) { - fprintf(stderr, "cannot retrieve terminal attributes (%d): %m\r\n", - errno); + fprintf(stderr, "cannot retrieve terminal attributes (%d): %m\r\n", errno); } else { memcpy(&nmode, &omode, sizeof(nmode)); cfmakeraw(&nmode); if (tcsetattr(0, TCSANOW, &nmode) < 0) - fprintf(stderr, "cannot set terminal attributes (%d): %m\r\n", - errno); + fprintf(stderr, "cannot set terminal attributes (%d): %m\r\n", errno); else reset = true; } @@ -55,24 +54,21 @@ int main() while (1) { res = fread(&buf, 1, 1, stdin); if (res != 1) { - fprintf(stderr, "error on stdin: %d %d: %m\r\n", - res, errno); + fprintf(stderr, "error on stdin: %d %d: %m\r\n", res, errno); break; } if (buf == '\n') fprintf(stderr, "key: \r\n"); else - fprintf(stderr, "key: %x %u %o '%c'\r\n", - (int)buf, buf, buf, buf); + fprintf(stderr, "key: %x %u %o '%c'\r\n", (int)buf, buf, buf, buf); if (buf == 'q') break; } if (reset && tcsetattr(0, TCSANOW, &omode) < 0) - fprintf(stderr, "cannot reset terminal attributes (%d): %m\r\n", - errno); + fprintf(stderr, "cannot reset terminal attributes (%d): %m\r\n", errno); return 0; } diff --git a/tests/test_output.c b/tests/test_output.c index a9d6c7ff..e3374017 100644 --- a/tests/test_output.c +++ b/tests/test_output.c @@ -48,8 +48,8 @@ static void print_help(); #include "eloop.h" #include "shl_log.h" -#include "uterm_video.h" #include "test_include.h" +#include "uterm_video.h" /* eloop object */ static struct ev_eloop *eloop; @@ -70,7 +70,7 @@ static int blit_outputs(struct uterm_video *video) j = 0; iter = uterm_video_get_displays(video); - for ( ; iter; iter = uterm_display_next(iter)) { + for (; iter; iter = uterm_display_next(iter)) { log_notice("Activating display %d %p...", j, iter); ret = uterm_display_activate(iter, NULL); if (ret) @@ -86,13 +86,12 @@ static int blit_outputs(struct uterm_video *video) } iter = uterm_video_get_displays(video); - for ( ; iter; iter = uterm_display_next(iter)) { + for (; iter; iter = uterm_display_next(iter)) { if (uterm_display_get_state(iter) != UTERM_DISPLAY_ACTIVE) continue; mode = uterm_display_get_current(iter); - ret = uterm_display_fill(iter, 0xff, 0xff, 0xff, 0, 0, - uterm_mode_get_width(mode), + ret = uterm_display_fill(iter, 0xff, 0xff, 0xff, 0, 0, uterm_mode_get_width(mode), uterm_mode_get_height(mode)); if (ret) { log_err("cannot fill framebuffer"); @@ -125,7 +124,7 @@ static int list_outputs(struct uterm_video *video) i = 0; iter = uterm_video_get_displays(video); - for ( ; iter; iter = uterm_display_next(iter)) { + for (; iter; iter = uterm_display_next(iter)) { cur = uterm_display_get_current(iter); log_notice("Output %d:", i++); @@ -133,7 +132,7 @@ static int list_outputs(struct uterm_video *video) log_notice(" has current: %s", cur ? "yes" : "no"); mode = uterm_display_get_modes(iter); - for ( ; mode; mode = uterm_mode_next(mode)) { + for (; mode; mode = uterm_mode_next(mode)) { log_notice(" Mode '%s':", uterm_mode_get_name(mode)); log_notice(" x: %u", uterm_mode_get_width(mode)); log_notice(" y: %u", uterm_mode_get_height(mode)); @@ -166,12 +165,11 @@ static void print_help() "You can prefix boolean options with \"no-\" to negate it. If an argument is\n" "given multiple times, only the last argument matters if not otherwise stated.\n" "\n" - "General Options:\n" - TEST_HELP - "\n" + "General Options:\n" TEST_HELP "\n" "Video Options:\n" "\t --fbdev [off] Use fbdev instead of DRM\n" - "\t --test [off] Try displaying content instead of listing devices\n" + "\t --test [off] Try displaying content instead of listing " + "devices\n" "\t --dev [/dev/dri/card0 | /dev/fb0] Use the given device\n", "test_input"); /* @@ -188,7 +186,7 @@ struct conf_option options[] = { TEST_OPTIONS, CONF_OPTION_BOOL(0, "fbdev", &output_conf.fbdev, false), CONF_OPTION_BOOL(0, "test", &output_conf.test, false), - CONF_OPTION_STRING(0, "dev", &output_conf.dev, NULL), + CONF_OPTION_STRING(0, "dev", &output_conf.dev, NULL), CONF_OPTION_UINT(0, "desired-width", &output_conf.desired_width, 0), CONF_OPTION_UINT(0, "desired-height", &output_conf.desired_height, 0), }; @@ -219,14 +217,12 @@ int main(int argc, char **argv) log_notice("Creating video object using %s...", node); - ret = uterm_video_new(&video, eloop, node, mode, - output_conf.desired_width, + ret = uterm_video_new(&video, eloop, node, mode, output_conf.desired_width, output_conf.desired_height); if (ret) { if (!output_conf.fbdev) { log_notice("cannot create drm device; trying drm2d mode"); - ret = uterm_video_new(&video, eloop, node, - "drm2d", + ret = uterm_video_new(&video, eloop, node, "drm2d", output_conf.desired_width, output_conf.desired_height); if (ret) diff --git a/tests/test_shl.c b/tests/test_shl.c index b287e917..5541b432 100644 --- a/tests/test_shl.c +++ b/tests/test_shl.c @@ -23,21 +23,21 @@ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#include "test_common.h" #include "shl_misc.h" +#include "test_common.h" -#define check_assert_string_list_eq(X, Y) \ - do { \ - unsigned int i; \ - const char **x, **y; \ - \ - x = (X); \ - y = (Y); \ - \ - for (i = 0; x[i] && y[i]; ++i) \ - ck_assert_str_eq(x[i], y[i]); \ - ck_assert_ptr_eq(x[i], NULL); \ - ck_assert_ptr_eq(y[i], NULL); \ +#define check_assert_string_list_eq(X, Y) \ + do { \ + unsigned int i; \ + const char **x, **y; \ + \ + x = (X); \ + y = (Y); \ + \ + for (i = 0; x[i] && y[i]; ++i) \ + ck_assert_str_eq(x[i], y[i]); \ + ck_assert_ptr_eq(x[i], NULL); \ + ck_assert_ptr_eq(y[i], NULL); \ } while (0) START_TEST(test_split_command_string) @@ -47,9 +47,7 @@ START_TEST(test_split_command_string) char **list; const char *invalid_command_strings[] = { - "\"", "'", "\\", - "\"/bin/true", "'/bin/true", "/bin/true\\", - "ls -h \"*.c'", + "\"", "'", "\\", "\"/bin/true", "'/bin/true", "/bin/true\\", "ls -h \"*.c'", }; n = sizeof(invalid_command_strings) / sizeof(invalid_command_strings[0]); @@ -57,29 +55,30 @@ START_TEST(test_split_command_string) list = TEST_INVALID_PTR; n_list = -10; - ret = shl_split_command_string(invalid_command_strings[i], - &list, &n_list); + ret = shl_split_command_string(invalid_command_strings[i], &list, &n_list); ck_assert_int_eq(ret, -EINVAL); ck_assert_ptr_eq(list, TEST_INVALID_PTR); ck_assert_uint_eq(n_list, (unsigned int)-10); } - const char *expected_command_list[] = { - "'/bin/command with space", - "\t\\argument=\"quoted\"", - "plain\3argument", - " an\tother='ere", - "\"ends with \\", - "\\\"more\\bquotes\\", - NULL - }; - n_expected = sizeof(expected_command_list) / - sizeof(expected_command_list[0]) - 1; + const char *expected_command_list[] = {"'/bin/command with space", + "\t\\argument=\"quoted\"", + "plain\3argument", + " an\tother='ere", + "\"ends with \\", + "\\\"more\\bquotes\\", + NULL}; + n_expected = sizeof(expected_command_list) / sizeof(expected_command_list[0]) - 1; const char *valid_command_strings[] = { - "\\'/bin/command\\ with\\ space \\\t\\\\argument=\\\"quoted\\\" plain\3argument \\ an\\\tother=\\'ere \\\"ends\\ with\\ \\\\ \\\\\\\"more\\\\bquotes\\\\", - "\"'/bin/command with space\" \"\t\\argument=\\\"quoted\\\"\" \"plain\3argument\" \" an\tother='ere\" \"\\\"ends with \\\\\" \"\\\\\\\"more\\bquotes\\\\\"", - "\"'\"'/bin/command with space' '\t\\argument=\"quoted\"' 'plain\3argument' ' an\tother='\"'\"'ere' '\"ends with \\' '\\\"more\\bquotes\\'", - " \\'/bin/command\\ with\\ space\t\t\\\t\\\\argument=\\\"quoted\\\"\t plain\3argument \t\\ an\\\tother=\\'ere \\\"ends\\ with\\ \\\\ \t \\\\\\\"more\\\\\\bquotes\\\\ \t \t", + "\\'/bin/command\\ with\\ space \\\t\\\\argument=\\\"quoted\\\" plain\3argument \\ " + "an\\\tother=\\'ere \\\"ends\\ with\\ \\\\ \\\\\\\"more\\\\bquotes\\\\", + "\"'/bin/command with space\" \"\t\\argument=\\\"quoted\\\"\" \"plain\3argument\" " + "\" an\tother='ere\" \"\\\"ends with \\\\\" \"\\\\\\\"more\\bquotes\\\\\"", + "\"'\"'/bin/command with space' '\t\\argument=\"quoted\"' 'plain\3argument' ' " + "an\tother='\"'\"'ere' '\"ends with \\' '\\\"more\\bquotes\\'", + " \\'/bin/command\\ with\\ space\t\t\\\t\\\\argument=\\\"quoted\\\"\t " + "plain\3argument \t\\ an\\\tother=\\'ere \\\"ends\\ with\\ \\\\ \t " + "\\\\\\\"more\\\\\\bquotes\\\\ \t \t", }; n = sizeof(valid_command_strings) / sizeof(valid_command_strings[0]); @@ -87,11 +86,10 @@ START_TEST(test_split_command_string) list = TEST_INVALID_PTR; n_list = -10; - ret = shl_split_command_string(valid_command_strings[i], &list, - &n_list); + ret = shl_split_command_string(valid_command_strings[i], &list, &n_list); ck_assert_int_eq(ret, 0); ck_assert_ptr_ne(list, TEST_INVALID_PTR); - check_assert_string_list_eq((const char**)list, expected_command_list); + check_assert_string_list_eq((const char **)list, expected_command_list); ck_assert_uint_eq(n_list, n_expected); } @@ -106,8 +104,7 @@ START_TEST(test_split_command_string) list = TEST_INVALID_PTR; n_list = -10; - ret = shl_split_command_string(empty_command_strings[i], &list, - &n_list); + ret = shl_split_command_string(empty_command_strings[i], &list, &n_list); ck_assert_int_eq(ret, 0); ck_assert_ptr_ne(list, TEST_INVALID_PTR); ck_assert_ptr_eq(list[0], NULL); @@ -118,29 +115,26 @@ START_TEST(test_split_command_string) list = TEST_INVALID_PTR; n_list = -10; - ret = shl_split_command_string(valid_command_strings[0], &list, - &n_list); + ret = shl_split_command_string(valid_command_strings[0], &list, &n_list); ck_assert_int_eq(ret, 0); ck_assert_ptr_ne(list, TEST_INVALID_PTR); - check_assert_string_list_eq((const char**)list, expected_command_list); + check_assert_string_list_eq((const char **)list, expected_command_list); ck_assert_uint_eq(n_list, n_expected); } { list = TEST_INVALID_PTR; - ret = shl_split_command_string(valid_command_strings[0], &list, - NULL); + ret = shl_split_command_string(valid_command_strings[0], &list, NULL); ck_assert_int_eq(ret, 0); ck_assert_ptr_ne(list, TEST_INVALID_PTR); - check_assert_string_list_eq((const char**)list, expected_command_list); + check_assert_string_list_eq((const char **)list, expected_command_list); } { n_list = -10; - ret = shl_split_command_string(valid_command_strings[0], NULL, - &n_list); + ret = shl_split_command_string(valid_command_strings[0], NULL, &n_list); ck_assert_int_eq(ret, -EINVAL); ck_assert_uint_eq(n_list, (unsigned int)-10); } @@ -166,12 +160,7 @@ START_TEST(test_split_command_string) END_TEST TEST_DEFINE_CASE(misc) - TEST(test_split_command_string) +TEST(test_split_command_string) TEST_END_CASE -TEST_DEFINE( - TEST_SUITE(shl, - TEST_CASE(misc), - TEST_END - ) -) +TEST_DEFINE(TEST_SUITE(shl, TEST_CASE(misc), TEST_END)) diff --git a/tests/test_vt.c b/tests/test_vt.c index 2d3fbd92..4be24872 100644 --- a/tests/test_vt.c +++ b/tests/test_vt.c @@ -44,9 +44,9 @@ static void print_help(); #include #include "eloop.h" #include "shl_log.h" +#include "test_include.h" #include "uterm_input.h" #include "uterm_vt.h" -#include "test_include.h" static void print_help() { @@ -69,9 +69,7 @@ static void print_help() "You can prefix boolean options with \"no-\" to negate it. If an argument is\n" "given multiple times, only the last argument matters if not otherwise stated.\n" "\n" - "General Options:\n" - TEST_HELP - "\n" + "General Options:\n" TEST_HELP "\n" "VT Options:\n" "\t --vt [-] Path to VT to use\n" "\t-s, --switchvt [off] Switch automatically to the new VT\n", @@ -113,13 +111,12 @@ int main(int argc, char **argv) if (ret) goto err_exit; - ret = uterm_input_new(&input, eloop, "", "", "", "", "C", "", "", 0, 0, - 0, log_llog, NULL); + ret = uterm_input_new(&input, eloop, "", "", "", "", "C", "", "", 0, 0, 0, log_llog, NULL); if (ret) goto err_vtm; - ret = uterm_vt_allocate(vtm, &vt, UTERM_VT_FAKE | UTERM_VT_REAL, - "seat0", input, vtpath, NULL, NULL); + ret = uterm_vt_allocate(vtm, &vt, UTERM_VT_FAKE | UTERM_VT_REAL, "seat0", input, vtpath, + NULL, NULL); if (ret) goto err_input; From dc29970a11032323e59bf92eef7d83808aea2b81 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 14:56:13 +0100 Subject: [PATCH 12/31] github-ci: Check sources format with clang-format Signed-off-by: Jocelyn Falempe --- .github/workflows/meson.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/meson.yml b/.github/workflows/meson.yml index daf42751..b58d731b 100644 --- a/.github/workflows/meson.yml +++ b/.github/workflows/meson.yml @@ -7,6 +7,15 @@ on: branches: [ main ] jobs: + check-format: + name: Clang-format check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Install clang-format + run: sudo apt-get update && sudo apt-get install -y clang-format-20 + - name: Check format + run: clang-format-20 -n --Werror src/*c src/*.h tests/*.c tests/*.h build: name: Ubuntu tests runs-on: ubuntu-latest From a01e0720f989e2c10a405f74b136d6d79d5db02c Mon Sep 17 00:00:00 2001 From: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> Date: Fri, 5 Dec 2025 03:16:12 +0300 Subject: [PATCH 13/31] Portable kmscon-launch-gui.sh Fixed printf syntax to be portable and work in dash. Got rid of useless `cat`s. Signed-off-by: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> --- scripts/kmscon-launch-gui.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/kmscon-launch-gui.sh b/scripts/kmscon-launch-gui.sh index ac3cb8c5..84fd3615 100644 --- a/scripts/kmscon-launch-gui.sh +++ b/scripts/kmscon-launch-gui.sh @@ -6,8 +6,9 @@ if [ "$#" -eq 0 ]; then fi # Store current tty number -if [ -d /sys/class/tty/tty0 ]; then - kms_tty=$(cat /sys/class/tty/tty0/active) +kms_tty= +if [ -f /sys/class/tty/tty0/active ]; then + read -r kms_tty < /sys/class/tty/tty0/active fi if [ "${TERM_PROGRAM}" != "tmux" ]; then @@ -20,7 +21,7 @@ fi # If the current tty has changed, wait until the user switches back. if [ -n "${kms_tty}" ]; then - while [ "$(cat /sys/class/tty/tty0/active)" != "${kms_tty}" ]; do + while { read -r check_kms_tty; [ "${check_kms_tty}" != "${kms_tty}" ]; }; do sleep 1 done fi From 1568f36362190054fc343d7651ad713675d6279a Mon Sep 17 00:00:00 2001 From: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> Date: Fri, 5 Dec 2025 09:01:08 +0300 Subject: [PATCH 14/31] fix tty0 reading, use var Signed-off-by: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> --- scripts/kmscon-launch-gui.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/kmscon-launch-gui.sh b/scripts/kmscon-launch-gui.sh index 84fd3615..1d05e529 100644 --- a/scripts/kmscon-launch-gui.sh +++ b/scripts/kmscon-launch-gui.sh @@ -7,7 +7,8 @@ fi # Store current tty number kms_tty= -if [ -f /sys/class/tty/tty0/active ]; then +active_tty_file=/sys/class/tty/tty0/active +if [ -f "$active_tty_file" ]; then read -r kms_tty < /sys/class/tty/tty0/active fi @@ -21,7 +22,7 @@ fi # If the current tty has changed, wait until the user switches back. if [ -n "${kms_tty}" ]; then - while { read -r check_kms_tty; [ "${check_kms_tty}" != "${kms_tty}" ]; }; do + while { read -r check_kms_tty < "$active_tty_file"; [ "${check_kms_tty}" != "${kms_tty}" ]; }; do sleep 1 done fi From c752cc8af81e0ae6688a8a1abc41d0f11f04890f Mon Sep 17 00:00:00 2001 From: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> Date: Fri, 5 Dec 2025 10:22:03 +0300 Subject: [PATCH 15/31] inotifywait, shfmt, case Use `inotifywait` to monitor foreground console change, if available, otherwise fallback to sleep. Use `case` for control sequence selectors as it is more compact, elegant, and handy for potential future variant additions. apply `shfmt -s -sr` formatting. Signed-off-by: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> --- scripts/kmscon-launch-gui.sh | 38 ++++++++++++++++++++---------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/scripts/kmscon-launch-gui.sh b/scripts/kmscon-launch-gui.sh index 1d05e529..f9289624 100644 --- a/scripts/kmscon-launch-gui.sh +++ b/scripts/kmscon-launch-gui.sh @@ -1,35 +1,39 @@ #!/bin/sh if [ "$#" -eq 0 ]; then - echo "Usage: $0 argument" - exit 1 + echo "Usage: $0 argument" + exit 1 fi # Store current tty number kms_tty= active_tty_file=/sys/class/tty/tty0/active if [ -f "$active_tty_file" ]; then - read -r kms_tty < /sys/class/tty/tty0/active + read -r kms_tty < "$active_tty_file" fi -if [ "${TERM_PROGRAM}" != "tmux" ]; then - printf "\033]setBackground\a" -else - printf "\033Ptmux;\033\033]setBackground\a\033\\" -fi +case "${TERM_PROGRAM}" in +tmux) printf "\033Ptmux;\033\033]setBackground\a\033\\" ;; +*) printf "\033]setBackground\a" ;; +esac "$@" # If the current tty has changed, wait until the user switches back. if [ -n "${kms_tty}" ]; then - while { read -r check_kms_tty < "$active_tty_file"; [ "${check_kms_tty}" != "${kms_tty}" ]; }; do - sleep 1 - done -fi - -if [ "${TERM_PROGRAM}" != "tmux" ]; then - printf "\033]setForeground\a" -else - printf "\033Ptmux;\033\033]setForeground\a\033\\" + read -r check_kms_tty < "$active_tty_file" + while [ "${check_kms_tty}" != "${kms_tty}" ]; do + # use inotifywait if available, fallback to plain sleep + if command -v inotifywait > /dev/null; then + inotifywait -qqe modify "$active_tty_file" + else + sleep 1 + fi + read -r check_kms_tty < "$active_tty_file" + done fi +case "${TERM_PROGRAM}" in +tmux) printf "\033Ptmux;\033\033]setForeground\a\033\\" ;; +*) printf "\033]setForeground\a" ;; +esac From 12423f4d144540903531860680bdad356619492d Mon Sep 17 00:00:00 2001 From: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> Date: Fri, 5 Dec 2025 12:20:31 +0300 Subject: [PATCH 16/31] single quotes Use single quotes to reduce escape ambiguity. There are no variables in those strings, now there is one less backslash, result is the same: ``` printf '%b' "\033Ptmux;\033\033]setBackground\a\033\\" | md5sum printf '%b' '\033Ptmux;\033\033]setBackground\a\033\' | md5sum ``` ``` f5a7f67be35dcd7b910e05f52cf1676a - f5a7f67be35dcd7b910e05f52cf1676a - ``` Signed-off-by: Vladimir-csp <4061903+Vladimir-csp@users.noreply.github.com> --- scripts/kmscon-launch-gui.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/kmscon-launch-gui.sh b/scripts/kmscon-launch-gui.sh index f9289624..fa6e9419 100644 --- a/scripts/kmscon-launch-gui.sh +++ b/scripts/kmscon-launch-gui.sh @@ -13,8 +13,8 @@ if [ -f "$active_tty_file" ]; then fi case "${TERM_PROGRAM}" in -tmux) printf "\033Ptmux;\033\033]setBackground\a\033\\" ;; -*) printf "\033]setBackground\a" ;; +tmux) printf '\033Ptmux;\033\033]setBackground\a\033\\' ;; +*) printf '\033]setBackground\a' ;; esac "$@" @@ -34,6 +34,6 @@ if [ -n "${kms_tty}" ]; then fi case "${TERM_PROGRAM}" in -tmux) printf "\033Ptmux;\033\033]setForeground\a\033\\" ;; -*) printf "\033]setForeground\a" ;; +tmux) printf '\033Ptmux;\033\033]setForeground\a\033\\' ;; +*) printf '\033]setForeground\a' ;; esac From 5cec231f20a55fd368eb479e003c98f2b06eb518 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 16:05:05 +0100 Subject: [PATCH 17/31] Remove unused get_buffers function Signed-off-by: Jocelyn Falempe --- src/uterm_drm2d_video.c | 23 ----------------------- src/uterm_drm3d_video.c | 1 - src/uterm_fbdev_video.c | 31 ------------------------------- src/uterm_video.c | 10 ---------- src/uterm_video.h | 2 -- src/uterm_video_internal.h | 2 -- 6 files changed, 69 deletions(-) diff --git a/src/uterm_drm2d_video.c b/src/uterm_drm2d_video.c index 9acfe6c0..110e1d0d 100644 --- a/src/uterm_drm2d_video.c +++ b/src/uterm_drm2d_video.c @@ -234,28 +234,6 @@ static int display_use(struct uterm_display *disp, bool *opengl) return d2d->current_rb ^ 1; } -static int display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, - unsigned int formats) -{ - struct uterm_drm2d_display *d2d = uterm_drm_display_get_data(disp); - struct uterm_drm2d_rb *rb; - int i; - - if (!(formats & UTERM_FORMAT_XRGB32)) - return -EOPNOTSUPP; - - for (i = 0; i < 2; ++i) { - rb = &d2d->rb[i]; - buffer[i].width = uterm_drm_mode_get_width(disp->current_mode); - buffer[i].height = uterm_drm_mode_get_height(disp->current_mode); - buffer[i].stride = rb->stride; - buffer[i].format = UTERM_FORMAT_XRGB32; - buffer[i].data = rb->map; - } - - return 0; -} - static int display_swap(struct uterm_display *disp, bool immediate) { int ret, rb; @@ -277,7 +255,6 @@ static const struct display_ops drm2d_display_ops = { .deactivate = display_deactivate, .set_dpms = uterm_drm_display_set_dpms, .use = display_use, - .get_buffers = display_get_buffers, .swap = display_swap, .fake_blendv = uterm_drm2d_display_fake_blendv, .fill = uterm_drm2d_display_fill, diff --git a/src/uterm_drm3d_video.c b/src/uterm_drm3d_video.c index 25a5a226..ab762a3c 100644 --- a/src/uterm_drm3d_video.c +++ b/src/uterm_drm3d_video.c @@ -339,7 +339,6 @@ static const struct display_ops drm_display_ops = { .deactivate = display_deactivate, .set_dpms = uterm_drm_display_set_dpms, .use = uterm_drm3d_display_use, - .get_buffers = NULL, .swap = display_swap, .fake_blendv = uterm_drm3d_display_fake_blendv, .fill = uterm_drm3d_display_fill, diff --git a/src/uterm_fbdev_video.c b/src/uterm_fbdev_video.c index 3b9a9d51..eb307712 100644 --- a/src/uterm_fbdev_video.c +++ b/src/uterm_fbdev_video.c @@ -434,36 +434,6 @@ static int display_use(struct uterm_display *disp, bool *opengl) return dfb->bufid ^ 1; } -static int display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, - unsigned int formats) -{ - struct fbdev_display *dfb = disp->data; - unsigned int f = 0, i; - - if (dfb->xrgb32) - f = UTERM_FORMAT_XRGB32; - else if (dfb->rgb16) - f = UTERM_FORMAT_RGB16; - else if (dfb->rgb24) - f = UTERM_FORMAT_RGB24; - - if (!(formats & f)) - return -EOPNOTSUPP; - - for (i = 0; i < 2; ++i) { - buffer[i].width = dfb->xres; - buffer[i].height = dfb->yres; - buffer[i].stride = dfb->stride; - buffer[i].format = f; - if (!(disp->flags & DISPLAY_DBUF) || !i) - buffer[i].data = dfb->map; - else - buffer[i].data = &dfb->map[dfb->yres * dfb->stride]; - } - - return 0; -} - static int display_swap(struct uterm_display *disp, bool immediate) { struct fbdev_display *dfb = disp->data; @@ -504,7 +474,6 @@ static const struct display_ops fbdev_display_ops = { .deactivate = display_deactivate, .set_dpms = display_set_dpms, .use = display_use, - .get_buffers = display_get_buffers, .swap = display_swap, .fake_blendv = uterm_fbdev_display_fake_blendv, .fill = uterm_fbdev_display_fill, diff --git a/src/uterm_video.c b/src/uterm_video.c index cb9100df..7933efed 100644 --- a/src/uterm_video.c +++ b/src/uterm_video.c @@ -465,16 +465,6 @@ int uterm_display_use(struct uterm_display *disp, bool *opengl) return VIDEO_CALL(disp->ops->use, -EOPNOTSUPP, disp, opengl); } -SHL_EXPORT -int uterm_display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, - unsigned int formats) -{ - if (!disp || !display_is_online(disp) || !buffer) - return -EINVAL; - - return VIDEO_CALL(disp->ops->get_buffers, -EOPNOTSUPP, disp, buffer, formats); -} - SHL_EXPORT int uterm_display_swap(struct uterm_display *disp, bool immediate) { diff --git a/src/uterm_video.h b/src/uterm_video.h index 4da496bb..7561c8a9 100644 --- a/src/uterm_video.h +++ b/src/uterm_video.h @@ -165,8 +165,6 @@ int uterm_display_set_dpms(struct uterm_display *disp, int state); int uterm_display_get_dpms(const struct uterm_display *disp); int uterm_display_use(struct uterm_display *disp, bool *opengl); -int uterm_display_get_buffers(struct uterm_display *disp, struct uterm_video_buffer *buffer, - unsigned int formats); int uterm_display_swap(struct uterm_display *disp, bool immediate); bool uterm_display_is_swapping(struct uterm_display *disp); diff --git a/src/uterm_video_internal.h b/src/uterm_video_internal.h index da355d02..86f217a1 100644 --- a/src/uterm_video_internal.h +++ b/src/uterm_video_internal.h @@ -54,8 +54,6 @@ struct display_ops { void (*deactivate)(struct uterm_display *disp); int (*set_dpms)(struct uterm_display *disp, int state); int (*use)(struct uterm_display *disp, bool *opengl); - int (*get_buffers)(struct uterm_display *disp, struct uterm_video_buffer *buffer, - unsigned int formats); int (*swap)(struct uterm_display *disp, bool immediate); int (*fake_blendv)(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num); From 7a27594a7e55033d8112404776745b16999af32d Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 16:11:33 +0100 Subject: [PATCH 18/31] Remove unused segfault callback Signed-off-by: Jocelyn Falempe --- src/uterm_drm2d_video.c | 1 - src/uterm_drm3d_video.c | 1 - src/uterm_fbdev_video.c | 1 - src/uterm_video.c | 9 --------- src/uterm_video.h | 1 - src/uterm_video_internal.h | 1 - 6 files changed, 14 deletions(-) diff --git a/src/uterm_drm2d_video.c b/src/uterm_drm2d_video.c index 110e1d0d..a14cfdd7 100644 --- a/src/uterm_drm2d_video.c +++ b/src/uterm_drm2d_video.c @@ -352,7 +352,6 @@ struct uterm_video_module drm2d_module = { { .init = video_init, .destroy = video_destroy, - .segfault = NULL, /* TODO: reset all saved CRTCs on segfault */ .poll = video_poll, .sleep = video_sleep, .wake_up = video_wake_up, diff --git a/src/uterm_drm3d_video.c b/src/uterm_drm3d_video.c index ab762a3c..6ee8cb90 100644 --- a/src/uterm_drm3d_video.c +++ b/src/uterm_drm3d_video.c @@ -604,7 +604,6 @@ struct uterm_video_module drm3d_module = { { .init = video_init, .destroy = video_destroy, - .segfault = NULL, /* TODO: reset all saved CRTCs on segfault */ .poll = video_poll, .sleep = video_sleep, .wake_up = video_wake_up, diff --git a/src/uterm_fbdev_video.c b/src/uterm_fbdev_video.c index eb307712..72134506 100644 --- a/src/uterm_fbdev_video.c +++ b/src/uterm_fbdev_video.c @@ -602,7 +602,6 @@ struct uterm_video_module fbdev_module = {.name = "fbdev", .ops = { .init = video_init, .destroy = video_destroy, - .segfault = NULL, /* TODO */ .poll = NULL, .sleep = video_sleep, .wake_up = video_wake_up, diff --git a/src/uterm_video.c b/src/uterm_video.c index 7933efed..864accaf 100644 --- a/src/uterm_video.c +++ b/src/uterm_video.c @@ -617,15 +617,6 @@ void uterm_video_unref(struct uterm_video *video) free(video); } -SHL_EXPORT -void uterm_video_segfault(struct uterm_video *video) -{ - if (!video) - return; - - VIDEO_CALL(video->mod->ops.segfault, 0, video); -} - SHL_EXPORT struct uterm_display *uterm_video_get_displays(struct uterm_video *video) { diff --git a/src/uterm_video.h b/src/uterm_video.h index 7561c8a9..a99ff80d 100644 --- a/src/uterm_video.h +++ b/src/uterm_video.h @@ -183,7 +183,6 @@ int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, const char void uterm_video_ref(struct uterm_video *video); void uterm_video_unref(struct uterm_video *video); -void uterm_video_segfault(struct uterm_video *video); struct uterm_display *uterm_video_get_displays(struct uterm_video *video); int uterm_video_register_cb(struct uterm_video *video, uterm_video_cb cb, void *data); void uterm_video_unregister_cb(struct uterm_video *video, uterm_video_cb cb, void *data); diff --git a/src/uterm_video_internal.h b/src/uterm_video_internal.h index 86f217a1..6504764b 100644 --- a/src/uterm_video_internal.h +++ b/src/uterm_video_internal.h @@ -64,7 +64,6 @@ struct display_ops { struct video_ops { int (*init)(struct uterm_video *video, const char *node); void (*destroy)(struct uterm_video *video); - void (*segfault)(struct uterm_video *video); int (*poll)(struct uterm_video *video); void (*sleep)(struct uterm_video *video); int (*wake_up)(struct uterm_video *video); From 78cf5b4dc56fe46887189d6e062e59fcd092fa33 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Wed, 3 Dec 2025 16:57:58 +0100 Subject: [PATCH 19/31] Remove unused uterm_display_fake_blend() Signed-off-by: Jocelyn Falempe --- src/uterm_video.c | 24 ------------------------ src/uterm_video.h | 3 --- 2 files changed, 27 deletions(-) diff --git a/src/uterm_video.c b/src/uterm_video.c index 864accaf..faae7c1a 100644 --- a/src/uterm_video.c +++ b/src/uterm_video.c @@ -493,30 +493,6 @@ int uterm_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t return VIDEO_CALL(disp->ops->fill, -EOPNOTSUPP, disp, r, g, b, x, y, width, height); } -SHL_EXPORT -int uterm_display_fake_blend(struct uterm_display *disp, const struct uterm_video_buffer *buf, - unsigned int x, unsigned int y, uint8_t fr, uint8_t fg, uint8_t fb, - uint8_t br, uint8_t bg, uint8_t bb) -{ - struct uterm_video_blend_req req; - - if (!disp || !display_is_online(disp) || !video_is_awake(disp->video)) - return -EINVAL; - - memset(&req, 0, sizeof(req)); - req.buf = buf; - req.x = x; - req.y = y; - req.fr = fr; - req.fg = fg; - req.fb = fb; - req.br = br; - req.bg = bg; - req.bb = bb; - - return VIDEO_CALL(disp->ops->fake_blendv, -EOPNOTSUPP, disp, &req, 1); -} - SHL_EXPORT int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num) diff --git a/src/uterm_video.h b/src/uterm_video.h index a99ff80d..b6934387 100644 --- a/src/uterm_video.h +++ b/src/uterm_video.h @@ -170,9 +170,6 @@ bool uterm_display_is_swapping(struct uterm_display *disp); int uterm_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, unsigned int x, unsigned int y, unsigned int width, unsigned int height); -int uterm_display_fake_blend(struct uterm_display *disp, const struct uterm_video_buffer *buf, - unsigned int x, unsigned int y, uint8_t fr, uint8_t fg, uint8_t fb, - uint8_t br, uint8_t bg, uint8_t bb); int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num); From 3396748422b5a867821d47f149be590b7be05061 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Thu, 4 Dec 2025 12:01:21 +0100 Subject: [PATCH 20/31] Move vblank timer to fbdev, as it's the only user. Signed-off-by: Jocelyn Falempe --- src/uterm_drm2d_video.c | 1 + src/uterm_drm3d_video.c | 1 + src/uterm_drm_shared.c | 5 +++ src/uterm_drm_shared_internal.h | 1 + src/uterm_fbdev_internal.h | 4 ++ src/uterm_fbdev_video.c | 70 +++++++++++++++++++++++++++++++-- src/uterm_video.c | 53 +------------------------ src/uterm_video_internal.h | 7 +--- 8 files changed, 82 insertions(+), 60 deletions(-) diff --git a/src/uterm_drm2d_video.c b/src/uterm_drm2d_video.c index a14cfdd7..5d647f27 100644 --- a/src/uterm_drm2d_video.c +++ b/src/uterm_drm2d_video.c @@ -256,6 +256,7 @@ static const struct display_ops drm2d_display_ops = { .set_dpms = uterm_drm_display_set_dpms, .use = display_use, .swap = display_swap, + .is_swapping = uterm_drm_is_swapping, .fake_blendv = uterm_drm2d_display_fake_blendv, .fill = uterm_drm2d_display_fill, }; diff --git a/src/uterm_drm3d_video.c b/src/uterm_drm3d_video.c index 6ee8cb90..944f2d15 100644 --- a/src/uterm_drm3d_video.c +++ b/src/uterm_drm3d_video.c @@ -340,6 +340,7 @@ static const struct display_ops drm_display_ops = { .set_dpms = uterm_drm_display_set_dpms, .use = uterm_drm3d_display_use, .swap = display_swap, + .is_swapping = uterm_drm_is_swapping, .fake_blendv = uterm_drm3d_display_fake_blendv, .fill = uterm_drm3d_display_fill, }; diff --git a/src/uterm_drm_shared.c b/src/uterm_drm_shared.c index 43a49b7b..7c86c16a 100644 --- a/src/uterm_drm_shared.c +++ b/src/uterm_drm_shared.c @@ -370,6 +370,11 @@ int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, bool immedia return 0; } +bool uterm_drm_is_swapping(struct uterm_display *disp) +{ + return (disp->flags & DISPLAY_VSYNC) != 0; +} + static void uterm_drm_display_pflip(struct uterm_display *disp) { struct uterm_drm_video *vdrm = disp->video->data; diff --git a/src/uterm_drm_shared_internal.h b/src/uterm_drm_shared_internal.h index 88d5d4a0..6e5d7b67 100644 --- a/src/uterm_drm_shared_internal.h +++ b/src/uterm_drm_shared_internal.h @@ -79,6 +79,7 @@ void uterm_drm_display_deactivate(struct uterm_display *disp, int fd); int uterm_drm_display_set_dpms(struct uterm_display *disp, int state); int uterm_drm_display_wait_pflip(struct uterm_display *disp); int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, bool immediate); +bool uterm_drm_is_swapping(struct uterm_display *disp); static inline void *uterm_drm_display_get_data(struct uterm_display *disp) { diff --git a/src/uterm_fbdev_internal.h b/src/uterm_fbdev_internal.h index 740abf2f..1770cf8d 100644 --- a/src/uterm_fbdev_internal.h +++ b/src/uterm_fbdev_internal.h @@ -67,6 +67,10 @@ struct fbdev_display { int_fast32_t dither_r; int_fast32_t dither_g; int_fast32_t dither_b; + + bool vblank_scheduled; + struct itimerspec vblank_spec; + struct ev_timer *vblank_timer; }; struct fbdev_video { diff --git a/src/uterm_fbdev_video.c b/src/uterm_fbdev_video.c index 72134506..d40a9b15 100644 --- a/src/uterm_fbdev_video.c +++ b/src/uterm_fbdev_video.c @@ -89,9 +89,44 @@ static const struct mode_ops fbdev_mode_ops = { .get_height = mode_get_height, }; +static int display_schedule_vblank_timer(struct fbdev_display *fbdev) +{ + int ret; + + if (fbdev->vblank_scheduled) + return 0; + + ret = ev_timer_update(fbdev->vblank_timer, &fbdev->vblank_spec); + if (ret) + return ret; + + fbdev->vblank_scheduled = true; + return 0; +} + +static void display_set_vblank_timer(struct fbdev_display *fbdev, unsigned int msecs) +{ + if (msecs >= 1000) + msecs = 999; + else if (msecs == 0) + msecs = 15; + + fbdev->vblank_spec.it_value.tv_nsec = msecs * 1000 * 1000; +} + +static void display_vblank_timer_event(struct ev_timer *timer, uint64_t expirations, void *data) +{ + struct uterm_display *disp = data; + struct fbdev_display *fbdev = disp->data; + + fbdev->vblank_scheduled = false; + DISPLAY_CB(disp, UTERM_PAGE_FLIP); +} + static int display_init(struct uterm_display *disp) { struct fbdev_display *fbdev; + int ret; fbdev = malloc(sizeof(*fbdev)); if (!fbdev) @@ -100,11 +135,24 @@ static int display_init(struct uterm_display *disp) disp->data = fbdev; disp->dpms = UTERM_DPMS_UNKNOWN; + fbdev->vblank_spec.it_value.tv_nsec = 15 * 1000 * 1000; + ret = ev_timer_new(&fbdev->vblank_timer, NULL, display_vblank_timer_event, disp, NULL, + NULL); + if (ret) + goto err_free; + return 0; + +err_free: + free(fbdev); + return ret; } static void display_destroy(struct uterm_display *disp) { + struct fbdev_display *fbdev = disp->data; + ev_eloop_rm_timer(fbdev->vblank_timer); + ev_timer_unref(fbdev->vblank_timer); free(disp->data); } @@ -284,7 +332,7 @@ static int display_activate_force(struct uterm_display *disp, struct uterm_mode } val = 1000000 / dfb->rate; - display_set_vblank_timer(disp, val); + display_set_vblank_timer(dfb, val); log_debug("vblank timer: %u ms, monitor refresh rate: %u Hz", val, dfb->rate / 1000); len = finfo->line_length * vinfo->yres; @@ -443,7 +491,7 @@ static int display_swap(struct uterm_display *disp, bool immediate) if (!(disp->flags & DISPLAY_DBUF)) { if (immediate) return 0; - return display_schedule_vblank_timer(disp); + return display_schedule_vblank_timer(dfb); } vinfo = &dfb->vinfo; @@ -464,7 +512,14 @@ static int display_swap(struct uterm_display *disp, bool immediate) } dfb->bufid ^= 1; - return display_schedule_vblank_timer(disp); + return display_schedule_vblank_timer(dfb); +} + +static bool display_is_swapping(struct uterm_display *disp) +{ + struct fbdev_display *fbdev = disp->data; + + return fbdev->vblank_scheduled; } static const struct display_ops fbdev_display_ops = { @@ -475,6 +530,7 @@ static const struct display_ops fbdev_display_ops = { .set_dpms = display_set_dpms, .use = display_use, .swap = display_swap, + .is_swapping = display_is_swapping, .fake_blendv = uterm_fbdev_display_fake_blendv, .fill = uterm_fbdev_display_fill, }; @@ -498,10 +554,18 @@ static void intro_idle_event(struct ev_eloop *eloop, void *unused, void *data) dfb = disp->data; dfb->node = vfb->node; + + ret = ev_eloop_add_timer(video->eloop, dfb->vblank_timer); + if (ret) { + log_error("cannot add fbdev timer: %d", ret); + return; + } + ret = uterm_display_bind(disp, video); if (ret) { log_error("cannot bind fbdev display: %d", ret); uterm_display_unref(disp); + ev_eloop_rm_timer(dfb->vblank_timer); return; } diff --git a/src/uterm_video.c b/src/uterm_video.c index faae7c1a..8f484abb 100644 --- a/src/uterm_video.c +++ b/src/uterm_video.c @@ -179,39 +179,6 @@ unsigned int uterm_mode_get_height(const struct uterm_mode *mode) return VIDEO_CALL(mode->ops->get_height, 0, mode); } -int display_schedule_vblank_timer(struct uterm_display *disp) -{ - int ret; - - if (disp->vblank_scheduled) - return 0; - - ret = ev_timer_update(disp->vblank_timer, &disp->vblank_spec); - if (ret) - return ret; - - disp->vblank_scheduled = true; - return 0; -} - -void display_set_vblank_timer(struct uterm_display *disp, unsigned int msecs) -{ - if (msecs >= 1000) - msecs = 999; - else if (msecs == 0) - msecs = 15; - - disp->vblank_spec.it_value.tv_nsec = msecs * 1000 * 1000; -} - -static void display_vblank_timer_event(struct ev_timer *timer, uint64_t expirations, void *data) -{ - struct uterm_display *disp = data; - - disp->vblank_scheduled = false; - DISPLAY_CB(disp, UTERM_PAGE_FLIP); -} - int display_new(struct uterm_display **out, const struct display_ops *ops) { struct uterm_display *disp; @@ -234,21 +201,13 @@ int display_new(struct uterm_display **out, const struct display_ops *ops) if (ret) goto err_free; - disp->vblank_spec.it_value.tv_nsec = 15 * 1000 * 1000; - - ret = ev_timer_new(&disp->vblank_timer, NULL, display_vblank_timer_event, disp, NULL, NULL); - if (ret) - goto err_hook; - ret = VIDEO_CALL(disp->ops->init, 0, disp); if (ret) - goto err_timer; + goto err_hook; *out = disp; return 0; -err_timer: - ev_timer_unref(disp->vblank_timer); err_hook: shl_hook_free(disp->hook); err_free: @@ -281,7 +240,6 @@ void uterm_display_unref(struct uterm_display *disp) } VIDEO_CALL(disp->ops->destroy, 0, disp); - ev_timer_unref(disp->vblank_timer); shl_hook_free(disp->hook); free(disp); } @@ -289,15 +247,9 @@ void uterm_display_unref(struct uterm_display *disp) SHL_EXPORT int uterm_display_bind(struct uterm_display *disp, struct uterm_video *video) { - int ret; - if (!disp || !video || disp->video) return -EINVAL; - ret = ev_eloop_add_timer(video->eloop, disp->vblank_timer); - if (ret) - return ret; - shl_dlist_link_tail(&video->displays, &disp->list); disp->video = video; uterm_display_ref(disp); @@ -316,7 +268,6 @@ void uterm_display_unbind(struct uterm_display *disp) uterm_display_deactivate(disp); disp->video = NULL; shl_dlist_unlink(&disp->list); - ev_eloop_rm_timer(disp->vblank_timer); uterm_display_unref(disp); } @@ -480,7 +431,7 @@ bool uterm_display_is_swapping(struct uterm_display *disp) if (!disp) return false; - return disp->vblank_scheduled || (disp->flags & DISPLAY_VSYNC); + return VIDEO_CALL(disp->ops->is_swapping, 0, disp); } SHL_EXPORT diff --git a/src/uterm_video_internal.h b/src/uterm_video_internal.h index 6504764b..6447b4c2 100644 --- a/src/uterm_video_internal.h +++ b/src/uterm_video_internal.h @@ -55,6 +55,7 @@ struct display_ops { int (*set_dpms)(struct uterm_display *disp, int state); int (*use)(struct uterm_display *disp, bool *opengl); int (*swap)(struct uterm_display *disp, bool immediate); + bool (*is_swapping)(struct uterm_display *disp); int (*fake_blendv)(struct uterm_display *disp, const struct uterm_video_blend_req *req, size_t num); int (*fill)(struct uterm_display *disp, uint8_t r, uint8_t g, uint8_t b, unsigned int x, @@ -116,17 +117,11 @@ struct uterm_display { struct uterm_mode *original_mode; int dpms; - bool vblank_scheduled; - struct itimerspec vblank_spec; - struct ev_timer *vblank_timer; - const struct display_ops *ops; void *data; }; int display_new(struct uterm_display **out, const struct display_ops *ops); -void display_set_vblank_timer(struct uterm_display *disp, unsigned int msecs); -int display_schedule_vblank_timer(struct uterm_display *disp); int uterm_display_bind(struct uterm_display *disp, struct uterm_video *video); void uterm_display_unbind(struct uterm_display *disp); From 2408d4ebb5c637d25cd9fa5ec452b36a50592f89 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Thu, 4 Dec 2025 18:25:40 +0100 Subject: [PATCH 21/31] Move display modes to shared drm. fbdev doesn't support changing mode, so it has no effect there. This prepares to switch to atomic modesetting. Signed-off-by: Jocelyn Falempe --- src/kmscon_dummy.c | 7 +- src/kmscon_main.c | 5 +- src/kmscon_seat.c | 8 +- src/kmscon_terminal.c | 25 ++--- src/text_bbulk.c | 17 ++-- src/text_gltex.c | 6 +- src/uterm_drm2d_render.c | 8 +- src/uterm_drm2d_video.c | 29 +++--- src/uterm_drm3d_render.c | 8 +- src/uterm_drm3d_video.c | 29 ++++-- src/uterm_drm_shared.c | 113 ++++++++--------------- src/uterm_drm_shared_internal.h | 25 ++--- src/uterm_fbdev_video.c | 89 ++---------------- src/uterm_video.c | 156 ++------------------------------ src/uterm_video.h | 17 +--- src/uterm_video_internal.h | 34 +------ tests/test_output.c | 26 ++---- 17 files changed, 149 insertions(+), 453 deletions(-) diff --git a/src/kmscon_dummy.c b/src/kmscon_dummy.c index dc14f731..3107d76a 100644 --- a/src/kmscon_dummy.c +++ b/src/kmscon_dummy.c @@ -34,6 +34,7 @@ #include "kmscon_seat.h" #include "shl_dlist.h" #include "shl_log.h" +#include "uterm_video.h" #define LOG_SUBSYSTEM "dummy" @@ -50,12 +51,10 @@ struct kmscon_dummy { static void dummy_redraw(struct kmscon_dummy *dummy, struct display *d) { - struct uterm_mode *mode; unsigned int w, h; - mode = uterm_display_get_current(d->disp); - w = uterm_mode_get_width(mode); - h = uterm_mode_get_height(mode); + w = uterm_display_get_width(d->disp); + h = uterm_display_get_height(d->disp); uterm_display_fill(d->disp, 0, 0, 0, 0, 0, w, h); uterm_display_swap(d->disp, false); diff --git a/src/kmscon_main.c b/src/kmscon_main.c index 0b995b3d..92474a36 100644 --- a/src/kmscon_main.c +++ b/src/kmscon_main.c @@ -366,13 +366,14 @@ static int app_seat_add_video(struct app_seat *seat, unsigned int type, unsigned } } ret = uterm_video_new(&vid->video, seat->app->eloop, node, backend, desired_width, - desired_height); + desired_height, seat->conf->use_original_mode); if (ret) { if (backend == be_drm3d) { log_info("cannot create drm3d device %s on seat %s (%d); trying drm2d mode", vid->node, seat->name, ret); ret = uterm_video_new(&vid->video, seat->app->eloop, node, be_drm2d, - desired_width, desired_height); + desired_width, desired_height, + seat->conf->use_original_mode); if (ret) goto err_node; } else { diff --git a/src/kmscon_seat.c b/src/kmscon_seat.c index 837afae8..48b4164f 100644 --- a/src/kmscon_seat.c +++ b/src/kmscon_seat.c @@ -155,13 +155,9 @@ static void activate_display(struct kmscon_display *d) * but we should also allow the user to specify different modes in the * configuration files. */ if (uterm_display_get_state(d->disp) == UTERM_DISPLAY_INACTIVE) { - if (seat->conf->use_original_mode) - ret = uterm_display_activate(d->disp, uterm_display_get_original(d->disp)); - else - ret = uterm_display_activate(d->disp, NULL); - + ret = uterm_display_activate(d->disp); if (ret == -EAGAIN) - ret = uterm_display_activate(d->disp, NULL); + ret = uterm_display_activate(d->disp); if (ret) return; diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c index 7b586250..59c7d70d 100644 --- a/src/kmscon_terminal.c +++ b/src/kmscon_terminal.c @@ -101,16 +101,14 @@ struct kmscon_terminal { static void do_clear_margins(struct screen *scr) { unsigned int w, h, sw, sh; - struct uterm_mode *mode; struct tsm_screen_attr attr; int dh, dw; - mode = uterm_display_get_current(scr->disp); - if (!mode) - return; + sw = uterm_display_get_width(scr->disp); + sh = uterm_display_get_height(scr->disp); - sw = uterm_mode_get_width(mode); - sh = uterm_mode_get_height(mode); + if (!sw || !sh) + return; tsm_vte_get_def_attr(scr->term->vte, &attr); @@ -188,7 +186,7 @@ static void do_redraw_screen(struct screen *scr) if (ret == -EAGAIN) { uterm_display_deactivate(scr->disp); - ret = uterm_display_activate(scr->disp, NULL); + ret = uterm_display_activate(scr->disp); if (!ret) ret = font_set(scr->term); if (!ret) @@ -252,7 +250,6 @@ static void update_pointer_max_all(struct kmscon_terminal *term) { struct shl_dlist *iter; struct screen *scr; - struct uterm_mode *mode; unsigned int max_x = INT_MAX; unsigned int max_y = INT_MAX; unsigned int sw, sh; @@ -264,16 +261,12 @@ static void update_pointer_max_all(struct kmscon_terminal *term) { scr = shl_dlist_entry(iter, struct screen, list); - mode = uterm_display_get_current(scr->disp); - if (!mode) - continue; - if (scr->txt->orientation == OR_NORMAL || scr->txt->orientation == OR_UPSIDE_DOWN) { - sw = uterm_mode_get_width(mode); - sh = uterm_mode_get_height(mode); + sw = uterm_display_get_width(scr->disp); + sh = uterm_display_get_height(scr->disp); } else { - sw = uterm_mode_get_height(mode); - sh = uterm_mode_get_width(mode); + sw = uterm_display_get_height(scr->disp); + sh = uterm_display_get_width(scr->disp); } if (!sw || !sh) continue; diff --git a/src/text_bbulk.c b/src/text_bbulk.c index cc0c3bf6..1e762443 100644 --- a/src/text_bbulk.c +++ b/src/text_bbulk.c @@ -86,15 +86,14 @@ static int bbulk_set(struct kmscon_text *txt) struct bbulk *bb = txt->data; unsigned int sw, sh, i, j; struct uterm_video_blend_req *req; - struct uterm_mode *mode; memset(bb, 0, sizeof(*bb)); - mode = uterm_display_get_current(txt->disp); - if (!mode) + sw = uterm_display_get_width(txt->disp); + sh = uterm_display_get_height(txt->disp); + + if (!sw || !sh) return -EINVAL; - sw = uterm_mode_get_width(mode); - sh = uterm_mode_get_height(mode); if (txt->orientation == OR_NORMAL || txt->orientation == OR_UPSIDE_DOWN) { txt->cols = sw / FONT_WIDTH(txt); @@ -284,18 +283,14 @@ static int bblit_draw_pointer(struct kmscon_text *txt, unsigned int pointer_x, struct bbulk *bb = txt->data; struct uterm_video_blend_req *req; struct uterm_video_buffer *bb_glyph; - struct uterm_mode *mode; uint32_t ch = 'I'; uint64_t id = ch; unsigned int sw, sh; unsigned int m_x, m_y, x, y; int ret; - mode = uterm_display_get_current(txt->disp); - if (!mode) - return -EINVAL; - sw = uterm_mode_get_width(mode); - sh = uterm_mode_get_height(mode); + sw = uterm_display_get_width(txt->disp); + sh = uterm_display_get_height(txt->disp); if (txt->orientation == OR_NORMAL || txt->orientation == OR_UPSIDE_DOWN) { m_x = SHL_DIV_ROUND_UP(FONT_WIDTH(txt), 2); diff --git a/src/text_gltex.c b/src/text_gltex.c index a2805fb3..49c455b4 100644 --- a/src/text_gltex.c +++ b/src/text_gltex.c @@ -153,7 +153,6 @@ static int gltex_set(struct kmscon_text *txt) static char *attr[] = {"position", "texture_position", "fgcolor", "bgcolor"}; GLint s; const char *ext; - struct uterm_mode *mode; bool opengl; memset(gt, 0, sizeof(*gt)); @@ -196,9 +195,8 @@ static int gltex_set(struct kmscon_text *txt) goto err_shader; } - mode = uterm_display_get_current(txt->disp); - gt->sw = uterm_mode_get_width(mode); - gt->sh = uterm_mode_get_height(mode); + gt->sw = uterm_display_get_width(txt->disp); + gt->sh = uterm_display_get_height(txt->disp); if (txt->orientation == OR_NORMAL || txt->orientation == OR_UPSIDE_DOWN) { txt->cols = gt->sw / FONT_WIDTH(txt); diff --git a/src/uterm_drm2d_render.c b/src/uterm_drm2d_render.c index 7fb46e72..02a26d45 100644 --- a/src/uterm_drm2d_render.c +++ b/src/uterm_drm2d_render.c @@ -61,8 +61,8 @@ int uterm_drm2d_display_fake_blendv(struct uterm_display *disp, return -EINVAL; rb = &d2d->rb[d2d->current_rb ^ 1]; - sw = uterm_drm_mode_get_width(disp->current_mode); - sh = uterm_drm_mode_get_height(disp->current_mode); + sw = disp->width; + sh = disp->height; for (j = 0; j < num; ++j, ++req) { if (!req->buf) @@ -144,8 +144,8 @@ int uterm_drm2d_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, u struct uterm_drm2d_display *d2d = uterm_drm_display_get_data(disp); rb = &d2d->rb[d2d->current_rb ^ 1]; - sw = uterm_drm_mode_get_width(disp->current_mode); - sh = uterm_drm_mode_get_height(disp->current_mode); + sw = disp->width; + sh = disp->height; tmp = x + width; if (tmp < x || x >= sw) diff --git a/src/uterm_drm2d_video.c b/src/uterm_drm2d_video.c index 5d647f27..b6b52c42 100644 --- a/src/uterm_drm2d_video.c +++ b/src/uterm_drm2d_video.c @@ -82,8 +82,8 @@ static int init_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) struct drm_mode_map_dumb mreq; memset(&req, 0, sizeof(req)); - req.width = uterm_drm_mode_get_width(disp->current_mode); - req.height = uterm_drm_mode_get_height(disp->current_mode); + req.width = disp->width; + req.height = disp->height; req.bpp = 32; req.flags = 0; @@ -152,7 +152,7 @@ static void destroy_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) log_warning("cannot destroy dumb buffer (%d/%d): %m", ret, errno); } -static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) +static int display_activate(struct uterm_display *disp) { struct uterm_video *video = disp->video; struct uterm_drm_video *vdrm = video->data; @@ -161,11 +161,14 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) int ret; drmModeModeInfo *minfo; - if (!mode) - return -EINVAL; + if (video->use_original) + ddrm->current_mode = ddrm->original_mode; + else + ddrm->current_mode = ddrm->desired_mode; + minfo = &ddrm->current_mode->info; + disp->width = minfo->hdisplay; + disp->height = minfo->vdisplay; - minfo = uterm_drm_mode_get_info(mode); - ; log_info("activating display %p to %ux%u", disp, minfo->hdisplay, minfo->vdisplay); ret = uterm_drm_display_activate(disp, vdrm->fd); @@ -173,7 +176,6 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) return ret; d2d->current_rb = 0; - disp->current_mode = mode; ret = init_rb(disp, &d2d->rb[0]); if (ret) @@ -186,8 +188,9 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d2d->rb[0].fb, 0, 0, &ddrm->conn_id, 1, minfo); - if (ret && mode == disp->desired_mode && mode != disp->default_mode) { - mode = disp->desired_mode = disp->default_mode; + if (ret && ddrm->current_mode == ddrm->desired_mode && + ddrm->current_mode != ddrm->default_mode) { + ddrm->current_mode = ddrm->desired_mode = ddrm->default_mode; ret = -EAGAIN; goto err_fb; } else if (ret) { @@ -204,7 +207,8 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) err_rb: destroy_rb(disp, &d2d->rb[0]); err_saved: - disp->current_mode = NULL; + disp->width = 0; + disp->height = 0; uterm_drm_display_deactivate(disp, vdrm->fd); return ret; } @@ -221,7 +225,8 @@ static void display_deactivate(struct uterm_display *disp) destroy_rb(disp, &d2d->rb[1]); destroy_rb(disp, &d2d->rb[0]); - disp->current_mode = NULL; + disp->width = 0; + disp->height = 0; } static int display_use(struct uterm_display *disp, bool *opengl) diff --git a/src/uterm_drm3d_render.c b/src/uterm_drm3d_render.c index 631fb9f8..728905ce 100644 --- a/src/uterm_drm3d_render.c +++ b/src/uterm_drm3d_render.c @@ -142,8 +142,8 @@ static int display_blend(struct uterm_display *disp, const struct uterm_video_bu if (ret) return ret; - sw = uterm_drm_mode_get_width(disp->current_mode); - sh = uterm_drm_mode_get_height(disp->current_mode); + sw = disp->width; + sh = disp->height; vertices[0] = -1.0; vertices[1] = -1.0; @@ -297,8 +297,8 @@ int uterm_drm3d_display_fill(struct uterm_display *disp, uint8_t r, uint8_t g, u if (ret) return ret; - sw = uterm_drm_mode_get_width(disp->current_mode); - sh = uterm_drm_mode_get_height(disp->current_mode); + sw = disp->width; + sh = disp->height; for (i = 0; i < 6; ++i) { colors[i * 4 + 0] = r / 255.0; diff --git a/src/uterm_drm3d_video.c b/src/uterm_drm3d_video.c index 944f2d15..a8ffece2 100644 --- a/src/uterm_drm3d_video.c +++ b/src/uterm_drm3d_video.c @@ -132,7 +132,7 @@ static struct uterm_drm3d_rb *bo_to_rb(struct uterm_display *disp, struct gbm_bo return rb; } -static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) +static int display_activate(struct uterm_display *disp) { struct uterm_video *video = disp->video; struct uterm_drm_video *vdrm; @@ -143,12 +143,18 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) struct gbm_bo *bo; drmModeModeInfo *minfo; - if (!mode) - return -EINVAL; - vdrm = video->data; v3d = uterm_drm_video_get_data(video); - minfo = uterm_drm_mode_get_info(mode); + + if (video->use_original) + ddrm->current_mode = ddrm->original_mode; + else + ddrm->current_mode = ddrm->desired_mode; + + minfo = &ddrm->current_mode->info; + disp->width = minfo->hdisplay; + disp->height = minfo->vdisplay; + log_info("activating display %p to %ux%u", disp, minfo->hdisplay, minfo->vdisplay); ret = uterm_drm_display_activate(disp, vdrm->fd); @@ -157,7 +163,6 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) d3d->current = NULL; d3d->next = NULL; - disp->current_mode = mode; d3d->gbm = gbm_surface_create(v3d->gbm, minfo->hdisplay, minfo->vdisplay, GBM_FORMAT_XRGB8888, @@ -206,8 +211,9 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d3d->current->fb, 0, 0, &ddrm->conn_id, 1, minfo); - if (ret && mode == disp->desired_mode && mode != disp->default_mode) { - mode = disp->desired_mode = disp->default_mode; + if (ret && ddrm->current_mode == ddrm->desired_mode && + ddrm->current_mode != ddrm->default_mode) { + ddrm->current_mode = ddrm->desired_mode = ddrm->default_mode; ret = -EAGAIN; goto err_bo; } else if (ret) { @@ -228,7 +234,9 @@ static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) err_gbm: gbm_surface_destroy(d3d->gbm); err_saved: - disp->current_mode = NULL; + disp->width = 0; + disp->height = 0; + ddrm->current_mode = NULL; uterm_drm_display_deactivate(disp, vdrm->fd); return ret; } @@ -259,7 +267,8 @@ static void display_deactivate(struct uterm_display *disp) } gbm_surface_destroy(d3d->gbm); - disp->current_mode = NULL; + disp->width = 0; + disp->height = 0; } int uterm_drm3d_display_use(struct uterm_display *disp, bool *opengl) diff --git a/src/uterm_drm_shared.c b/src/uterm_drm_shared.c index 7c86c16a..d25e66e1 100644 --- a/src/uterm_drm_shared.c +++ b/src/uterm_drm_shared.c @@ -36,7 +36,9 @@ #include #include #include +#include "shl_dlist.h" #include "shl_log.h" +#include "shl_misc.h" #include "shl_timer.h" #include "uterm_drm_shared_internal.h" #include "uterm_video.h" @@ -44,60 +46,18 @@ #define LOG_SUBSYSTEM "drm_shared" -int uterm_drm_mode_init(struct uterm_mode *mode) +static struct uterm_mode *mode_new(drmModeModeInfo *info) { - struct uterm_drm_mode *m; + struct uterm_mode *new; - m = malloc(sizeof(*m)); - if (!m) - return -ENOMEM; - memset(m, 0, sizeof(*m)); - mode->data = m; - - return 0; -} - -void uterm_drm_mode_destroy(struct uterm_mode *mode) -{ - free(mode->data); -} - -const char *uterm_drm_mode_get_name(const struct uterm_mode *mode) -{ - struct uterm_drm_mode *m = mode->data; - - return m->info.name; -} - -unsigned int uterm_drm_mode_get_width(const struct uterm_mode *mode) -{ - struct uterm_drm_mode *m = mode->data; - - return m->info.hdisplay; -} - -unsigned int uterm_drm_mode_get_height(const struct uterm_mode *mode) -{ - struct uterm_drm_mode *m = mode->data; - - return m->info.vdisplay; -} - -void uterm_drm_mode_set(struct uterm_mode *mode, drmModeModeInfo *info) -{ - struct uterm_drm_mode *m = mode->data; + new = malloc(sizeof(*new)); + if (!new) + return NULL; + new->info = *info; - m->info = *info; + return new; } -const struct mode_ops uterm_drm_mode_ops = { - .init = uterm_drm_mode_init, - .destroy = uterm_drm_mode_destroy, - .get_name = uterm_drm_mode_get_name, - .get_width = uterm_drm_mode_get_width, - .get_height = uterm_drm_mode_get_height, -}; - int uterm_drm_set_dpms(int fd, uint32_t conn_id, int state) { int i, ret, set; @@ -203,6 +163,7 @@ int uterm_drm_display_init(struct uterm_display *disp, void *data) if (!d) return -ENOMEM; memset(d, 0, sizeof(*d)); + shl_dlist_init(&d->modes); disp->data = d; d->data = data; @@ -211,6 +172,14 @@ int uterm_drm_display_init(struct uterm_display *disp, void *data) void uterm_drm_display_destroy(struct uterm_display *disp) { + struct uterm_mode *mode; + struct uterm_drm_display *ddrm = disp->data; + + while (!shl_dlist_empty(&ddrm->modes)) { + mode = shl_dlist_entry(ddrm->modes.prev, struct uterm_mode, list); + shl_dlist_unlink(&mode->list); + free(mode); + } free(disp->data); } @@ -341,7 +310,7 @@ int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, bool immedia if (ret) return ret; - mode = uterm_drm_mode_get_info(disp->current_mode); + mode = &ddrm->current_mode->info; ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, fb, 0, 0, &ddrm->conn_id, 1, mode); if (ret) { log_error("cannot set DRM-CRTC (%d): %m", errno); @@ -353,8 +322,8 @@ int uterm_drm_display_swap(struct uterm_display *disp, uint32_t fb, bool immedia ret = drmModePageFlip(vdrm->fd, ddrm->crtc_id, fb, DRM_MODE_PAGE_FLIP_EVENT, disp); if (ret) { - if (disp->desired_mode != disp->default_mode) { - disp->desired_mode = disp->default_mode; + if (ddrm->desired_mode != ddrm->default_mode) { + ddrm->desired_mode = ddrm->default_mode; log_debug("Unable to page-flip desired mode! Switching to default " "mode."); return -EAGAIN; @@ -613,48 +582,40 @@ static void bind_display(struct uterm_video *video, drmModeRes *res, drmModeConn current_crtc = get_current_crtc(vdrm->fd, conn->encoder_id); for (i = 0; i < conn->count_modes; ++i) { - ret = mode_new(&mode, &uterm_drm_mode_ops); - if (ret) + mode = mode_new(&conn->modes[i]); + if (!mode) continue; - uterm_drm_mode_set(mode, &conn->modes[i]); - - ret = uterm_mode_bind(mode, disp); - if (ret) { - uterm_mode_unref(mode); - continue; - } + shl_dlist_link_tail(&ddrm->modes, &mode->list); /* TODO: more sophisticated default-mode selection */ - if (!disp->default_mode) - disp->default_mode = mode; + if (!ddrm->default_mode) + ddrm->default_mode = mode; /* Save the original KMS mode for later use */ if (current_crtc && memcmp(&conn->modes[i], ¤t_crtc->mode, sizeof(conn->modes[i])) == 0) - disp->original_mode = mode; + ddrm->original_mode = mode; if (video->desired_width != 0 && video->desired_height != 0 && - mode->ops->get_width(mode) == video->desired_width && - mode->ops->get_height(mode) == video->desired_height) - disp->desired_mode = mode; - - uterm_mode_unref(mode); + mode->info.hdisplay == video->desired_width && + mode->info.vdisplay == video->desired_height) + ddrm->desired_mode = mode; } if (current_crtc) drmModeFreeCrtc(current_crtc); - if (!disp->desired_mode) { - disp->desired_mode = disp->default_mode; + if (!ddrm->desired_mode) { + ddrm->desired_mode = ddrm->default_mode; } - log_debug("Default mode %dx%d", disp->default_mode->ops->get_width(disp->default_mode), - disp->default_mode->ops->get_height(disp->default_mode)); + log_debug("Default mode %dx%d", ddrm->default_mode->info.hdisplay, + ddrm->default_mode->info.vdisplay); - log_debug("Desired mode %dx%d", disp->desired_mode->ops->get_width(disp->desired_mode), - disp->desired_mode->ops->get_height(disp->desired_mode)); + log_debug("Desired mode %dx%d", ddrm->desired_mode->info.hdisplay, + ddrm->desired_mode->info.vdisplay); - if (shl_dlist_empty(&disp->modes)) { + if (shl_dlist_empty(&ddrm->modes)) { log_warn("no valid mode for display found"); ret = -EFAULT; goto err_unref; diff --git a/src/uterm_drm_shared_internal.h b/src/uterm_drm_shared_internal.h index 6e5d7b67..07cb1a43 100644 --- a/src/uterm_drm_shared_internal.h +++ b/src/uterm_drm_shared_internal.h @@ -38,26 +38,11 @@ /* drm mode */ -struct uterm_drm_mode { +struct uterm_mode { + struct shl_dlist list; drmModeModeInfo info; }; -int uterm_drm_mode_init(struct uterm_mode *mode); -void uterm_drm_mode_destroy(struct uterm_mode *mode); -const char *uterm_drm_mode_get_name(const struct uterm_mode *mode); -unsigned int uterm_drm_mode_get_width(const struct uterm_mode *mode); -unsigned int uterm_drm_mode_get_height(const struct uterm_mode *mode); -void uterm_drm_mode_set(struct uterm_mode *mode, drmModeModeInfo *info); - -static inline drmModeModeInfo *uterm_drm_mode_get_info(struct uterm_mode *m) -{ - struct uterm_drm_mode *mode = m->data; - - return &mode->info; -} - -extern const struct mode_ops uterm_drm_mode_ops; - /* drm dpms */ int uterm_drm_set_dpms(int fd, uint32_t conn_id, int state); @@ -69,6 +54,12 @@ struct uterm_drm_display { uint32_t conn_id; int crtc_id; drmModeCrtc *saved_crtc; + + struct shl_dlist modes; + struct uterm_mode *default_mode; + struct uterm_mode *desired_mode; + struct uterm_mode *current_mode; + struct uterm_mode *original_mode; void *data; }; diff --git a/src/uterm_fbdev_video.c b/src/uterm_fbdev_video.c index d40a9b15..11f61053 100644 --- a/src/uterm_fbdev_video.c +++ b/src/uterm_fbdev_video.c @@ -44,51 +44,6 @@ #define LOG_SUBSYSTEM "video_fbdev" -static int mode_init(struct uterm_mode *mode) -{ - struct fbdev_mode *fbdev; - - fbdev = malloc(sizeof(*fbdev)); - if (!fbdev) - return -ENOMEM; - memset(fbdev, 0, sizeof(*fbdev)); - mode->data = fbdev; - - return 0; -} - -static void mode_destroy(struct uterm_mode *mode) -{ - free(mode->data); -} - -static const char *mode_get_name(const struct uterm_mode *mode) -{ - return ""; -} - -static unsigned int mode_get_width(const struct uterm_mode *mode) -{ - struct fbdev_mode *fbdev = mode->data; - - return fbdev->width; -} - -static unsigned int mode_get_height(const struct uterm_mode *mode) -{ - struct fbdev_mode *fbdev = mode->data; - - return fbdev->height; -} - -static const struct mode_ops fbdev_mode_ops = { - .init = mode_init, - .destroy = mode_destroy, - .get_name = mode_get_name, - .get_width = mode_get_width, - .get_height = mode_get_height, -}; - static int display_schedule_vblank_timer(struct fbdev_display *fbdev) { int ret; @@ -176,12 +131,10 @@ static int refresh_info(struct uterm_display *disp) return 0; } -static int display_activate_force(struct uterm_display *disp, struct uterm_mode *mode, bool force) +static int display_activate_force(struct uterm_display *disp, bool force) { static const char depths[] = {32, 24, 16, 0}; struct fbdev_display *dfb = disp->data; - struct uterm_mode *m; - struct fbdev_mode *mfb; struct fb_var_screeninfo *vinfo; struct fb_fix_screeninfo *finfo; int ret, i; @@ -192,13 +145,6 @@ static int display_activate_force(struct uterm_display *disp, struct uterm_mode if (!force && (disp->flags & DISPLAY_ONLINE)) return 0; - /* TODO: We do not support explicit modesetting in fbdev, so we require - * @mode to be NULL. You can still switch modes via "fbset" on the - * console and then restart the app. It will automatically adapt to the - * new mode. The only values changed here are bpp and color mode. */ - if (mode) - return -EINVAL; - dfb->fd = open(dfb->node, O_RDWR | O_CLOEXEC | O_NONBLOCK); if (dfb->fd < 0) { log_err("cannot open %s (%d): %m", dfb->node, errno); @@ -376,39 +322,20 @@ static int display_activate_force(struct uterm_display *disp, struct uterm_mode /* TODO: make dithering configurable */ disp->flags |= DISPLAY_DITHERING; - - if (disp->current_mode) { - m = disp->current_mode; - } else { - ret = mode_new(&m, &fbdev_mode_ops); - if (ret) - goto err_map; - ret = uterm_mode_bind(m, disp); - if (ret) { - uterm_mode_unref(m); - goto err_map; - } - disp->current_mode = m; - uterm_mode_unref(m); - } - - mfb = m->data; - mfb->width = dfb->xres; - mfb->height = dfb->yres; + disp->width = dfb->xres; + disp->height = dfb->yres; disp->flags |= DISPLAY_ONLINE; return 0; -err_map: - munmap(dfb->map, dfb->len); err_close: close(dfb->fd); return ret; } -static int display_activate(struct uterm_display *disp, struct uterm_mode *mode) +static int display_activate(struct uterm_display *disp) { - return display_activate_force(disp, mode, false); + return display_activate_force(disp, false); } static void display_deactivate_force(struct uterm_display *disp, bool force) @@ -424,8 +351,8 @@ static void display_deactivate_force(struct uterm_display *disp, bool force) dfb->map = NULL; } if (!force) { - uterm_mode_unbind(disp->current_mode); - disp->current_mode = NULL; + disp->width = 0; + disp->height = 0; disp->flags &= ~DISPLAY_ONLINE; } } @@ -650,7 +577,7 @@ static int video_wake_up(struct uterm_video *video) if (!display_is_online(iter)) continue; - ret = display_activate_force(iter, NULL, true); + ret = display_activate_force(iter, true); if (ret) return ret; diff --git a/src/uterm_video.c b/src/uterm_video.c index 8f484abb..34c11077 100644 --- a/src/uterm_video.c +++ b/src/uterm_video.c @@ -72,113 +72,6 @@ const char *uterm_dpms_to_name(int dpms) } } -SHL_EXPORT -int mode_new(struct uterm_mode **out, const struct mode_ops *ops) -{ - struct uterm_mode *mode; - int ret; - - if (!out || !ops) - return -EINVAL; - - mode = malloc(sizeof(*mode)); - if (!mode) - return -ENOMEM; - memset(mode, 0, sizeof(*mode)); - mode->ref = 1; - mode->ops = ops; - - ret = VIDEO_CALL(mode->ops->init, 0, mode); - if (ret) - goto err_free; - - *out = mode; - return 0; - -err_free: - free(mode); - return ret; -} - -SHL_EXPORT -void uterm_mode_ref(struct uterm_mode *mode) -{ - if (!mode || !mode->ref) - return; - - ++mode->ref; -} - -SHL_EXPORT -void uterm_mode_unref(struct uterm_mode *mode) -{ - if (!mode || !mode->ref || --mode->ref) - return; - - VIDEO_CALL(mode->ops->destroy, 0, mode); - free(mode); -} - -SHL_EXPORT -int uterm_mode_bind(struct uterm_mode *mode, struct uterm_display *disp) -{ - if (!mode || !disp || mode->disp) - return -EINVAL; - - mode->disp = disp; - shl_dlist_link_tail(&disp->modes, &mode->list); - uterm_mode_ref(mode); - - return 0; -} - -SHL_EXPORT -void uterm_mode_unbind(struct uterm_mode *mode) -{ - if (!mode) - return; - - mode->disp = NULL; - shl_dlist_unlink(&mode->list); - uterm_mode_unref(mode); -} - -SHL_EXPORT -struct uterm_mode *uterm_mode_next(struct uterm_mode *mode) -{ - if (!mode || mode->list.next == &mode->disp->modes) - return NULL; - - return shl_dlist_entry(mode->list.next, struct uterm_mode, list); -} - -SHL_EXPORT -const char *uterm_mode_get_name(const struct uterm_mode *mode) -{ - if (!mode) - return NULL; - - return VIDEO_CALL(mode->ops->get_name, NULL, mode); -} - -SHL_EXPORT -unsigned int uterm_mode_get_width(const struct uterm_mode *mode) -{ - if (!mode) - return 0; - - return VIDEO_CALL(mode->ops->get_width, 0, mode); -} - -SHL_EXPORT -unsigned int uterm_mode_get_height(const struct uterm_mode *mode) -{ - if (!mode) - return 0; - - return VIDEO_CALL(mode->ops->get_height, 0, mode); -} - int display_new(struct uterm_display **out, const struct display_ops *ops) { struct uterm_display *disp; @@ -193,8 +86,6 @@ int display_new(struct uterm_display **out, const struct display_ops *ops) memset(disp, 0, sizeof(*disp)); disp->ref = 1; disp->ops = ops; - shl_dlist_init(&disp->modes); - log_info("new display %p", disp); ret = shl_hook_new(&disp->hook); @@ -227,18 +118,11 @@ void uterm_display_ref(struct uterm_display *disp) SHL_EXPORT void uterm_display_unref(struct uterm_display *disp) { - struct uterm_mode *mode; - if (!disp || !disp->ref || --disp->ref) return; log_info("free display %p", disp); - while (!shl_dlist_empty(&disp->modes)) { - mode = shl_dlist_entry(disp->modes.prev, struct uterm_mode, list); - uterm_mode_unbind(mode); - } - VIDEO_CALL(disp->ops->destroy, 0, disp); shl_hook_free(disp->hook); free(disp); @@ -313,39 +197,21 @@ void uterm_display_unregister_cb(struct uterm_display *disp, uterm_display_cb cb } SHL_EXPORT -struct uterm_mode *uterm_display_get_modes(struct uterm_display *disp) -{ - if (!disp || shl_dlist_empty(&disp->modes)) - return NULL; - - return shl_dlist_entry(disp->modes.next, struct uterm_mode, list); -} - -SHL_EXPORT -struct uterm_mode *uterm_display_get_current(struct uterm_display *disp) -{ - if (!disp) - return NULL; - - return disp->current_mode; -} - -SHL_EXPORT -struct uterm_mode *uterm_display_get_default(struct uterm_display *disp) +unsigned int uterm_display_get_width(struct uterm_display *disp) { if (!disp) - return NULL; + return 0; - return disp->default_mode; + return disp->width; } SHL_EXPORT -struct uterm_mode *uterm_display_get_original(struct uterm_display *disp) +unsigned int uterm_display_get_height(struct uterm_display *disp) { if (!disp) - return NULL; + return 0; - return disp->original_mode; + return disp->height; } SHL_EXPORT @@ -369,15 +235,12 @@ int uterm_display_get_state(struct uterm_display *disp) } SHL_EXPORT -int uterm_display_activate(struct uterm_display *disp, struct uterm_mode *mode) +int uterm_display_activate(struct uterm_display *disp) { if (!disp || !disp->video || display_is_online(disp) || !video_is_awake(disp->video)) return -EINVAL; - if (!mode) - mode = disp->desired_mode; - - return VIDEO_CALL(disp->ops->activate, 0, disp, mode); + return VIDEO_CALL(disp->ops->activate, 0, disp); } SHL_EXPORT @@ -456,7 +319,8 @@ int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_vid SHL_EXPORT int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, const char *node, - const char *backend, unsigned int desired_width, unsigned int desired_height) + const char *backend, unsigned int desired_width, unsigned int desired_height, + bool use_original) { struct shl_register_record *record; const char *name = backend ? backend : ""; diff --git a/src/uterm_video.h b/src/uterm_video.h index b6934387..d2a51a37 100644 --- a/src/uterm_video.h +++ b/src/uterm_video.h @@ -132,16 +132,6 @@ typedef void (*uterm_display_cb)(struct uterm_display *disp, struct uterm_displa const char *uterm_dpms_to_name(int dpms); -/* display modes interface */ - -void uterm_mode_ref(struct uterm_mode *mode); -void uterm_mode_unref(struct uterm_mode *mode); -struct uterm_mode *uterm_mode_next(struct uterm_mode *mode); - -const char *uterm_mode_get_name(const struct uterm_mode *mode); -unsigned int uterm_mode_get_width(const struct uterm_mode *mode); -unsigned int uterm_mode_get_height(const struct uterm_mode *mode); - /* display interface */ void uterm_display_ref(struct uterm_display *disp); @@ -158,8 +148,10 @@ struct uterm_mode *uterm_display_get_current(struct uterm_display *disp); struct uterm_mode *uterm_display_get_default(struct uterm_display *disp); struct uterm_mode *uterm_display_get_original(struct uterm_display *disp); +unsigned int uterm_display_get_width(struct uterm_display *disp); +unsigned int uterm_display_get_height(struct uterm_display *disp); int uterm_display_get_state(struct uterm_display *disp); -int uterm_display_activate(struct uterm_display *disp, struct uterm_mode *mode); +int uterm_display_activate(struct uterm_display *disp); void uterm_display_deactivate(struct uterm_display *disp); int uterm_display_set_dpms(struct uterm_display *disp, int state); int uterm_display_get_dpms(const struct uterm_display *disp); @@ -176,7 +168,8 @@ int uterm_display_fake_blendv(struct uterm_display *disp, const struct uterm_vid /* video interface */ int uterm_video_new(struct uterm_video **out, struct ev_eloop *eloop, const char *node, - const char *backend, unsigned int desired_width, unsigned int desired_height); + const char *backend, unsigned int desired_width, unsigned int desired_height, + bool use_original); void uterm_video_ref(struct uterm_video *video); void uterm_video_unref(struct uterm_video *video); diff --git a/src/uterm_video_internal.h b/src/uterm_video_internal.h index 6447b4c2..abf186e7 100644 --- a/src/uterm_video_internal.h +++ b/src/uterm_video_internal.h @@ -39,18 +39,10 @@ /* backend-operations */ -struct mode_ops { - int (*init)(struct uterm_mode *mode); - void (*destroy)(struct uterm_mode *mode); - const char *(*get_name)(const struct uterm_mode *mode); - unsigned int (*get_width)(const struct uterm_mode *mode); - unsigned int (*get_height)(const struct uterm_mode *mode); -}; - struct display_ops { int (*init)(struct uterm_display *display); void (*destroy)(struct uterm_display *display); - int (*activate)(struct uterm_display *disp, struct uterm_mode *mode); + int (*activate)(struct uterm_display *disp); void (*deactivate)(struct uterm_display *disp); int (*set_dpms)(struct uterm_display *disp, int state); int (*use)(struct uterm_display *disp, bool *opengl); @@ -78,21 +70,6 @@ struct uterm_video_module { #define VIDEO_CALL(func, els, ...) (func ? func(__VA_ARGS__) : els) -/* uterm_mode */ - -struct uterm_mode { - struct shl_dlist list; - unsigned long ref; - struct uterm_display *disp; - - const struct mode_ops *ops; - void *data; -}; - -int mode_new(struct uterm_mode **out, const struct mode_ops *ops); -int uterm_mode_bind(struct uterm_mode *mode, struct uterm_display *disp); -void uterm_mode_unbind(struct uterm_mode *mode); - /* uterm_display */ #define DISPLAY_ONLINE 0x01 @@ -107,14 +84,12 @@ struct uterm_display { struct shl_dlist list; unsigned long ref; unsigned int flags; + unsigned int width; + unsigned int height; + struct uterm_video *video; struct shl_hook *hook; - struct shl_dlist modes; - struct uterm_mode *default_mode; - struct uterm_mode *desired_mode; - struct uterm_mode *current_mode; - struct uterm_mode *original_mode; int dpms; const struct display_ops *ops; @@ -149,6 +124,7 @@ struct uterm_video { struct shl_dlist displays; struct shl_hook *hook; + bool use_original; unsigned int desired_width; unsigned int desired_height; diff --git a/tests/test_output.c b/tests/test_output.c index e3374017..0d3912b6 100644 --- a/tests/test_output.c +++ b/tests/test_output.c @@ -66,13 +66,12 @@ static int blit_outputs(struct uterm_video *video) { struct uterm_display *iter; int j, ret; - struct uterm_mode *mode; j = 0; iter = uterm_video_get_displays(video); for (; iter; iter = uterm_display_next(iter)) { log_notice("Activating display %d %p...", j, iter); - ret = uterm_display_activate(iter, NULL); + ret = uterm_display_activate(iter); if (ret) log_err("Cannot activate display %d: %d", j, ret); else @@ -90,9 +89,9 @@ static int blit_outputs(struct uterm_video *video) if (uterm_display_get_state(iter) != UTERM_DISPLAY_ACTIVE) continue; - mode = uterm_display_get_current(iter); - ret = uterm_display_fill(iter, 0xff, 0xff, 0xff, 0, 0, uterm_mode_get_width(mode), - uterm_mode_get_height(mode)); + ret = uterm_display_fill(iter, 0xff, 0xff, 0xff, 0, 0, + uterm_display_get_width(iter), + uterm_display_get_height(iter)); if (ret) { log_err("cannot fill framebuffer"); continue; @@ -117,7 +116,6 @@ static int blit_outputs(struct uterm_video *video) static int list_outputs(struct uterm_video *video) { struct uterm_display *iter; - struct uterm_mode *cur, *mode; int i; log_notice("List of Outputs:"); @@ -125,18 +123,8 @@ static int list_outputs(struct uterm_video *video) i = 0; iter = uterm_video_get_displays(video); for (; iter; iter = uterm_display_next(iter)) { - cur = uterm_display_get_current(iter); - log_notice("Output %d:", i++); log_notice(" active: %d", uterm_display_get_state(iter)); - log_notice(" has current: %s", cur ? "yes" : "no"); - - mode = uterm_display_get_modes(iter); - for (; mode; mode = uterm_mode_next(mode)) { - log_notice(" Mode '%s':", uterm_mode_get_name(mode)); - log_notice(" x: %u", uterm_mode_get_width(mode)); - log_notice(" y: %u", uterm_mode_get_height(mode)); - } } log_notice("End of Output list"); @@ -218,13 +206,13 @@ int main(int argc, char **argv) log_notice("Creating video object using %s...", node); ret = uterm_video_new(&video, eloop, node, mode, output_conf.desired_width, - output_conf.desired_height); + output_conf.desired_height, false); if (ret) { if (!output_conf.fbdev) { log_notice("cannot create drm device; trying drm2d mode"); ret = uterm_video_new(&video, eloop, node, "drm2d", - output_conf.desired_width, - output_conf.desired_height); + output_conf.desired_width, output_conf.desired_height, + false); if (ret) goto err_exit; } else { From 9d7ce5ac00835f3fc26856cc40e9cd670f163528 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 5 Dec 2025 10:02:48 +0100 Subject: [PATCH 22/31] shared_drm: use the DRM_MODE_TYPE_PREFERRED Use the mode marked with the flag DRM_MODE_TYPE_PREFERRED as default mode, instead of the first of the list. Signed-off-by: Jocelyn Falempe --- src/uterm_drm_shared.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/uterm_drm_shared.c b/src/uterm_drm_shared.c index d25e66e1..b14a7624 100644 --- a/src/uterm_drm_shared.c +++ b/src/uterm_drm_shared.c @@ -588,8 +588,8 @@ static void bind_display(struct uterm_video *video, drmModeRes *res, drmModeConn shl_dlist_link_tail(&ddrm->modes, &mode->list); - /* TODO: more sophisticated default-mode selection */ - if (!ddrm->default_mode) + /* Use the mode marked as preferred, or the first if none is marked */ + if (!ddrm->default_mode || mode->info.type & DRM_MODE_TYPE_PREFERRED) ddrm->default_mode = mode; /* Save the original KMS mode for later use */ From 6964db1483a432012b1e3dcc93604da1b43d24ff Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Tue, 9 Dec 2025 14:26:43 +0100 Subject: [PATCH 23/31] Merge all kmscon_pty_set_xxx() into kmscon_pty_set_conf() Also simplify error handling Signed-off-by: Jocelyn Falempe --- src/kmscon_terminal.c | 23 +--------- src/pty.c | 103 +++++++++--------------------------------- src/pty.h | 8 +--- 3 files changed, 25 insertions(+), 109 deletions(-) diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c index 59c7d70d..fc90cb78 100644 --- a/src/kmscon_terminal.c +++ b/src/kmscon_terminal.c @@ -956,30 +956,11 @@ int kmscon_terminal_register(struct kmscon_session **out, struct kmscon_seat *se if (ret) goto err_font; - kmscon_pty_set_env_reset(term->pty, term->conf->reset_env); - - ret = kmscon_pty_set_term(term->pty, term->conf->term); - if (ret) - goto err_pty; - - ret = kmscon_pty_set_colorterm(term->pty, "kmscon"); - if (ret) - goto err_pty; - - ret = kmscon_pty_set_argv(term->pty, term->conf->argv); + ret = kmscon_pty_set_conf(term->pty, term->conf->term, "kmscon", term->conf->argv, + kmscon_seat_get_name(seat), term->conf->reset_env); if (ret) goto err_pty; - ret = kmscon_pty_set_seat(term->pty, kmscon_seat_get_name(seat)); - if (ret) - goto err_pty; - - if (vtnr > 0) { - ret = kmscon_pty_set_vtnr(term->pty, vtnr); - if (ret) - goto err_pty; - } - ret = ev_eloop_new_fd(term->eloop, &term->ptyfd, kmscon_pty_get_fd(term->pty), EV_READABLE, pty_event, term); if (ret) diff --git a/src/pty.c b/src/pty.c index 1402622c..d8fbba29 100644 --- a/src/pty.c +++ b/src/pty.c @@ -138,94 +138,33 @@ void kmscon_pty_unref(struct kmscon_pty *pty) free(pty); } -int kmscon_pty_set_term(struct kmscon_pty *pty, const char *term) +int kmscon_pty_set_conf(struct kmscon_pty *pty, const char *term, const char *colorterm, + char **argv, const char *seat, bool do_reset) { - char *t; - - if (!pty || !term) - return -EINVAL; - - t = strdup(term); - if (!t) - return -ENOMEM; - free(pty->term); - pty->term = t; - - return 0; -} - -int kmscon_pty_set_colorterm(struct kmscon_pty *pty, const char *colorterm) -{ - char *t; - - if (!pty || !colorterm) - return -EINVAL; - - t = strdup(colorterm); - if (!t) - return -ENOMEM; - free(pty->colorterm); - pty->colorterm = t; - - return 0; -} - -int kmscon_pty_set_argv(struct kmscon_pty *pty, char **argv) -{ - char **t; - int ret; - - if (!pty || !argv || !*argv || !**argv) - return -EINVAL; - - ret = shl_dup_array(&t, argv); - if (ret) - return ret; - - free(pty->argv); - pty->argv = t; - return 0; -} - -int kmscon_pty_set_seat(struct kmscon_pty *pty, const char *seat) -{ - char *t; - - if (!pty || !seat) - return -EINVAL; - - t = strdup(seat); - if (!t) - return -ENOMEM; - free(pty->seat); - pty->seat = t; - - return 0; -} - -int kmscon_pty_set_vtnr(struct kmscon_pty *pty, unsigned int vtnr) -{ - char *t; - int ret; - if (!pty) return -EINVAL; - ret = asprintf(&t, "%u", vtnr); - if (ret < 0) - return -ENOMEM; - free(pty->vtnr); - pty->vtnr = t; - - return 0; -} + pty->env_reset = do_reset; -void kmscon_pty_set_env_reset(struct kmscon_pty *pty, bool do_reset) -{ - if (!pty) - return; + if (term) { + pty->term = strdup(term); + if (!pty->term) + return -ENOMEM; + } + if (colorterm) { + pty->colorterm = strdup(colorterm); + if (!pty->colorterm) + return -ENOMEM; + } + if (seat) { + pty->seat = strdup(seat); + if (!pty->seat) + return -ENOMEM; + } - pty->env_reset = do_reset; + if (argv && *argv && **argv) + return shl_dup_array(&pty->argv, argv); + return 0; } int kmscon_pty_get_fd(struct kmscon_pty *pty) diff --git a/src/pty.h b/src/pty.h index d5729470..c59b5b28 100644 --- a/src/pty.h +++ b/src/pty.h @@ -52,12 +52,8 @@ typedef void (*kmscon_pty_input_cb)(struct kmscon_pty *pty, const char *u8, size int kmscon_pty_new(struct kmscon_pty **out, kmscon_pty_input_cb input_cb, void *data); void kmscon_pty_ref(struct kmscon_pty *pty); void kmscon_pty_unref(struct kmscon_pty *pty); -int kmscon_pty_set_term(struct kmscon_pty *pty, const char *term); -int kmscon_pty_set_colorterm(struct kmscon_pty *pty, const char *colorterm); -int kmscon_pty_set_argv(struct kmscon_pty *pty, char **argv); -int kmscon_pty_set_seat(struct kmscon_pty *pty, const char *seat); -int kmscon_pty_set_vtnr(struct kmscon_pty *pty, unsigned int vtnr); -void kmscon_pty_set_env_reset(struct kmscon_pty *pty, bool do_reset); +int kmscon_pty_set_conf(struct kmscon_pty *pty, const char *term, const char *colorterm, + char **argv, const char *seat, bool do_reset); int kmscon_pty_get_fd(struct kmscon_pty *pty); void kmscon_pty_dispatch(struct kmscon_pty *pty); From 0d6d85a8b865cac17529d049ae9a561db782ac59 Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Tue, 9 Dec 2025 14:45:49 +0100 Subject: [PATCH 24/31] Convert backspace delete to a runtime option, and enable it. So it's easier to switch back to previous behavior if needed Signed-off-by: Jocelyn Falempe --- docs/man/kmscon.1.xml.in | 8 ++++++++ docs/man/kmscon.conf.1.xml.in | 7 +++++++ meson.build | 2 -- meson.options | 4 ---- scripts/etc/kmscon.conf | 6 ++++++ src/kmscon_conf.c | 4 ++++ src/kmscon_conf.h | 2 ++ src/kmscon_terminal.c | 5 +++-- src/pty.c | 10 ++++++---- src/pty.h | 2 +- 10 files changed, 37 insertions(+), 13 deletions(-) diff --git a/docs/man/kmscon.1.xml.in b/docs/man/kmscon.1.xml.in index 87833421..4a2c4fc5 100644 --- a/docs/man/kmscon.1.xml.in +++ b/docs/man/kmscon.1.xml.in @@ -245,6 +245,14 @@ + + + + Send delete character when backspace is pressed. + (default: on) + + + diff --git a/docs/man/kmscon.conf.1.xml.in b/docs/man/kmscon.conf.1.xml.in index fab58825..40ef4ee8 100644 --- a/docs/man/kmscon.conf.1.xml.in +++ b/docs/man/kmscon.conf.1.xml.in @@ -199,6 +199,13 @@ font-name=Ubuntu Mono + + + + Send delete character when backspace is pressed. (default: on) + + + diff --git a/meson.build b/meson.build index 97399ddf..0982cfbf 100644 --- a/meson.build +++ b/meson.build @@ -121,7 +121,6 @@ endforeach config.set('BUILD_ENABLE_DEBUG', get_option('extra_debug')) config.set_quoted('BUILD_MODULE_DIR', prefix / moduledir) config.set_quoted('BUILD_CONFIG_DIR', prefix / sysconfdir) -config.set10('BUILD_BACKSPACE_SENDS_DELETE', get_option('backspace_sends_delete')) # Make all files include "config.h" by default. This shouldn't cause any # problems and we cannot forget to include it anymore. @@ -161,7 +160,6 @@ summary({ 'extra_debug': get_option('extra_debug'), 'tests': get_option('tests'), 'docs': enable_docs, - 'backspace_sends_delete': get_option('backspace_sends_delete'), }, section: 'Miscellaneous') # diff --git a/meson.options b/meson.options index a0501d39..3fe77614 100644 --- a/meson.options +++ b/meson.options @@ -34,7 +34,3 @@ option('session_dummy', type: 'feature', value: 'auto', description: 'dummy session') option('session_terminal', type: 'feature', value: 'auto', description: 'terminal session') - -# terminal options -option('backspace_sends_delete', type: 'boolean', value: false, - description: 'backspace sends ASCII delete (0177) instead of ASCII backspace (010)') diff --git a/scripts/etc/kmscon.conf b/scripts/etc/kmscon.conf index a3d7aae9..c48f3dbd 100644 --- a/scripts/etc/kmscon.conf +++ b/scripts/etc/kmscon.conf @@ -79,6 +79,12 @@ ## value of the $TERM variable #term=kmscon +## Reset environment [on] +#reset-env + +## Send delete when backspace is pressed [on] +#backspace-delete + ## Scrollback buffer size, in lines #sb-size=10000 diff --git a/src/kmscon_conf.c b/src/kmscon_conf.c index 47c56a5b..9c498015 100644 --- a/src/kmscon_conf.c +++ b/src/kmscon_conf.c @@ -94,6 +94,9 @@ static void print_help() "\t --reset-env [on]\n" "\t Reset environment before running child\n" "\t process\n" + "\t --backspace-delete [on]\n" + "\t Send delete character when backspace is\n" + "\t pressed\n" "\t --sb-size [1000]\n" "\t Size of the scrollback-buffer in lines\n" "\n" @@ -708,6 +711,7 @@ int kmscon_conf_new(struct conf_ctx **out) &conf->login, false), CONF_OPTION_STRING('t', "term", &conf->term, "xterm-256color"), CONF_OPTION_BOOL(0, "reset-env", &conf->reset_env, true), + CONF_OPTION_BOOL(0, "backspace-delete", &conf->backspace_delete, true), CONF_OPTION_UINT(0, "sb-size", &conf->sb_size, 1000), /* Input Options */ diff --git a/src/kmscon_conf.h b/src/kmscon_conf.h index b3836f12..62886bf6 100644 --- a/src/kmscon_conf.h +++ b/src/kmscon_conf.h @@ -91,6 +91,8 @@ struct kmscon_conf_t { char *term; /* reset environment */ bool reset_env; + /* Send delete when backspace is pressed */ + bool backspace_delete; /* terminal scroll-back buffer size */ unsigned int sb_size; diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c index fc90cb78..cbbc788d 100644 --- a/src/kmscon_terminal.c +++ b/src/kmscon_terminal.c @@ -935,7 +935,7 @@ int kmscon_terminal_register(struct kmscon_session **out, struct kmscon_seat *se if (ret) goto err_con; - tsm_vte_set_backspace_sends_delete(term->vte, BUILD_BACKSPACE_SENDS_DELETE); + tsm_vte_set_backspace_sends_delete(term->vte, term->conf->backspace_delete); tsm_vte_set_osc_cb(term->vte, osc_event, (void *)term); tsm_vte_set_mouse_cb(term->vte, mouse_event, (void *)term); @@ -957,7 +957,8 @@ int kmscon_terminal_register(struct kmscon_session **out, struct kmscon_seat *se goto err_font; ret = kmscon_pty_set_conf(term->pty, term->conf->term, "kmscon", term->conf->argv, - kmscon_seat_get_name(seat), term->conf->reset_env); + kmscon_seat_get_name(seat), term->conf->reset_env, + term->conf->backspace_delete); if (ret) goto err_pty; diff --git a/src/pty.c b/src/pty.c index d8fbba29..96cf9b08 100644 --- a/src/pty.c +++ b/src/pty.c @@ -69,6 +69,7 @@ struct kmscon_pty { char *seat; char *vtnr; bool env_reset; + bool backspace_delete; time_t last_spawn_time; int retry_count; @@ -139,12 +140,13 @@ void kmscon_pty_unref(struct kmscon_pty *pty) } int kmscon_pty_set_conf(struct kmscon_pty *pty, const char *term, const char *colorterm, - char **argv, const char *seat, bool do_reset) + char **argv, const char *seat, bool do_reset, bool backspace) { if (!pty) return -EINVAL; pty->env_reset = do_reset; + pty->backspace_delete = backspace; if (term) { pty->term = strdup(term); @@ -242,7 +244,7 @@ static void __attribute__((noreturn)) exec_child(const char *term, const char *c exit(EXIT_FAILURE); } -static void setup_child(int master, struct winsize *ws) +static void setup_child(int master, bool backspace_delete, struct winsize *ws) { int ret; sigset_t sigset; @@ -298,7 +300,7 @@ static void setup_child(int master, struct winsize *ws) goto err_out; } - if (BUILD_BACKSPACE_SENDS_DELETE) { + if (backspace_delete) { /* erase character should be delete */ attr.c_cc[VERASE] = 0177; } else { @@ -358,7 +360,7 @@ static int pty_spawn(struct kmscon_pty *pty, int master, unsigned short width, log_err("cannot fork: %m"); return -errno; case 0: - setup_child(master, &ws); + setup_child(master, pty->backspace_delete, &ws); exec_child(pty->term, pty->colorterm, pty->argv, pty->seat, pty->vtnr, pty->env_reset, drm); exit(EXIT_FAILURE); diff --git a/src/pty.h b/src/pty.h index c59b5b28..0eac4c8f 100644 --- a/src/pty.h +++ b/src/pty.h @@ -53,7 +53,7 @@ int kmscon_pty_new(struct kmscon_pty **out, kmscon_pty_input_cb input_cb, void * void kmscon_pty_ref(struct kmscon_pty *pty); void kmscon_pty_unref(struct kmscon_pty *pty); int kmscon_pty_set_conf(struct kmscon_pty *pty, const char *term, const char *colorterm, - char **argv, const char *seat, bool do_reset); + char **argv, const char *seat, bool do_reset, bool backspace); int kmscon_pty_get_fd(struct kmscon_pty *pty); void kmscon_pty_dispatch(struct kmscon_pty *pty); From d97a43cbeeb29eb8bbb4e8a503cdc2bd01085b4e Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Thu, 27 Nov 2025 13:18:02 +0100 Subject: [PATCH 25/31] drm2d: use libdrm functions for dumb buffers drm2d directly calls the ioctl, but it's cleaner to use the libdrm's helpers. Addfb is deprecated for a long time, so use Addfb2, which allows to specify the pixel format. Signed-off-by: Jocelyn Falempe --- src/uterm_drm2d_internal.h | 2 +- src/uterm_drm2d_video.c | 65 +++++++++++++++++--------------------- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/src/uterm_drm2d_internal.h b/src/uterm_drm2d_internal.h index e00a7dd7..98fc0388 100644 --- a/src/uterm_drm2d_internal.h +++ b/src/uterm_drm2d_internal.h @@ -35,7 +35,7 @@ #include "uterm_video.h" struct uterm_drm2d_rb { - uint32_t fb; + uint32_t id; uint32_t handle; uint32_t stride; uint64_t size; diff --git a/src/uterm_drm2d_video.c b/src/uterm_drm2d_video.c index b6b52c42..af3d90a1 100644 --- a/src/uterm_drm2d_video.c +++ b/src/uterm_drm2d_video.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -72,50 +73,47 @@ static void display_destroy(struct uterm_display *disp) uterm_drm_display_destroy(disp); } +static int drm_addfb2(int fd, uint32_t width, uint32_t height, struct uterm_drm2d_rb *rb) +{ + uint32_t handles[4] = {rb->handle, 0, 0, 0}; + uint32_t pitches[4] = {rb->stride, 0, 0, 0}; + uint32_t offsets[4] = {0, 0, 0, 0}; + + return drmModeAddFB2(fd, width, height, DRM_FORMAT_XRGB8888, handles, pitches, offsets, + &rb->id, 0); +} + static int init_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) { int ret, r; struct uterm_video *video = disp->video; struct uterm_drm_video *vdrm = video->data; - struct drm_mode_create_dumb req; - struct drm_mode_destroy_dumb dreq; - struct drm_mode_map_dumb mreq; - - memset(&req, 0, sizeof(req)); - req.width = disp->width; - req.height = disp->height; - req.bpp = 32; - req.flags = 0; - - ret = drmIoctl(vdrm->fd, DRM_IOCTL_MODE_CREATE_DUMB, &req); - if (ret < 0) { + uint32_t width, height; + uint64_t mmap_offset; + + width = disp->width; + height = disp->height; + + if (drmModeCreateDumbBuffer(vdrm->fd, width, height, 32, 0, &rb->handle, &rb->stride, + &rb->size)) { log_err("cannot create dumb drm buffer"); return -EFAULT; } - rb->handle = req.handle; - rb->stride = req.pitch; - rb->size = req.size; - - ret = drmModeAddFB(vdrm->fd, req.width, req.height, 24, 32, rb->stride, rb->handle, - &rb->fb); + ret = drm_addfb2(vdrm->fd, width, height, rb); if (ret) { log_err("cannot add drm-fb"); ret = -EFAULT; goto err_buf; } - memset(&mreq, 0, sizeof(mreq)); - mreq.handle = rb->handle; - - ret = drmIoctl(vdrm->fd, DRM_IOCTL_MODE_MAP_DUMB, &mreq); + ret = drmModeMapDumbBuffer(vdrm->fd, rb->handle, &mmap_offset); if (ret) { - log_err("cannot map dumb buffer"); - ret = -EFAULT; + log_err("Cannot map dumb buffer"); goto err_fb; } - rb->map = mmap(0, rb->size, PROT_READ | PROT_WRITE, MAP_SHARED, vdrm->fd, mreq.offset); + rb->map = mmap(0, rb->size, PROT_READ | PROT_WRITE, MAP_SHARED, vdrm->fd, mmap_offset); if (rb->map == MAP_FAILED) { log_err("cannot mmap dumb buffer"); ret = -EFAULT; @@ -126,11 +124,9 @@ static int init_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) return 0; err_fb: - drmModeRmFB(vdrm->fd, rb->fb); + drmModeRmFB(vdrm->fd, rb->id); err_buf: - memset(&dreq, 0, sizeof(dreq)); - dreq.handle = rb->handle; - r = drmIoctl(vdrm->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &dreq); + r = drmModeDestroyDumbBuffer(vdrm->fd, rb->handle); if (r) log_warning("cannot destroy dumb buffer (%d/%d): %m", ret, errno); @@ -140,14 +136,11 @@ static int init_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) static void destroy_rb(struct uterm_display *disp, struct uterm_drm2d_rb *rb) { struct uterm_drm_video *vdrm = disp->video->data; - struct drm_mode_destroy_dumb dreq; int ret; munmap(rb->map, rb->size); - drmModeRmFB(vdrm->fd, rb->fb); - memset(&dreq, 0, sizeof(dreq)); - dreq.handle = rb->handle; - ret = drmIoctl(vdrm->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &dreq); + drmModeRmFB(vdrm->fd, rb->id); + ret = drmModeDestroyDumbBuffer(vdrm->fd, rb->handle); if (ret) log_warning("cannot destroy dumb buffer (%d/%d): %m", ret, errno); } @@ -185,7 +178,7 @@ static int display_activate(struct uterm_display *disp) if (ret) goto err_rb; - ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d2d->rb[0].fb, 0, 0, &ddrm->conn_id, 1, + ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d2d->rb[0].id, 0, 0, &ddrm->conn_id, 1, minfo); if (ret && ddrm->current_mode == ddrm->desired_mode && @@ -245,7 +238,7 @@ static int display_swap(struct uterm_display *disp, bool immediate) struct uterm_drm2d_display *d2d = uterm_drm_display_get_data(disp); rb = d2d->current_rb ^ 1; - ret = uterm_drm_display_swap(disp, d2d->rb[rb].fb, immediate); + ret = uterm_drm_display_swap(disp, d2d->rb[rb].id, immediate); if (ret) return ret; From e7f569caa056f5cc3dd6ed3882ff44bb1f397dca Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 5 Dec 2025 17:14:20 +0100 Subject: [PATCH 26/31] drm3d: Use drmModeAddFB2() drmModeAddFB is deprecated, as the pixel format can't be specified Also gbm_bo_get_stride() replaced gbm_bo_get_pitch 13 years ago. Signed-off-by: Jocelyn Falempe --- src/uterm_drm3d_internal.h | 2 +- src/uterm_drm3d_video.c | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/uterm_drm3d_internal.h b/src/uterm_drm3d_internal.h index 385b2167..854cf733 100644 --- a/src/uterm_drm3d_internal.h +++ b/src/uterm_drm3d_internal.h @@ -55,7 +55,7 @@ struct uterm_drm3d_rb { struct uterm_display *disp; struct gbm_bo *bo; - uint32_t fb; + uint32_t id; }; struct uterm_drm3d_display { diff --git a/src/uterm_drm3d_video.c b/src/uterm_drm3d_video.c index a8ffece2..d66ec46c 100644 --- a/src/uterm_drm3d_video.c +++ b/src/uterm_drm3d_video.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -88,18 +89,26 @@ static void bo_destroy_event(struct gbm_bo *bo, void *data) return; vdrm = rb->disp->video->data; - drmModeRmFB(vdrm->fd, rb->fb); + drmModeRmFB(vdrm->fd, rb->id); free(rb); } +static int drm_addfb2(int fd, struct uterm_drm3d_rb *rb) +{ + uint32_t handles[4] = {gbm_bo_get_handle(rb->bo).u32, 0, 0, 0}; + uint32_t pitches[4] = {gbm_bo_get_stride(rb->bo), 0, 0, 0}; + uint32_t offsets[4] = {0, 0, 0, 0}; + + return drmModeAddFB2(fd, gbm_bo_get_width(rb->bo), gbm_bo_get_height(rb->bo), + DRM_FORMAT_XRGB8888, handles, pitches, offsets, &rb->id, 0); +} + static struct uterm_drm3d_rb *bo_to_rb(struct uterm_display *disp, struct gbm_bo *bo) { struct uterm_drm3d_rb *rb = gbm_bo_get_user_data(bo); struct uterm_video *video = disp->video; struct uterm_drm_video *vdrm = video->data; int ret; - unsigned int stride, handle, width, height; - ; if (rb) return rb; @@ -112,16 +121,7 @@ static struct uterm_drm3d_rb *bo_to_rb(struct uterm_display *disp, struct gbm_bo rb->disp = disp; rb->bo = bo; -#ifdef BUILD_HAVE_GBM_BO_GET_PITCH - stride = gbm_bo_get_pitch(rb->bo); -#else - stride = gbm_bo_get_stride(rb->bo); -#endif - handle = gbm_bo_get_handle(rb->bo).u32; - width = gbm_bo_get_width(rb->bo); - height = gbm_bo_get_height(rb->bo); - - ret = drmModeAddFB(vdrm->fd, width, height, 24, 32, stride, handle, &rb->fb); + ret = drm_addfb2(vdrm->fd, rb); if (ret) { log_err("cannot add drm-fb (%d): %m", errno); free(rb); @@ -209,7 +209,7 @@ static int display_activate(struct uterm_display *disp) goto err_bo; } - ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d3d->current->fb, 0, 0, &ddrm->conn_id, 1, + ret = drmModeSetCrtc(vdrm->fd, ddrm->crtc_id, d3d->current->id, 0, 0, &ddrm->conn_id, 1, minfo); if (ret && ddrm->current_mode == ddrm->desired_mode && ddrm->current_mode != ddrm->default_mode) { @@ -319,7 +319,7 @@ static int display_swap(struct uterm_display *disp, bool immediate) return -EFAULT; } - ret = uterm_drm_display_swap(disp, rb->fb, immediate); + ret = uterm_drm_display_swap(disp, rb->id, immediate); if (ret) { gbm_surface_release_buffer(d3d->gbm, bo); return ret; From 7487e2c8303fb4dea08406c80f393bba1b32cfeb Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 12 Dec 2025 09:35:49 +0100 Subject: [PATCH 27/31] Enable mouse support by default Mouse support was added in 9.2.0, and there are no issue raised about it, so let's enable it by default. Signed-off-by: Jocelyn Falempe --- docs/man/kmscon.1.xml.in | 2 +- docs/man/kmscon.conf.1.xml.in | 2 +- src/kmscon_conf.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/man/kmscon.1.xml.in b/docs/man/kmscon.1.xml.in index 4a2c4fc5..8066311a 100644 --- a/docs/man/kmscon.1.xml.in +++ b/docs/man/kmscon.1.xml.in @@ -339,7 +339,7 @@ - Enable mouse/touchpad/trackpoint in kmscon (default: off). + Enable mouse/touchpad/trackpoint in kmscon (default: on). It allows to select, and copy/paste text with a pointing device, and also to scroll with the mouse wheel. It's still experimental, and may not work with specific devices. diff --git a/docs/man/kmscon.conf.1.xml.in b/docs/man/kmscon.conf.1.xml.in index 40ef4ee8..bfb433aa 100644 --- a/docs/man/kmscon.conf.1.xml.in +++ b/docs/man/kmscon.conf.1.xml.in @@ -273,7 +273,7 @@ font-name=Ubuntu Mono - Enable mouse/touchpad/trackpoint in kmscon (default: off). + Enable mouse/touchpad/trackpoint in kmscon (default: on). It allows to select, and copy/paste text with a pointing device, and also to scroll with the mouse wheel. It's still experimental, and may not work with specific devices. diff --git a/src/kmscon_conf.c b/src/kmscon_conf.c index 9c498015..0a262138 100644 --- a/src/kmscon_conf.c +++ b/src/kmscon_conf.c @@ -113,8 +113,8 @@ static void print_help() "\t Initial delay for key-repeat in ms\n" "\t --xkb-repeat-rate [50]\n" "\t Delay between two key repeats in ms\n" - "\t --mouse [off]\n" - "\t Enable experimental mouse support\n" + "\t --mouse [on]\n" + "\t Enable mouse support\n" "\n" "Grabs / Keyboard-Shortcuts:\n" "\t --grab-scroll-up [Up]\n" @@ -723,7 +723,7 @@ int kmscon_conf_new(struct conf_ctx **out) CONF_OPTION_STRING(0, "xkb-compose-file", &conf->xkb_compose_file, ""), CONF_OPTION_UINT(0, "xkb-repeat-delay", &conf->xkb_repeat_delay, 250), CONF_OPTION_UINT(0, "xkb-repeat-rate", &conf->xkb_repeat_rate, 50), - CONF_OPTION_BOOL(0, "mouse", &conf->mouse, false), + CONF_OPTION_BOOL(0, "mouse", &conf->mouse, true), /* Grabs / Keyboard-Shortcuts */ CONF_OPTION_GRAB(0, "grab-scroll-up", &conf->grab_scroll_up, &def_grab_scroll_up), From 4399b329c717afeaad48c2749412289022d37db7 Mon Sep 17 00:00:00 2001 From: Jerome Tollet Date: Sat, 13 Dec 2025 18:35:20 +0100 Subject: [PATCH 28/31] Add --grab-reboot option to trigger system reboot via keyboard shortcut This commit adds a new configurable keyboard shortcut option --grab-reboot that allows users to reboot the system directly from kmscon. Features: - Disabled by default (user must explicitly configure a key combination) - Uses direct reboot() system call for reliability - Calls sync() before reboot to ensure data safety - Independent of --session-control flag - Fully configurable key combination (e.g., Delete) - Includes comprehensive documentation in man pages Implementation details: - Added grab_reboot field to kmscon_conf_t structure - Added seat_trigger_reboot() function using reboot(RB_AUTOBOOT) - Integrated into seat-level input event handling - Updated both kmscon.1 and kmscon.conf.1 man pages Usage example: kmscon --grab-reboot='Delete' --- docs/man/kmscon.1.xml.in | 10 ++++++++++ docs/man/kmscon.conf.1.xml.in | 11 +++++++++++ src/kmscon_conf.c | 3 +++ src/kmscon_conf.h | 2 ++ src/kmscon_seat.c | 22 +++++++++++++++++++++- 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/docs/man/kmscon.1.xml.in b/docs/man/kmscon.1.xml.in index 8066311a..bfca457d 100644 --- a/docs/man/kmscon.1.xml.in +++ b/docs/man/kmscon.1.xml.in @@ -475,6 +475,16 @@ (default: <Logo>Minus) + + + + Reboot the system when this keyboard shortcut is pressed. + This option is disabled by default (no default key binding). + Use with caution as the reboot is immediate without confirmation. + Example: --grab-reboot=<Ctrl><Alt>Delete + (default: disabled) + + Video Options: diff --git a/docs/man/kmscon.conf.1.xml.in b/docs/man/kmscon.conf.1.xml.in index bfb433aa..40c1f6db 100644 --- a/docs/man/kmscon.conf.1.xml.in +++ b/docs/man/kmscon.conf.1.xml.in @@ -373,6 +373,17 @@ font-name=Ubuntu Mono + + + + Reboot the system when this keyboard shortcut is pressed. + This option is disabled by default. + Use with caution as the reboot is immediate. + Example: grab-reboot=<Ctrl><Alt>Delete + (default: disabled) + + + ### Video Options ### diff --git a/src/kmscon_conf.c b/src/kmscon_conf.c index 0a262138..028335a2 100644 --- a/src/kmscon_conf.c +++ b/src/kmscon_conf.c @@ -143,6 +143,8 @@ static void print_help() "\t Rotate output clock-wise\n" "\t --grab-rotate-ccw [Minus]\n" "\t Rotate output counter-clock-wise\n" + "\t --grab-reboot []\n" + "\t Reboot the system (disabled by default)\n" "\n" "Video Options:\n" "\t --drm [on] Use DRM if available\n" @@ -746,6 +748,7 @@ int kmscon_conf_new(struct conf_ctx **out) CONF_OPTION_GRAB(0, "grab-rotate-cw", &conf->grab_rotate_cw, &def_grab_rotate_cw), CONF_OPTION_GRAB(0, "grab-rotate-ccw", &conf->grab_rotate_ccw, &def_grab_rotate_ccw), + CONF_OPTION_GRAB(0, "grab-reboot", &conf->grab_reboot, NULL), /* Video Options */ CONF_OPTION_BOOL_FULL(0, "drm", aftercheck_drm, NULL, NULL, &conf->drm, true), diff --git a/src/kmscon_conf.h b/src/kmscon_conf.h index 62886bf6..c76f2b7c 100644 --- a/src/kmscon_conf.h +++ b/src/kmscon_conf.h @@ -143,6 +143,8 @@ struct kmscon_conf_t { struct conf_grab *grab_rotate_cw; /* rotate output counter-clock-wise grab */ struct conf_grab *grab_rotate_ccw; + /* reboot system grab */ + struct conf_grab *grab_reboot; /* Video Options */ /* use DRM if available */ diff --git a/src/kmscon_seat.c b/src/kmscon_seat.c index 48b4164f..22aefeac 100644 --- a/src/kmscon_seat.c +++ b/src/kmscon_seat.c @@ -32,6 +32,8 @@ #include #include #include +#include +#include #include "conf.h" #include "eloop.h" #include "kmscon_conf.h" @@ -559,6 +561,18 @@ static int seat_vt_event(struct uterm_vt *vt, struct uterm_vt_event *ev, void *d return 0; } +static void seat_trigger_reboot(struct kmscon_seat *seat) +{ + log_warning("reboot triggered by keyboard shortcut on seat %s", seat->name); + + sync(); /* Synchronize disk buffers */ + + if (reboot(RB_AUTOBOOT) < 0) { + log_error("failed to reboot system: %m"); + } +} + + static void seat_input_event(struct uterm_input *input, struct uterm_input_key_event *ev, void *data) { @@ -634,7 +648,13 @@ static void seat_input_event(struct uterm_input *input, struct uterm_input_key_e } return; } -} + if (seat->conf->grab_reboot && + conf_grab_matches(seat->conf->grab_reboot, ev->mods, ev->num_syms, ev->keysyms)) { + ev->handled = true; + seat_trigger_reboot(seat); + return; + } + } /* * Locale sucks, but we need its value for Compose support. Since we don't want From 9f9a8ecc2e0bf4cb7d762cd3ac1004cb77776cce Mon Sep 17 00:00:00 2001 From: Jerome Tollet Date: Sun, 14 Dec 2025 09:39:02 +0100 Subject: [PATCH 29/31] fix: apply clang-format-20 formatting --- src/kmscon_seat.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/kmscon_seat.c b/src/kmscon_seat.c index 22aefeac..19b4e5db 100644 --- a/src/kmscon_seat.c +++ b/src/kmscon_seat.c @@ -32,8 +32,8 @@ #include #include #include -#include #include +#include #include "conf.h" #include "eloop.h" #include "kmscon_conf.h" @@ -565,14 +565,13 @@ static void seat_trigger_reboot(struct kmscon_seat *seat) { log_warning("reboot triggered by keyboard shortcut on seat %s", seat->name); - sync(); /* Synchronize disk buffers */ + sync(); /* Synchronize disk buffers */ if (reboot(RB_AUTOBOOT) < 0) { log_error("failed to reboot system: %m"); } } - static void seat_input_event(struct uterm_input *input, struct uterm_input_key_event *ev, void *data) { @@ -654,7 +653,7 @@ static void seat_input_event(struct uterm_input *input, struct uterm_input_key_e seat_trigger_reboot(seat); return; } - } +} /* * Locale sucks, but we need its value for Compose support. Since we don't want From b99b3bc6371226aea9ea57a072fd20623a87d29b Mon Sep 17 00:00:00 2001 From: Jerome Tollet Date: Sun, 14 Dec 2025 22:43:03 +0100 Subject: [PATCH 30/31] Forward mouse wheel events to applications in mouse tracking mode When an application enables mouse tracking (e.g., vim with 'set mouse=a'), kmscon now forwards mouse wheel events to the application by converting them to button events (button 4 for scroll up, button 5 for scroll down), following the xterm mouse protocol. Previously, wheel events were only handled by kmscon itself for scrolling the terminal history, even when an application requested mouse tracking. This change allows: - Mouse wheel to scroll content in applications like vim, less, etc. when they enable mouse mode - Mouse wheel to continue scrolling kmscon history when no application has enabled mouse tracking (shell prompt) Changes: - Add UTERM_WHEEL case to forward_pointer_event() - Convert wheel events to button 4/5 according to xterm protocol - Use local button variable to allow modification before forwarding --- src/kmscon_terminal.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c index cbbc788d..6ee36d52 100644 --- a/src/kmscon_terminal.c +++ b/src/kmscon_terminal.c @@ -683,6 +683,9 @@ static void forward_pointer_event(struct kmscon_terminal *term, struct uterm_input_pointer_event *ev) { unsigned int event; + unsigned int button; + + button = ev->button; switch (ev->event) { case UTERM_MOVED: @@ -694,11 +697,19 @@ static void forward_pointer_event(struct kmscon_terminal *term, else event = TSM_MOUSE_EVENT_RELEASED; break; + case UTERM_WHEEL: + /* Convert wheel events to button 4 (scroll up) or 5 (scroll down) */ + event = TSM_MOUSE_EVENT_PRESSED; + if (ev->wheel > 0) + button = 4; /* Scroll up */ + else + button = 5; /* Scroll down */ + break; default: return; } tsm_vte_handle_mouse(term->vte, term->pointer.posx, term->pointer.posy, term->pointer.x, - term->pointer.y, ev->button, event, 0); + term->pointer.y, button, event, 0); } static void handle_pointer_button(struct kmscon_terminal *term, From 78e48a1f571632c15020fece83acf78094e6648e Mon Sep 17 00:00:00 2001 From: Jocelyn Falempe Date: Fri, 19 Dec 2025 13:41:45 +0100 Subject: [PATCH 31/31] Don't print function/file for log_notice Adding \n at the end of the log string remove the function name, and file line. For generic message, this just clutter the logs. Signed-off-by: Jocelyn Falempe --- src/kmscon_main.c | 2 +- src/kmscon_terminal.c | 2 +- src/shl_log.c | 2 +- src/uterm_vt.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/kmscon_main.c b/src/kmscon_main.c index 92474a36..ecdccbc8 100644 --- a/src/kmscon_main.c +++ b/src/kmscon_main.c @@ -609,7 +609,7 @@ int main(int argc, char **argv) goto err_unload; if (!app.conf->listen && !app.running_seats) { - log_notice("no running seats; exiting"); + log_notice("no running seats; exiting\n"); } else { log_debug("%u running seats after startup", app.running_seats); ev_eloop_run(app.eloop, -1); diff --git a/src/kmscon_terminal.c b/src/kmscon_terminal.c index 6ee36d52..8d634c0b 100644 --- a/src/kmscon_terminal.c +++ b/src/kmscon_terminal.c @@ -517,7 +517,7 @@ static int add_display(struct kmscon_terminal *term, struct uterm_display *disp) shl_dlist_link(&term->screens, &scr->list); - log_notice("Using video backend [%s] with text renderer [%s] and font engine [%s]", + log_notice("Using video backend [%s] with text renderer [%s] and font engine [%s]\n", uterm_display_backend_name(disp), scr->txt->ops->name, term->font->ops->name); log_debug("added display %p to terminal %p", disp, term); diff --git a/src/shl_log.c b/src/shl_log.c index e5b1b79b..681dde54 100644 --- a/src/shl_log.c +++ b/src/shl_log.c @@ -448,6 +448,6 @@ void log_print_init(const char *appname) { if (!appname) appname = ""; - log_format(LOG_DEFAULT_CONF, NULL, LOG_NOTICE, "%s Revision %s %s %s", appname, + log_format(LOG_DEFAULT_CONF, NULL, LOG_NOTICE, "%s Revision %s %s %s\n", appname, shl_git_head, __DATE__, __TIME__); } diff --git a/src/uterm_vt.c b/src/uterm_vt.c index 42ef06e0..24903c61 100644 --- a/src/uterm_vt.c +++ b/src/uterm_vt.c @@ -277,7 +277,7 @@ static int open_tty(const char *dev, int *tty_fd, int *tty_num) if (!dev || !tty_fd || !tty_num) return -EINVAL; - log_notice("using tty %s", dev); + log_notice("using tty %s\n", dev); fd = open(dev, O_RDWR | O_NOCTTY | O_CLOEXEC); if (fd < 0) {