#define _POSIX_C_SOURCE 200809L #include #include #include #include #include #include #include #include "log.h" #include "util.h" int wrap(int i, int max) { return ((i % max) + max) % max; } uint32_t parse_color(const char *color) { if (color[0] == '#') { ++color; } int len = strlen(color); if (len != 6 && len != 8) { sway_log(SWAY_DEBUG, "Invalid color %s, defaulting to color 0xFFFFFFFF", color); return 0xFFFFFFFF; } uint32_t res = (uint32_t)strtoul(color, NULL, 16); if (strlen(color) == 6) { res = (res << 8) | 0xFF; } return res; } bool parse_boolean(const char *boolean, bool current) { if (strcasecmp(boolean, "1") == 0 || strcasecmp(boolean, "yes") == 0 || strcasecmp(boolean, "on") == 0 || strcasecmp(boolean, "true") == 0 || strcasecmp(boolean, "enable") == 0 || strcasecmp(boolean, "enabled") == 0 || strcasecmp(boolean, "active") == 0) { return true; } else if (strcasecmp(boolean, "toggle") == 0) { return !current; } // All other values are false to match i3 return false; } float parse_float(const char *value) { errno = 0; char *end; float flt = strtof(value, &end); if (*end || errno) { sway_log(SWAY_DEBUG, "Invalid float value '%s', defaulting to NAN", value); return NAN; } return flt; } const char *sway_wl_output_subpixel_to_string(enum wl_output_subpixel subpixel) { switch (subpixel) { case WL_OUTPUT_SUBPIXEL_UNKNOWN: return "unknown"; case WL_OUTPUT_SUBPIXEL_NONE: return "none"; case WL_OUTPUT_SUBPIXEL_HORIZONTAL_RGB: return "rgb"; case WL_OUTPUT_SUBPIXEL_HORIZONTAL_BGR: return "bgr"; case WL_OUTPUT_SUBPIXEL_VERTICAL_RGB: return "vrgb"; case WL_OUTPUT_SUBPIXEL_VERTICAL_BGR: return "vbgr"; } sway_assert(false, "Unknown value for wl_output_subpixel."); return NULL; } bool set_cloexec(int fd, bool cloexec) { int flags = fcntl(fd, F_GETFD); if (flags == -1) { sway_log_errno(SWAY_ERROR, "fcntl failed"); return false; } if (cloexec) { flags = flags | FD_CLOEXEC; } else { flags = flags & ~FD_CLOEXEC; } if (fcntl(fd, F_SETFD, flags) == -1) { sway_log_errno(SWAY_ERROR, "fcntl failed"); return false; } return true; }