Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:12.1
gnome-session
gnome-session-gnome.fallback-boot-arg.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File gnome-session-gnome.fallback-boot-arg.patch of Package gnome-session
commit 2613036679b7691c93f5bbd1e15379d80fbb9bf6 Author: Vincent Untz <vuntz@gnome.org> Date: Wed Oct 19 13:14:50 2011 +0200 tools: Look at gnome.fallback argument in kernel boot line This is a quick way to let users easily force the fallback (or non-fallback mode) with gnome.fallback=0/1 on boot. diff --git a/tools/gnome-session-check-accelerated-helper.c b/tools/gnome-session-check-accelerated-helper.c index 3f83f76..c1fbe9d 100644 --- a/tools/gnome-session-check-accelerated-helper.c +++ b/tools/gnome-session-check-accelerated-helper.c @@ -70,7 +70,9 @@ /* for strcasestr */ #define _GNU_SOURCE +#include <ctype.h> #include <stdio.h> +#include <stdlib.h> #include <string.h> #include <X11/Xlib.h> @@ -87,6 +89,54 @@ _print_error (const char *str) } static int +_parse_kcmdline (void) +{ + FILE *kcmdline; + char *line = NULL; + size_t line_len = 0; + int ret = -1; + + kcmdline = fopen("/proc/cmdline", "r"); + if (kcmdline == NULL) + return ret; + + while (getline (&line, &line_len, kcmdline) != -1) { + const char *arg; + const char *str; + int key_len = strlen ("gnome.fallback="); + + if (line == NULL) + break; + + /* don't break if we found the argument once: last mention wins */ + + str = line; + do { + arg = strstr (str, "gnome.fallback="); + str = arg + key_len; + + if (arg && + (arg == line || isspace (arg[-1])) && /* gnome.fallback= is really the beginning of an argument */ + (isdigit (arg[key_len]))) { /* the first character of the value of this argument is an integer */ + if ((arg[key_len+1] == '\0' || isspace (arg[key_len+1]))) /* the value of this argument is only one character long */ + ret = arg[key_len] - '0'; + else /* invalid value */ + ret = 0xDEAD; + + } + } while (arg != NULL); + + free (line); + line = NULL; + line_len = 0; + } + + fclose (kcmdline); + + return ret; +} + +static int _has_composite (Display *display) { int dummy1, dummy2; @@ -257,9 +307,23 @@ _is_max_texture_size_big_enough (Display *display) int main (int argc, char **argv) { + int kcmdline_parsed; Display *display = NULL; int ret = 1; + kcmdline_parsed = _parse_kcmdline (); + if (kcmdline_parsed >= 0) { + if (kcmdline_parsed == 0) { + _print_error ("Non-fallback mode forced by kernel command line."); + ret = 0; + goto out; + } else if (kcmdline_parsed == 1) { + _print_error ("Fallback mode forced by kernel command line."); + goto out; + } else + _print_error ("Invalid value for gnome.fallback passed in kernel command line."); + } + display = XOpenDisplay (NULL); if (!display) { _print_error ("No X display.");
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor