Example #1
0
static void
reportError(XML_Parser parser, const XML_Char *filename)
{
  enum XML_Error code = XML_GetErrorCode(parser);
  const XML_Char *message = XML_ErrorString(code);
  if (message)
    ftprintf(stdout, T("%s:%" XML_FMT_INT_MOD "u:%" XML_FMT_INT_MOD "u: %s\n"),
             filename,
             XML_GetErrorLineNumber(parser),
             XML_GetErrorColumnNumber(parser),
             message);
  else
    ftprintf(stderr, T("%s: (unknown message %d)\n"), filename, code);
}
Example #2
0
int
XML_ProcessFile(XML_Parser parser,
                const XML_Char *filename,
                unsigned flags)
{
  int result;

  if (!XML_SetBase(parser, filename)) {
    ftprintf(stderr, T("%s: out of memory"), filename);
    exit(1);
  }

  if (flags & XML_EXTERNAL_ENTITIES)
      XML_SetExternalEntityRefHandler(parser,
                                      (flags & XML_MAP_FILE)
                                      ? externalEntityRefFilemap
                                      : externalEntityRefStream);
  if (flags & XML_MAP_FILE) {
    PROCESS_ARGS args;
    args.retPtr = &result;
    args.parser = parser;
    if (!filemap(filename, processFile, &args))
      result = 0;
  }
  else
    result = processStream(filename, parser);
  return result;
}
Example #3
0
/**
 * @brief alloc @p nelem elements of @p n bytes  and set the memory to zero
 */
void *
xcalloc(size_t nelem, size_t n)
{
    void *p;

    p = calloc(nelem, n);
    if (!p) {
        ftprintf(stderr, _(T("Memory is too low\n")));
        exit(EXIT_FAILURE);
    }
    return p;
}
Example #4
0
/**
 * @brief reallocate a pointer
 */
