NORET sortorder::sortorder() { Ibyteorder(I8perm, 8); Ibyteorder(I4perm, 4); Ibyteorder(I2perm, 2); Ibyteorder(I1perm, 1); Fbyteorder(Fperm); Dbyteorder(Dperm); }
static int parse_settings (unsigned char *prop, unsigned long bytes, struct xsettings *settings) { Lisp_Object byteorder = Fbyteorder (); int my_bo = XFASTINT (byteorder) == 'B' ? MSBFirst : LSBFirst; int that_bo = prop[0]; CARD32 n_settings; int bytes_parsed = 0; int settings_seen = 0; int i = 0; /* First 4 bytes is a serial number, skip that. */ if (bytes < 12) return settings_seen; memcpy (&n_settings, prop+8, 4); if (my_bo != that_bo) n_settings = bswap_32 (n_settings); bytes_parsed = 12; memset (settings, 0, sizeof (*settings)); while (bytes_parsed+4 < bytes && settings_seen < 7 && i < n_settings) { int type = prop[bytes_parsed++]; CARD16 nlen; CARD32 vlen, ival = 0; char name[128]; /* The names we are looking for are not this long. */ char sval[128]; /* The values we are looking for are not this long. */ bool want_this; int to_cpy; sval[0] = '\0'; ++i; ++bytes_parsed; /* Padding */ memcpy (&nlen, prop+bytes_parsed, 2); bytes_parsed += 2; if (my_bo != that_bo) nlen = bswap_16 (nlen); if (bytes_parsed + nlen > bytes) return settings_seen; to_cpy = min (nlen, sizeof name - 1); memcpy (name, prop+bytes_parsed, to_cpy); name[to_cpy] = '\0'; bytes_parsed += nlen; bytes_parsed = PAD (bytes_parsed); bytes_parsed += 4; /* Skip serial for this value */ if (bytes_parsed > bytes) return settings_seen; want_this = strcmp (XSETTINGS_TOOL_BAR_STYLE, name) == 0; #ifdef HAVE_XFT if ((nlen > 6 && memcmp (name, "Xft/", 4) == 0) || strcmp (XSETTINGS_FONT_NAME, name) == 0) want_this = true; #endif switch (type) { case 0: /* Integer */ if (bytes_parsed + 4 > bytes) return settings_seen; if (want_this) { memcpy (&ival, prop+bytes_parsed, 4); if (my_bo != that_bo) ival = bswap_32 (ival); } bytes_parsed += 4; break; case 1: /* String */ if (bytes_parsed + 4 > bytes) return settings_seen; memcpy (&vlen, prop+bytes_parsed, 4); bytes_parsed += 4; if (my_bo != that_bo) vlen = bswap_32 (vlen); if (want_this) { to_cpy = min (vlen, sizeof sval - 1); memcpy (sval, prop+bytes_parsed, to_cpy); sval[to_cpy] = '\0'; } bytes_parsed += vlen; bytes_parsed = PAD (bytes_parsed); break; case 2: /* RGB value */ /* No need to parse this */ if (bytes_parsed + 8 > bytes) return settings_seen; bytes_parsed += 8; /* 4 values (r, b, g, alpha), 2 bytes each. */ break; default: /* Parse Error */ return settings_seen; } if (want_this) { if (strcmp (name, XSETTINGS_TOOL_BAR_STYLE) == 0) { dupstring (&settings->tb_style, sval); settings->seen |= SEEN_TB_STYLE; } #ifdef HAVE_XFT else if (strcmp (name, XSETTINGS_FONT_NAME) == 0) { dupstring (&settings->font, sval); settings->seen |= SEEN_FONT; } else if (strcmp (name, "Xft/Antialias") == 0) { settings->seen |= SEEN_AA; settings->aa = ival != 0; } else if (strcmp (name, "Xft/Hinting") == 0) { settings->seen |= SEEN_HINTING; settings->hinting = ival != 0; } # ifdef FC_HINT_STYLE else if (strcmp (name, "Xft/HintStyle") == 0) { settings->seen |= SEEN_HINTSTYLE; if (strcmp (sval, "hintnone") == 0) settings->hintstyle = FC_HINT_NONE; else if (strcmp (sval, "hintslight") == 0) settings->hintstyle = FC_HINT_SLIGHT; else if (strcmp (sval, "hintmedium") == 0) settings->hintstyle = FC_HINT_MEDIUM; else if (strcmp (sval, "hintfull") == 0) settings->hintstyle = FC_HINT_FULL; else settings->seen &= ~SEEN_HINTSTYLE; } # endif else if (strcmp (name, "Xft/RGBA") == 0) { settings->seen |= SEEN_RGBA; if (strcmp (sval, "none") == 0) settings->rgba = FC_RGBA_NONE; else if (strcmp (sval, "rgb") == 0) settings->rgba = FC_RGBA_RGB; else if (strcmp (sval, "bgr") == 0) settings->rgba = FC_RGBA_BGR; else if (strcmp (sval, "vrgb") == 0) settings->rgba = FC_RGBA_VRGB; else if (strcmp (sval, "vbgr") == 0) settings->rgba = FC_RGBA_VBGR; else settings->seen &= ~SEEN_RGBA; } else if (strcmp (name, "Xft/DPI") == 0 && ival != (CARD32) -1) { settings->seen |= SEEN_DPI; settings->dpi = ival / 1024.0; } else if (strcmp (name, "Xft/lcdfilter") == 0) { settings->seen |= SEEN_LCDFILTER; if (strcmp (sval, "none") == 0) settings->lcdfilter = FC_LCD_NONE; else if (strcmp (sval, "lcddefault") == 0) settings->lcdfilter = FC_LCD_DEFAULT; else settings->seen &= ~SEEN_LCDFILTER; } #endif /* HAVE_XFT */ else want_this = false; settings_seen += want_this; } } return settings_seen; }