dd: code shrink
[oweals/busybox.git] / util-linux / fbset.c
index 3be342481747d42e3a86d7e450bdc4201a00a629..e9aacce4f253a300cee121f863dfe910c72f936b 100644 (file)
@@ -271,7 +271,7 @@ static int read_mode_db(struct fb_var_screeninfo *base, const char *fn,
                }
                p = token[1];
                i = index_in_strings(
-                       "geometry\0timings\0interlaced\0double\0vsync\0hsync\0csync\0extsync\0",
+                       "geometry\0timings\0interlaced\0double\0vsync\0hsync\0csync\0extsync\0rgba\0",
                        token[0]);
                switch (i) {
                case 0:
@@ -342,6 +342,30 @@ static int read_mode_db(struct fb_var_screeninfo *base, const char *fn,
                        ss(&base->sync, FB_SYNC_EXT, p, "false");
 //bb_info_msg("EXTSYNC[%s]", p);
                        break;
+               case 8: {
+                       int red_offset, red_length;
+                       int green_offset, green_length;
+                       int blue_offset, blue_length;
+                       int transp_offset, transp_length;
+
+                       sscanf(p, "%d/%d,%d/%d,%d/%d,%d/%d",
+                               &red_offset, &red_length,
+                               &green_offset, &green_length,
+                               &blue_offset, &blue_length,
+                               &transp_offset, &transp_length);
+                       base->red.offset = red_offset;
+                       base->red.length = red_length;
+                       base->red.msb_right = 0;
+                       base->green.offset = green_offset;
+                       base->green.length = green_length;
+                       base->green.msb_right = 0;
+                       base->blue.offset = blue_offset;
+                       base->blue.length = blue_length;
+                       base->blue.msb_right = 0;
+                       base->transp.offset = transp_offset;
+                       base->transp.length = transp_length;
+                       base->transp.msb_right = 0;
+               }
                }
        }
        return 0;
@@ -385,7 +409,7 @@ int fbset_main(int argc, char **argv)
                OPT_CHANGE   = (1 << 0),
                OPT_SHOW     = (1 << 1),
                OPT_READMODE = (1 << 2),
-               OPT_ALL      = (1 << 9),
+               OPT_ALL      = (1 << 3),
        };
        struct fb_var_screeninfo var_old, var_set;
        int fh, i;
@@ -490,6 +514,7 @@ int fbset_main(int argc, char **argv)
                if (!read_mode_db(&var_old, modefile, mode)) {
                        bb_error_msg_and_die("unknown video mode '%s'", mode);
                }
+               options |= OPT_CHANGE;
 #endif
        }