Example #1
0
//!
//! Main entry point of the application
//!
//! @param[in] argc the number of parameter passed on the command line
//! @param[in] argv the list of arguments
//!
//! @return EUCA_OK on success or EUCA_ERROR on failure.
//!
int main(int argc, char **argv)
{
    char *c_s1_sub = NULL;
    char *c_s2_sub = NULL;
    char *c_s3_sub = NULL;
    wchar_t *s1_sub = NULL;
    wchar_t *s2_sub = NULL;
    wchar_t *s3_sub = NULL;

    setlocale(LC_ALL, "en_US.UTF-8");

    m = varmap_alloc(NULL, L"color", L"brown");
    m = varmap_alloc(m, L"subject", L"føx");
    m = varmap_alloc(m, L"øbject", L"dog");

    printf("       nice string: %ls\n", s1);
    s1_sub = varsub(s1, (const wchar_map **)m);
    assert(s1_sub != NULL);
    printf("nice string subbed: %ls\n", s1_sub);
    EUCA_FREE(s1_sub);
    printf("       ugly string: %ls\n", s2);
    s2_sub = varsub(s2, (const wchar_map **)m);
    assert(s2_sub != NULL);
    printf("ugly string subbed: %ls\n", s2_sub);
    EUCA_FREE(s2_sub);
    printf(" unsubbable string: %ls\n", s3);
    assert(varsub(s3, (const wchar_map **)m) == NULL);

    varmap_free(m);

    printf("  sending null map: %ls\n", s3);    // Reuse s3
    s3_sub = varsub(s3, NULL);
    printf("returned from null: %ls\n", s3_sub);
    EUCA_FREE(s3_sub);

    // Now do it again, this time non-widechar
    c_m = c_varmap_alloc(NULL, "colorxxxxxx", "brown"); //! @todo This matches
    c_m = c_varmap_alloc(c_m, "subject", "fox");
    c_m = c_varmap_alloc(c_m, "object", "dog");

    printf("       nice string: %s\n", c_s1);
    c_s1_sub = c_varsub(c_s1, (const char_map **)c_m);
    printf("nice string subbed: %s\n", c_s1_sub);

    assert(c_s1_sub != NULL);
    EUCA_FREE(c_s1_sub);
    printf("       ugly string: %s\n", c_s2);
    c_s2_sub = c_varsub(c_s2, (const char_map **)c_m);
    assert(c_s2_sub != NULL);
    printf("ugly string subbed: %s\n", c_s2_sub);
    EUCA_FREE(c_s2_sub);

    printf(" unsubbable string: %s\n", c_s3);
    c_s3_sub = c_varsub(c_s3, (const char_map **)c_m);
    printf("   unsubbed string: %s\n", c_s3_sub);
    assert(!strcmp(c_s3, c_s3_sub));
    EUCA_FREE(c_s3_sub);

    c_varmap_free(c_m);

    printf("  sending null map: %s\n", c_s3);   // Reuse s3
    c_s3_sub = c_varsub(c_s3, NULL);
    printf("returned from null: %s\n", c_s3_sub);
    assert(!strcmp(c_s3, c_s3_sub));
    EUCA_FREE(c_s3_sub);
}
Example #2
0
/*
 * Formats fault-log output and sends to fault log (or stdout/stderr).
 */
static boolean
format_eucafault (const char *fault_id, const char_map **map)
{
    static int max_label_len = 0;
    char *fault_var = NULL;
    time_t secs;
    struct tm lt;
    xmlNode *fault_node = get_eucafault (fault_id, NULL);

    if (fault_node == NULL) {
        logprintfl (EUCAERROR,
                    "Fault %s detected, could not find fault id in registry.\n",
                    fault_id);
        return FALSE;
    }
    // Determine label alignment. (Only needs to be done once.)
    if (!max_label_len) {
        for (int i = 0; fault_labels[i]; i++) {
            int label_len = 0;
            int w_label_len = 0;

            char *label = get_common_var (fault_labels[i]);
            label_len = strlen (label);

            w_label_len = utf8_to_wchar (label, label_len, NULL, 0, 0);
            free (label);
            if (w_label_len > max_label_len) {
                max_label_len = w_label_len;
            }
        }
    }
    // Top border.
    fprintf (faultlog, "%s\n", STARS);

    // Get time.
    secs = time (NULL);
    if (gmtime_r (&secs, &lt) == NULL) {
        // Someone call Dr. Who.
        lt.tm_year = lt.tm_mon = lt.tm_mday = 0;
        lt.tm_hour = lt.tm_min = lt.tm_sec = 0;
    } else {
        // Account for implied offsets in struct.
        lt.tm_year += 1900;
        lt.tm_mon += 1;
    }
    // Construct timestamped fault header.
    fprintf (faultlog, "  ERR-%s %04d-%02d-%02d %02d:%02d:%02dZ ", fault_id,
             lt.tm_year, lt.tm_mon, lt.tm_mday,
             lt.tm_hour, lt.tm_min, lt.tm_sec);

    if ((fault_var = get_fault_var ("fault", fault_node)) != NULL) {
        char *fault_subbed = NULL;

        if ((fault_subbed = c_varsub (fault_var, map)) != NULL) {
            fprintf (faultlog, "%s\n\n", fault_subbed);
        } else {
            fprintf (faultlog, "%s\n\n", fault_var);
        }
        free (fault_subbed);
        free (fault_var);
    } else {
        char *common_var = get_common_var ("unknown");
        fprintf (faultlog, "%s\n\n", common_var);
        free (common_var);
    }

    // Construct fault information lines.
    for (int i = 0; fault_labels[i]; i++) {
        int w_common_var_len = 0;
        int common_var_len = 0;
        int padding = 0;
        char *common_var = get_common_var (fault_labels[i]);

        common_var_len = strlen (common_var);
        w_common_var_len = utf8_to_wchar (common_var, common_var_len, NULL, 0,
                                          0);
        padding = max_label_len - w_common_var_len + 1;
        fprintf (faultlog, "%s%*s %s: ", BARS, padding, " ", common_var);
        free (common_var);

        if ((fault_var = get_fault_var (fault_labels[i], fault_node)) != NULL) {
            char *fault_subbed = NULL;

            if ((fault_subbed = c_varsub (fault_var, map)) != NULL) {
                fprintf (faultlog, "%s", fault_subbed);
            } else {
                fprintf (faultlog, "%s", fault_var);
            }
            free (fault_subbed);
            free (fault_var);
        } else {
            common_var = get_common_var ("unknown");
            fprintf (faultlog, "%s", common_var);
            free (common_var);
        }
        fprintf (faultlog, "\n");
    }
    // Bottom border.
    fprintf (faultlog, "%s\n\n", STARS);
    fflush (faultlog);
    return TRUE;
}