From cd8509637458c2e3ceedbe173ff20180ce0ea25a Mon Sep 17 00:00:00 2001 From: Benjamin Barenblat Date: Mon, 21 Oct 2019 10:56:55 -0400 Subject: xssxss, an LD_PRELOAD to suspend XScreenSaver with XScreenSaverSuspend --- xsslog.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 xsslog.c (limited to 'xsslog.c') diff --git a/xsslog.c b/xsslog.c new file mode 100644 index 0000000..e6d7a63 --- /dev/null +++ b/xsslog.c @@ -0,0 +1,61 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy of +// the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. + +#include "xsslog.h" + +#include +#include +#include +#include +#include + +static void StrAppend4(char target[], const char a[], const char b[], + const char c[], const char d[]) { + stpcpy(stpcpy(stpcpy(stpcpy(target, a), b), c), d); +} + +void CheckErrnoImpl(const bool condition, const char description[]) { + if (condition) { + return; + } + const int e = errno; + char buf[128]; + fprintf(stderr, "%s: check %s failed: %s\n", kProjectName, description, + strerror_r(e, buf, 128)); + _Exit(1); +} + +void CheckRetImpl(const int e, const char description[]) { + if (e == 0) { + return; + } + char buf[128]; + fprintf(stderr, "%s: %s failed: %s\n", kProjectName, description, + strerror_r(e, buf, 128)); + _Exit(1); +} + +void LogDebug(const char* const format, ...) { + const char colon_space[] = ": "; + char* const prefixed_format = + calloc(strlen(kProjectName) + strlen(colon_space) + strlen(format) + 2, + sizeof(char)); + CHECK_ERRNO(prefixed_format != NULL); + StrAppend4(prefixed_format, kProjectName, ": ", format, "\n"); + va_list args; + va_start(args, format); + vfprintf(stderr, prefixed_format, args); + va_end(args); + free(prefixed_format); +} -- cgit v1.2.3