static const FcCharSet * scan (FILE *f, char *file, FcCharSetFreezer *freezer) { FcCharSet *c = 0; const FcCharSet *n; int start, end, ucs4; char line[1024]; int lineno = 0; while (get_line (f, line, &lineno)) { if (!strncmp (line, "include", 7)) { file = strchr (line, ' '); if (!file) fatal (line, lineno, "invalid syntax, expected: include filename"); while (isspace(*file)) file++; f = scanopen (file); if (!f) fatal (file, 0, "can't open"); n = scan (f, file, freezer); fclose (f); return n; } if (strchr (line, '-')) { if (sscanf (line, "%x-%x", &start, &end) != 2) fatal (file, lineno, "parse error"); } else { if (sscanf (line, "%x", &start) != 1) fatal (file, lineno, "parse error"); end = start; } if (!c) c = FcCharSetCreate (); for (ucs4 = start; ucs4 <= end; ucs4++) { if (!FcCharSetAddChar (c, ucs4)) fatal (file, lineno, "out of memory"); } } n = FcCharSetFreeze (freezer, c); FcCharSetDestroy (c); return n; }
static FcCharSet * scan (FILE *f, char *file) { FcCharSet *c = 0; FcCharSet *n; int start, end, ucs4; char line[1024]; int lineno = 0; while (get_line (f, line, &lineno)) { if (!strncmp (line, "include", 7)) { file = strchr (line, ' '); while (*file == ' ') file++; end = strlen (file); if (file[end-1] == '\n') file[end-1] = '\0'; f = fopen (file, "r"); if (!f) fatal (file, 0, "can't open"); c = scan (f, file); fclose (f); return c; } if (strchr (line, '-')) { if (sscanf (line, "%x-%x", &start, &end) != 2) fatal (file, lineno, "parse error"); } else { if (sscanf (line, "%x", &start) != 1) fatal (file, lineno, "parse error"); end = start; } if (!c) c = FcCharSetCreate (); for (ucs4 = start; ucs4 <= end; ucs4++) { if (!FcCharSetAddChar (c, ucs4)) fatal (file, lineno, "out of memory"); } } n = FcCharSetFreeze (c); FcCharSetDestroy (c); return n; }
static FcCharSet * scan (FILE *f, char *file, FcCharSetFreezer *freezer) { FcCharSet *c = 0; FcCharSet *n; FcBool del; int start, end, ucs4; char buf[1024]; char *line; int lineno = 0; while ((line = get_line (f, buf, &lineno))) { if (!strncmp (line, "include", 7)) { FILE *included_f; char *included_file; included_file = strchr (line, ' '); if (!included_file) fatal (file, lineno, "invalid syntax, expected: include filename"); while (isspace(*included_file)) included_file++; included_f = scanopen (included_file); if (!included_f) fatal (included_file, 0, "can't open"); n = scan (included_f, included_file, freezer); fclose (included_f); if (!c) c = FcCharSetCreate (); if (!FcCharSetMerge (c, n, NULL)) fatal (file, lineno, "out of memory"); FcCharSetDestroy (n); continue; } del = FcFalse; if (line[0] == '-') { del = FcTrue; line++; } if (strchr (line, '-')) { if (sscanf (line, "%x-%x", &start, &end) != 2) fatal (file, lineno, "parse error"); } else { if (sscanf (line, "%x", &start) != 1) fatal (file, lineno, "parse error"); end = start; } if (!c) c = FcCharSetCreate (); for (ucs4 = start; ucs4 <= end; ucs4++) { if (!((del ? FcCharSetDelChar : FcCharSetAddChar) (c, ucs4))) fatal (file, lineno, "out of memory"); } } n = (FcCharSet *) FcCharSetFreeze (freezer, c); FcCharSetDestroy (c); return n; }