Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/dragonfly/Makefile b/dragonfly/Makefile
- new file mode 100644
- index 0000000..949e1b8
- --- /dev/null
- +++ b/dragonfly/Makefile
- @@ -0,0 +1,89 @@
- +GTK_VERSION?= gtk3
- +.if ${GTK_VERSION} == "gtk2"
- +LIBS= gtk+-2.0 webkit-1.0
- +.else
- +LIBS= gtk+-3.0 webkitgtk-3.0
- +.endif
- +LIBS+= libsoup-2.4 gnutls gthread-2.0
- +
- +LDADD= -lutil -lgcrypt -lX11
- +GTK_CFLAGS!= pkg-config --cflags $(LIBS)
- +GTK_LDFLAGS!= pkg-config --libs $(LIBS)
- +CFLAGS+= $(GTK_CFLAGS) -O2 -Wall -pthread -I. -I..
- +LDFLAGS+= $(GTK_LDFLAGS) -pthread
- +
- +PREFIX?= /usr/local
- +BINDIR?= $(PREFIX)/bin
- +LIBDIR?= $(PREFIX)/lib
- +MANDIR?= $(PREFIX)/man
- +#SRCS= $(shell ls ../*.c)
- +#SRCS+= dragonfly.c
- +
- +CC= cc
- +
- +all: ../javascript.h ../tooltip.h xombrero
- +
- +../javascript.h: ../js-merge-helper.pl ../hinting.js ../autoscroll.js
- + perl ../js-merge-helper.pl ../hinting.js ../input-focus.js \
- + ../autoscroll.js > ../javascript.h
- +
- +../tooltip.h: ../ascii2txt.pl ../txt2tooltip.pl ../xombrero.1
- + nroff -c -Tascii -mandoc ../xombrero.1 | \
- + perl ../ascii2txt.pl | \
- + perl ../txt2tooltip.pl > ../tooltip.h
- +
- +xombrero.o: ../xombrero.o
- +
- +unix.o: ../unix.o
- +
- +marco.o: ../marco.o
- +
- +whitelist.o: ../whitelist.o
- +
- +settings.o: ../settings.o
- +
- +about.o: ../about.o
- +
- +inspector.o: ../inspector.o
- +
- +cookie.o: ../cookie.o
- +
- +inputfocus.o: ../inputfocus.o
- +
- +history.o: ../history.o
- +
- +completion.o: ../completion.o
- +
- +externaleditor.o: ../externaleditor.o
- +
- +tldlist.o: ../tldlist.o
- +
- +../xombrero.o: ../javascript.h ../tooltip.h
- +
- +xombrero: xombrero.o dragonfly.o marco.o about.o inspector.o whitelist.o settings.o \
- + cookie.o history.o completion.o inputfocus.o tldlist.o externaleditor.o \
- + unix.o
- + $(CC) $(LDFLAGS) -o $@ *.o $+ $(LDADD)
- +
- +install: all
- + install -m 755 -d $(DESTDIR)$(BINDIR)
- + install -m 755 -d $(DESTDIR)$(LIBDIR)
- + install -m 755 -d $(DESTDIR)$(MANDIR)/man1
- + install -m 755 xombrero $(DESTDIR)$(BINDIR)
- + install -m 644 ../xombrero.1 $(DESTDIR)$(MANDIR)/man1/xombrero.1
- + install -m 644 ../xombrero.css $(DESTDIR)$(RESDIR)
- + install -m 644 ../xombreroicon16.png $(DESTDIR)$(RESDIR)
- + install -m 644 ../xombreroicon32.png $(DESTDIR)$(RESDIR)
- + install -m 644 ../xombreroicon48.png $(DESTDIR)$(RESDIR)
- + install -m 644 ../xombreroicon64.png $(DESTDIR)$(RESDIR)
- + install -m 644 ../xombreroicon128.png $(DESTDIR)$(RESDIR)
- + install -m 644 ../tld-rules $(DESTDIR)$(RESDIR)
- + install -m 644 ../style.css $(DESTDIR)$(RESDIR)
- + install -m 644 ../hsts-preload $(DESTDIR)$(RESDIR)
- +
- +clean:
- + rm -f xombrero *.o
- + rm -f javascript.h
- + rm -f tooltip.h
- +
- +.PHONY: all install clean
- diff --git a/dragonfly/dragonfly.c b/dragonfly/dragonfly.c
- new file mode 100644
- index 0000000..b86131f
- --- /dev/null
- +++ b/dragonfly/dragonfly.c
- @@ -0,0 +1,244 @@
- +/* $OpenBSD: fmt_scaled.c,v 1.10 2009/06/20 15:00:04 martynas Exp $ */
- +
- +/*
- + * Copyright (c) 2001, 2002, 2003 Ian F. Darwin. All rights reserved.
- + *
- + * Redistribution and use in source and binary forms, with or without
- + * modification, are permitted provided that the following conditions
- + * are met:
- + * 1. Redistributions of source code must retain the above copyright
- + * notice, this list of conditions and the following disclaimer.
- + * 2. Redistributions in binary form must reproduce the above copyright
- + * notice, this list of conditions and the following disclaimer in the
- + * documentation and/or other materials provided with the distribution.
- + * 3. The name of the author may not be used to endorse or promote products
- + * derived from this software without specific prior written permission.
- + *
- + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- + */
- +
- +/*
- + * fmt_scaled: Format numbers scaled for human comprehension
- + * scan_scaled: Scan numbers in this format.
- + *
- + * "Human-readable" output uses 4 digits max, and puts a unit suffix at
- + * the end. Makes output compact and easy-to-read esp. on huge disks.
- + * Formatting code was originally in OpenBSD "df", converted to library routine.
- + * Scanning code written for OpenBSD libutil.
- + */
- +
- +#include <stdio.h>
- +#include <stdlib.h>
- +#include <errno.h>
- +#include <string.h>
- +#include <ctype.h>
- +#include <limits.h>
- +
- +#include "util.h"
- +
- +typedef enum {
- + NONE = 0, KILO = 1, MEGA = 2, GIGA = 3, TERA = 4, PETA = 5, EXA = 6
- +} unit_type;
- +
- +/* These three arrays MUST be in sync! XXX make a struct */
- +static unit_type units[] = { NONE, KILO, MEGA, GIGA, TERA, PETA, EXA };
- +static char scale_chars[] = "BKMGTPE";
- +static long long scale_factors[] = {
- + 1LL,
- + 1024LL,
- + 1024LL*1024,
- + 1024LL*1024*1024,
- + 1024LL*1024*1024*1024,
- + 1024LL*1024*1024*1024*1024,
- + 1024LL*1024*1024*1024*1024*1024,
- +};
- +#define SCALE_LENGTH (sizeof(units)/sizeof(units[0]))
- +
- +#define MAX_DIGITS (SCALE_LENGTH * 3) /* XXX strlen(sprintf("%lld", -1)? */
- +
- +/* Convert the given input string "scaled" into numeric in "result".
- + * Return 0 on success, -1 and errno set on error.
- + */
- +int
- +scan_scaled(char *scaled, long long *result)
- +{
- + char *p = scaled;
- + int sign = 0;
- + unsigned int i, ndigits = 0, fract_digits = 0;
- + long long scale_fact = 1, whole = 0, fpart = 0;
- +
- + /* Skip leading whitespace */
- + while (isascii(*p) && isspace(*p))
- + ++p;
- +
- + /* Then at most one leading + or - */
- + while (*p == '-' || *p == '+') {
- + if (*p == '-') {
- + if (sign) {
- + errno = EINVAL;
- + return -1;
- + }
- + sign = -1;
- + ++p;
- + } else if (*p == '+') {
- + if (sign) {
- + errno = EINVAL;
- + return -1;
- + }
- + sign = +1;
- + ++p;
- + }
- + }
- +
- + /* Main loop: Scan digits, find decimal point, if present.
- + * We don't allow exponentials, so no scientific notation
- + * (but note that E for Exa might look like e to some!).
- + * Advance 'p' to end, to get scale factor.
- + */
- + for (; isascii(*p) && (isdigit(*p) || *p=='.'); ++p) {
- + if (*p == '.') {
- + if (fract_digits > 0) { /* oops, more than one '.' */
- + errno = EINVAL;
- + return -1;
- + }
- + fract_digits = 1;
- + continue;
- + }
- +
- + i = (*p) - '0'; /* whew! finally a digit we can use */
- + if (fract_digits > 0) {
- + if (fract_digits >= MAX_DIGITS-1)
- + /* ignore extra fractional digits */
- + continue;
- + fract_digits++; /* for later scaling */
- + fpart *= 10;
- + fpart += i;
- + } else { /* normal digit */
- + if (++ndigits >= MAX_DIGITS) {
- + errno = ERANGE;
- + return -1;
- + }
- + whole *= 10;
- + whole += i;
- + }
- + }
- +
- + if (sign) {
- + whole *= sign;
- + fpart *= sign;
- + }
- +
- + /* If no scale factor given, we're done. fraction is discarded. */
- + if (!*p) {
- + *result = whole;
- + return 0;
- + }
- +
- + /* Validate scale factor, and scale whole and fraction by it. */
- + for (i = 0; i < SCALE_LENGTH; i++) {
- +
- + /* Are we there yet? */
- + if (*p == scale_chars[i] ||
- + *p == tolower(scale_chars[i])) {
- +
- + /* If it ends with alphanumerics after the scale char, bad. */
- + if (isalnum(*(p+1))) {
- + errno = EINVAL;
- + return -1;
- + }
- + scale_fact = scale_factors[i];
- +
- + /* scale whole part */
- + whole *= scale_fact;
- +
- + /* truncate fpart so it does't overflow.
- + * then scale fractional part.
- + */
- + while (fpart >= LLONG_MAX / scale_fact) {
- + fpart /= 10;
- + fract_digits--;
- + }
- + fpart *= scale_fact;
- + if (fract_digits > 0) {
- + for (i = 0; i < fract_digits -1; i++)
- + fpart /= 10;
- + }
- + whole += fpart;
- + *result = whole;
- + return 0;
- + }
- + }
- + errno = ERANGE;
- + return -1;
- +}
- +
- +/* Format the given "number" into human-readable form in "result".
- + * Result must point to an allocated buffer of length FMT_SCALED_STRSIZE.
- + * Return 0 on success, -1 and errno set if error.
- + */
- +int
- +fmt_scaled(long long number, char *result)
- +{
- + long long abval, fract = 0;
- + unsigned int i;
- + unit_type unit = NONE;
- +
- + abval = llabs(number);
- +
- + /* Not every negative long long has a positive representation.
- + * Also check for numbers that are just too darned big to format
- + */
- + if (abval < 0 || abval / 1024 >= scale_factors[SCALE_LENGTH-1]) {
- + errno = ERANGE;
- + return -1;
- + }
- +
- + /* scale whole part; get unscaled fraction */
- + for (i = 0; i < SCALE_LENGTH; i++) {
- + if (abval/1024 < scale_factors[i]) {
- + unit = units[i];
- + fract = (i == 0) ? 0 : abval % scale_factors[i];
- + number /= scale_factors[i];
- + if (i > 0)
- + fract /= scale_factors[i - 1];
- + break;
- + }
- + }
- +
- + fract = (10 * fract + 512) / 1024;
- + /* if the result would be >= 10, round main number */
- + if (fract == 10) {
- + if (number >= 0)
- + number++;
- + else
- + number--;
- + fract = 0;
- + }
- +
- + if (number == 0)
- + strlcpy(result, "0B", FMT_SCALED_STRSIZE);
- + else if (unit == NONE || number >= 100 || number <= -100) {
- + if (fract >= 5) {
- + if (number >= 0)
- + number++;
- + else
- + number--;
- + }
- + (void)snprintf(result, FMT_SCALED_STRSIZE, "%lld%c",
- + number, scale_chars[unit]);
- + } else
- + (void)snprintf(result, FMT_SCALED_STRSIZE, "%lld.%1lld%c",
- + number, fract, scale_chars[unit]);
- +
- + return 0;
- +}
- +
- diff --git a/dragonfly/util.h b/dragonfly/util.h
- new file mode 100644
- index 0000000..ed115e4
- --- /dev/null
- +++ b/dragonfly/util.h
- @@ -0,0 +1,36 @@
- +#define RB_FOREACH(x, name, head) \
- + for ((x) = RB_MIN(name, head); \
- + (x) != NULL; \
- + (x) = name##_RB_NEXT(x))
- +
- +#define RB_FOREACH_SAFE(x, name, head, y) \
- + for ((x) = RB_MIN(name, head); \
- + ((x) != NULL) && ((y) = name##_RB_NEXT(x), 1); \
- + (x) = (y))
- +
- +#define RB_FOREACH_REVERSE(x, name, head) \
- + for ((x) = RB_MAX(name, head); \
- + (x) != NULL; \
- + (x) = name##_RB_PREV(x))
- +
- +#define RB_FOREACH_REVERSE_SAFE(x, name, head, y) \
- + for ((x) = RB_MAX(name, head); \
- + ((x) != NULL) && ((y) = name##_RB_PREV(x), 1); \
- + (x) = (y))
- +
- +
- +#ifndef TAILQ_END
- +#define TAILQ_END(head) NULL
- +#endif
- +
- +#ifndef TAILQ_FOREACH_SAFE
- +#define TAILQ_FOREACH_SAFE(var, head, field, tvar) \
- + for ((var) = TAILQ_FIRST(head); \
- + (var) != TAILQ_END(head) && \
- + ((tvar) = TAILQ_NEXT(var, field), 1); \
- + (var) = (tvar))
- +#endif
- +
- +#define FMT_SCALED_STRSIZE 7 /* minus sign, 4 digits, suffix, null byte */
- +int fmt_scaled(long long number, char *result);
- +
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement