コード例 #1
0
void debugger_interpreter_stopped()
{
  int nof_elements;
  uint32_t **elements;
  int i;

  close(newsockfd);
  close(sockfd);

  if (pcs != NULL)
  {
    nof_elements = get_list_size(pcs);
    elements = (uint32_t**)delete_list_and_get_ptrs(pcs);
    for (i=0; i<nof_elements; i++)
      free(elements[i]);
  }

  if (breakpoints != NULL)
  {
    nof_elements = get_list_size(breakpoints);
    elements = (uint32_t**)delete_list_and_get_ptrs(breakpoints);
    for (i=0; i<nof_elements; i++)
      free(elements[i]);
  }
}
コード例 #2
0
ファイル: i18n.c プロジェクト: erkyrath/fizmo
static locale_module *parse_locale_file(z_ucs *module_name,
                                        char* locale_dir_name, char* module_name_utf8)
{
    char *filename;
    z_file *in;
    z_ucs *locale_data;
    locale_module *result;
    char in_char;
    long nof_zucs_chars;
    z_ucs input;
    z_ucs *linestart;
    list *lines;

    TRACE_LOG("locale_dir_name: \"%s\".\n", locale_dir_name);
    TRACE_LOG("module_name_utf8: \"%s\".\n", module_name_utf8);

    // open-resource:
    if ((filename
            = malloc(strlen(locale_dir_name) + strlen(module_name_utf8) + 2))
            == NULL)
    {
        // exit-point:
        TRACE_LOG("malloc() returned NULL.\n");
        return NULL;
    }

    TRACE_LOG("locale_dir_name: \"%s\".\n", locale_dir_name);
    TRACE_LOG("module_name_utf8: \"%s\".\n", module_name_utf8);

    strcpy(filename, locale_dir_name);
    strcat(filename, "/");
    strcat(filename, module_name_utf8);

    TRACE_LOG("Parsing locale file \"%s\".\n", filename);

    // open-resource:
    if ((in = fsi->openfile(filename, FILETYPE_DATA, FILEACCESS_READ))
            == NULL)
    {
        // exit-point:
        TRACE_LOG("openfile(\"%s\") returned NULL.\n", filename);
        free(filename);
        return NULL;
    }

    nof_zucs_chars = 0;
    while ((parse_utf8_char_from_file(in)) != UEOF)
        nof_zucs_chars++;
    nof_zucs_chars++; // Add space for terminating zero (yes, really required).

    if (fsi->setfilepos(in, 0, SEEK_SET) == -1)
    {
        // exit-point:
        TRACE_LOG("setfilepos() returned -1.\n");
        fsi->closefile(in);
        free(filename);
        return NULL;
    }

    TRACE_LOG("Allocating space for %ld z_ucs chars.\n", nof_zucs_chars);

    // open-resource:
    if ((locale_data = malloc(nof_zucs_chars * sizeof(z_ucs))) == NULL)
    {
        // exit-point:
        TRACE_LOG("malloc(%ld) returned NULL.\n", nof_zucs_chars * sizeof(z_ucs));
        fsi->closefile(in);
        free(filename);
        return NULL;
    }

    TRACE_LOG("Locale data at %p, ends at %p.\n",
              locale_data, locale_data+nof_zucs_chars);

    // open-resource:
    if ((result = malloc(sizeof(locale_module))) == NULL)
    {
        // exit-point:
        free(locale_data);
        fsi->closefile(in);
        free(filename);
        return NULL;
    }

    TRACE_LOG("New module at %p.\n", result);

    result->locale_data = locale_data;
    TRACE_LOG("Locale data starts at %p.\n", locale_data);

    /* --- */

    // open-resource:
    lines = create_list();
    //printf("new list created: %p\n", lines);

    in_char = fsi->getchar(in);
    while (in_char != EOF)
    {
        linestart = locale_data;

        // Found a new line.
        fsi->ungetchar(in_char, in);

        for (;;)
        {
            input = input_char(in);

            if (input == Z_UCS_BACKSLASH)
            {
                //*locale_data++ = input;

                input = input_char(in);

                if (input == Z_UCS_BACKSLASH)
                {
                    *locale_data++ = Z_UCS_BACKSLASH;
                }
                else if (input == 'n')
                {
                    *locale_data++ = Z_UCS_NEWLINE;
                }
                else if (input == '{')
                {
                    *locale_data++ = Z_UCS_BACKSLASH;
                    *locale_data++ = (z_ucs)'{';

                    input = input_char(in);

                    if ((input < 0x30) && (input > 0x39))
                    {
                        fprintf(stderr, "Variable number expected.\n");
                        exit(EXIT_FAILURE);
                    }

                    *locale_data++ = input;

                    input = input_char(in);

                    if (
                        (input != (z_ucs)'s')
                        &&
                        (input != (z_ucs)'d')
                        &&
                        (input != (z_ucs)'x')
                        &&
                        (input != (z_ucs)'z')
                    )
                    {
                        fprintf(stderr, "Invalid parameter type.\n");
                        exit(EXIT_FAILURE);
                    }

                    *locale_data++ = input;

                    input = input_char(in);

                    if (input != (z_ucs)'}')
                    {
                        fprintf(stderr, "Expected '}'.\n");
                        exit(EXIT_FAILURE);
                    }

                    *locale_data++ = (z_ucs)'}';
                }
                else
                {
                    fprintf(stderr, "Undefined control sequence \\%c.\n",(char)input);
                    exit(EXIT_FAILURE);
                }
            }
            else if (input == Z_UCS_NEWLINE)
            {
                *locale_data++ = 0;
                TRACE_LOG("New line at %p.\n", linestart);
                add_list_element(lines, (void*)linestart);

                //TRACE_LOG_Z_UCS(linestart);

                break;
            }
            else
            {
                // Here we've found some "normal" output.
                *locale_data++ = (z_ucs)input;
            }
        }

        //messages_processed++;
        in_char = fsi->getchar(in);
    }

    *locale_data = 0;
    TRACE_LOG("Wirte last byte at %p.\n", locale_data);

    /* --- */

    TRACE_LOG("Read %d lines.\n", get_list_size(lines));

    // close-resource(l), open-resource(result->messages):
    result->nof_messages = get_list_size(lines);
    result->messages = (z_ucs**)delete_list_and_get_ptrs(lines);

    TRACE_LOG("Messages at %p.\n", result->messages);

    TRACE_LOG("First msg at %p.\n", result->messages[0]);

    if ((result->module_name = malloc(sizeof(z_ucs) * (z_ucs_len(module_name)+1)))
            == NULL)
    {
        // exit-point:
        free(result->messages);
        free(result);
        free(locale_data);
        fsi->closefile(in);
        free(filename);
        return NULL;
    }

    z_ucs_cpy(result->module_name, module_name);

    // close-resource:
    fsi->closefile(in);

    // close-resource:
    free(filename);

    TRACE_LOG("Returning new module at %p.\n", result);

    return result;
}