void *
xrealloc(void *ptr, size_t size)
{
    void *p;

    p = realloc(ptr, size);
    if (!p) {
        ftprintf(stderr, _(T("Memory is too low\n")));
        exit(EXIT_FAILURE);
    }

    return p;
}
Example #5
0
char *
tcstostr(const tchar *w)
{
#ifdef ESCM_UNICODE
    char *str;
    size_t n;

    n = wcstombs(NULL, w, 0) + 1;
    str = xmalloc(sizeof *str * n);
    if (wcstombs(str, w, n) == (size_t) (-1))
        ftprintf(stderr, _(T("wcstombs: conversion error.\n")));
    return str;
#else
    return xstrdup(w);
#endif
}
Example #6
0
tchar *
strtotcs(const char *str)
{
#ifdef ESCM_UNICODE
    wchar_t *w;
    size_t n;

    n = mbstowcs(NULL, str, 0) + 1;
    w = xmalloc(sizeof *w * n);
    if (mbstowcs(w, str, n) == (size_t) (-1))
        ftprintf(stderr, _(T("mbstowcs: conversion error.\n")));
    return w;
#else
    return xstrdup(str);
#endif

}
Example #7
0
static int
processStream(const XML_Char *filename, XML_Parser parser)
{
  /* passing NULL for filename means read intput from stdin */
  int fd = 0;   /* 0 is the fileno for stdin */

  if (filename != NULL) {
    fd = topen(filename, O_BINARY|O_RDONLY);
    if (fd < 0) {
      tperror(filename);
      return 0;
    }
  }
  for (;;) {
    int nread;
    char *buf = (char *)XML_GetBuffer(parser, READ_SIZE);
    if (!buf) {
      if (filename != NULL)
        close(fd);
      ftprintf(stderr, T("%s: out of memory\n"),
               filename != NULL ? filename : "xmlwf");
      return 0;
    }
    nread = read(fd, buf, READ_SIZE);
    if (nread < 0) {
      tperror(filename != NULL ? filename : "STDIN");
      if (filename != NULL)
        close(fd);
      return 0;
    }
    if (XML_ParseBuffer(parser, nread, nread == 0) == XML_STATUS_ERROR) {
      reportError(parser, filename != NULL ? filename : "STDIN");
      if (filename != NULL)
        close(fd);
      return 0;
    }
    if (nread == 0) {
      if (filename != NULL)
        close(fd);
      break;;
    }
  }
  return 1;
}
Example #8
0
File: main.c Project: vthib/escheme
int
main(int argc, char **argv)
{
    escm *e;
    int i, j;
    int casesens = 1;
    int resume = 0;
    char *p;
    char *evalstr;
    int ret;

    if (!setlocale(LC_ALL, "") ||
        !setlocale(LC_NUMERIC, "C"))  /* corrects strtod interpretation */
        ftprintf(stderr, T("can't set the locale.\n"));

    evalstr = NULL;

    srand(time(NULL));

    for (i = 1; i < argc; i++) {
        if (*argv[i] == '-') {
            if (argv[i][1] == '-') {
                if (0 == strcmp(argv[i], "--noload")) {
                    char *comma;

                    if (i+1 == argc) {
                        ftprintf(stderr,
                                 _(T("missing arguments to --noload.\n")));
                        break;
                    }
                    p = argv[i+1], ret = 1;
                    while (ret) {
                        comma = strchr(p, ',');
                        if (!comma)
                            comma = p + strlen(p), ret = 0;
                        else
                            *comma = '\0';

                        for (j = 0; j < MAXTYPE; j++) {
                            if (0 == strcmp(p, desc[j].name)) {
                                desc[j].load = 0;
                                break;
                            }
                        }

                        if (j == MAXTYPE)
                            ftprintf(stderr, _(T("unknown argument to "))
                                    _(T("--noload:%s.\n")), p);

                        p = comma + 1;
                    }
                    i++;
                } else
                    ftprintf(stderr, _(T("unknown option %s.\n")), argv[i]);
            } else {
                for (p = argv[i] + 1; *p != '\0'; p++) {
                    switch (*p) {
                    case 'g': casesens = 1; break;
                    case 'G': casesens = 0; break;
                    case 'r': resume = 1; break;
                    case 'e': evalstr = argv[++i]; break;
                    case 'h':
                        usage(argv[0]);
                        return EXIT_SUCCESS;
                    default:
                        ftprintf(stderr, _(T("unknown option -%c.\n")), *p);
                    }
                }
            }
        } else
            break;
    }

    e = escm_new();
    if (!e)
        return EXIT_FAILURE;

    for (j = 0; j < MAXTYPE; j++) {
        if (desc[j].load)
            desc[j].funinit(e);
    }

    e->casesensitive = casesens;
    e->backtrace = 1;

    escm_init(e);

    ret = 1;
    if (evalstr) {
        tchar *tcs;

        tcs = strtotcs(evalstr);
        ret = escm_sparse(e, tcs);
        free(tcs);
        if (ret == 0)
            goto end;
        if (i >= argc) {
            if (resume)
                escm_shell(e);
            else
                goto end;
        }
    }

    if (i < argc) {
        while (i < argc) {
            ret = escm_fparse(e, argv[i++]);
            if (ret == 0)
                break;
        }
        if (resume)
            escm_shell(e);
    } else
        escm_shell(e);

end:
    escm_free(e);
    return (ret) ? EXIT_SUCCESS : EXIT_FAILURE;
}
Example #9
0
int
filemap(const tchar *name,
        void (*processor)(const void *, size_t, const tchar *, void *arg),
        void *arg)
{
  size_t nbytes;
  int fd;
  _EXPAT_read_count_t n;
  struct stat sb;
  void *p;

  fd = topen(name, O_RDONLY|O_BINARY);
  if (fd < 0) {
    tperror(name);
    return 0;
  }
  if (fstat(fd, &sb) < 0) {
    tperror(name);
    close(fd);
    return 0;
  }
  if (!S_ISREG(sb.st_mode)) {
    ftprintf(stderr, T("%s: not a regular file\n"), name);
    close(fd);
    return 0;
  }
  if (sb.st_size > XML_MAX_CHUNK_LEN) {
    close(fd);
    return 2;  /* Cannot be passed to XML_Parse in one go */
  }

  nbytes = sb.st_size;
  /* malloc will return NULL with nbytes == 0, handle files with size 0 */
  if (nbytes == 0) {
    static const char c = '\0';
    processor(&c, 0, name, arg);
    close(fd);
    return 1;
  }
  p = malloc(nbytes);
  if (!p) {
    ftprintf(stderr, T("%s: out of memory\n"), name);
    close(fd);
    return 0;
  }
  n = _EXPAT_read(fd, p, (_EXPAT_read_req_t)nbytes);
  if (n < 0) {
    tperror(name);
    free(p);
    close(fd);
    return 0;
  }
  if (n != (_EXPAT_read_count_t)nbytes) {
    ftprintf(stderr, T("%s: read unexpected number of bytes\n"), name);
    free(p);
    close(fd);
    return 0;
  }
  processor(p, nbytes, name, arg);
  free(p);
  close(fd);
  return 1;
}