#include <inttypes.h>#include <stdio.h> #include <libcss/libcss.h>#include "stylesheet.h" #define ITERATIONS (1)#define DUMP_CSS (1) #if DUMP_CSS#include "dump.h"#endif #include "testutils.h" static css_error resolve_url(void *pw, const char *base, lwc_string *rel, lwc_string **abs){ UNUSED(pw); UNUSED(base); /* About as useless as possible */ *abs = lwc_string_ref(rel); return CSS_OK;} int main(int argc, char **argv){ css_stylesheet_params params; css_stylesheet *sheet; FILE *fp; size_t len, origlen;#define CHUNK_SIZE (4096) uint8_t buf[CHUNK_SIZE]; css_error error; int count; if (argc != 2) { printf("Usage: %s <filename>\n", argv[0]); return 1; } params.params_version = CSS_STYLESHEET_PARAMS_VERSION_1; params.level = CSS_LEVEL_21; params.charset = "UTF-8"; params.url = argv[1]; params.title = NULL; params.allow_quirks = false; params.inline_style = false; params.resolve = resolve_url; params.resolve_pw = NULL; params.import = NULL; params.import_pw = NULL; params.color = NULL; params.color_pw = NULL; params.font = NULL; params.font_pw = NULL; for (count = 0; count < ITERATIONS; count++) { assert(css_stylesheet_create(¶ms, &sheet) == CSS_OK); fp = fopen(argv[1], "rb"); if (fp == NULL) { printf("Failed opening %s\n", argv[1]); return 1; } fseek(fp, 0, SEEK_END); origlen = len = ftell(fp); fseek(fp, 0, SEEK_SET); while (len >= CHUNK_SIZE) { size_t read = fread(buf, 1, CHUNK_SIZE, fp); assert(read == CHUNK_SIZE); error = css_stylesheet_append_data(sheet, buf, CHUNK_SIZE); assert(error == CSS_OK || error == CSS_NEEDDATA); len -= CHUNK_SIZE; } if (len > 0) { size_t read = fread(buf, 1, len, fp); assert(read == len); error = css_stylesheet_append_data(sheet, buf, len); assert(error == CSS_OK || error == CSS_NEEDDATA); len = 0; } fclose(fp); error = css_stylesheet_data_done(sheet); assert(error == CSS_OK || error == CSS_IMPORTS_PENDING); while (error == CSS_IMPORTS_PENDING) { lwc_string *url; error = css_stylesheet_next_pending_import(sheet, &url); assert(error == CSS_OK || error == CSS_INVALID); if (error == CSS_OK) { css_stylesheet *import; char *buf = malloc(lwc_string_length(url) + 1); memcpy(buf, lwc_string_data(url), lwc_string_length(url)); buf[lwc_string_length(url)] = '\0'; params.url = buf; assert(css_stylesheet_create(¶ms, &import) == CSS_OK); assert(css_stylesheet_data_done(import) == CSS_OK); assert(css_stylesheet_register_import(sheet, import) == CSS_OK); css_stylesheet_destroy(import); error = CSS_IMPORTS_PENDING; free(buf); } } #if DUMP_CSS {#ifndef max#define max(a,b) ((a) > (b) ? (a) : (b))#endif char *out; size_t outsize = max(16384, origlen * 8); size_t outlen = outsize; size_t written; out = malloc(outsize); assert(out != NULL); dump_sheet(sheet, out, &outlen); written = fwrite(out, 1, outsize - outlen, stdout); assert(written == outsize - outlen); free(out); }#endif css_stylesheet_destroy(sheet); } printf("PASS\n"); return 0;}
#include <inttypes.h>
#include <stdio.h>
#include <libcss/libcss.h>
#include "stylesheet.h"
#define ITERATIONS (1)
#define DUMP_CSS (1)
#if DUMP_CSS
#include "dump.h"
#endif
#include "testutils.h"
static css_error resolve_url(void *pw,
const char *base, lwc_string *rel, lwc_string **abs)
{
UNUSED(pw);
UNUSED(base);
/* About as useless as possible */
*abs = lwc_string_ref(rel);
return CSS_OK;
}
int main(int argc, char **argv)
{
css_stylesheet_params params;
css_stylesheet *sheet;
FILE *fp;
size_t len, origlen;
#define CHUNK_SIZE (4096)
uint8_t buf[CHUNK_SIZE];
css_error error;
int count;
if (argc != 2) {
printf("Usage: %s <filename>\n", argv[0]);
return 1;
}
params.params_version = CSS_STYLESHEET_PARAMS_VERSION_1;
params.level = CSS_LEVEL_21;
params.charset = "UTF-8";
params.url = argv[1];
params.title = NULL;
params.allow_quirks = false;
params.inline_style = false;
params.resolve = resolve_url;
params.resolve_pw = NULL;
params.import = NULL;
params.import_pw = NULL;
params.color = NULL;
params.color_pw = NULL;
params.font = NULL;
params.font_pw = NULL;
for (count = 0; count < ITERATIONS; count++) {
assert(css_stylesheet_create(¶ms, &sheet) == CSS_OK);
fp = fopen(argv[1], "rb");
if (fp == NULL) {
printf("Failed opening %s\n", argv[1]);
return 1;
}
fseek(fp, 0, SEEK_END);
origlen = len = ftell(fp);
fseek(fp, 0, SEEK_SET);
while (len >= CHUNK_SIZE) {
size_t read = fread(buf, 1, CHUNK_SIZE, fp);
assert(read == CHUNK_SIZE);
error = css_stylesheet_append_data(sheet, buf,
CHUNK_SIZE);
assert(error == CSS_OK || error == CSS_NEEDDATA);
len -= CHUNK_SIZE;
}
if (len > 0) {
size_t read = fread(buf, 1, len, fp);
assert(read == len);
error = css_stylesheet_append_data(sheet, buf, len);
assert(error == CSS_OK || error == CSS_NEEDDATA);
len = 0;
}
fclose(fp);
error = css_stylesheet_data_done(sheet);
assert(error == CSS_OK || error == CSS_IMPORTS_PENDING);
while (error == CSS_IMPORTS_PENDING) {
lwc_string *url;
error = css_stylesheet_next_pending_import(sheet, &url);
assert(error == CSS_OK || error == CSS_INVALID);
if (error == CSS_OK) {
css_stylesheet *import;
char *buf = malloc(lwc_string_length(url) + 1);
memcpy(buf, lwc_string_data(url),
lwc_string_length(url));
buf[lwc_string_length(url)] = '\0';
params.url = buf;
assert(css_stylesheet_create(¶ms,
&import) == CSS_OK);
assert(css_stylesheet_data_done(import) ==
CSS_OK);
assert(css_stylesheet_register_import(sheet,
import) == CSS_OK);
css_stylesheet_destroy(import);
error = CSS_IMPORTS_PENDING;
free(buf);
}
}
#if DUMP_CSS
{
#ifndef max
#define max(a,b) ((a) > (b) ? (a) : (b))
#endif
char *out;
size_t outsize = max(16384, origlen * 8);
size_t outlen = outsize;
size_t written;
out = malloc(outsize);
assert(out != NULL);
dump_sheet(sheet, out, &outlen);
written = fwrite(out, 1, outsize - outlen, stdout);
assert(written == outsize - outlen);
free(out);
}
#endif
css_stylesheet_destroy(sheet);
}
printf("PASS\n");
return 0;
}