gdb
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

filename_cmp.c


From: Турченков Александр
Subject: filename_cmp.c
Date: Sun, 04 Apr 2010 02:45:01 +0400

Hi !

I am used arm-elf-gdb & keil toolchain & have more problems in sets breakpoints 
in Eclipse IDE on Windows platform. After modify file filename_cmp.c, it's been 
absent (sorry for my english).
Source code, written by me:

filename_cmp.c:

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#ifdef HAVE_STRING_H
#include <string.h>
#endif

#include "filenames.h"
#include "safe-ctype.h"
#include <alloca-conf.h>

/* #define LOC_DEBUG */

void correct_name(char * s, int len)
{
    char * p = s, * plast = s;

    for (;;)
    {
        if (p[2] == '\\')
            p[2] = '/';

        if (memcmp(p, "../", 3) == 0)
            memcpy(p, &p[3], len -= 3);
        else
            break;
    }

    for (; len > 0 ;)
    {
        if (p[0] == '\\')
            p[0] = '/';

        if (p[0] == '/')
        {
            for (;;)
            {
                if (p[1] == '\\')
                    p[1] = '/';
                if (p[1] == '/')
                    memcpy(&p[1], &p[2], len -= 1);
                else
                    break;
            }

            if (p[3] == '\\')
                p[3] = '/';

            if (memcmp(p, "/../", 4) == 0)
            {
                memcpy(plast, &p[3], len -= 3);
                p = plast;

                if (plast != s)
                    plast--;

                while ((plast != s) && (*plast != '/'))
                    plast--;

                continue;
            }
        }

        if (*p == '/')
            plast = p;
        else
            *p = TOUPPER(*p);

        p++; len--;
    }
}

int
filename_cmp (const char *s1, const char *s2)
{
#ifdef LOC_DEBUG
    struct ui_file;
    extern struct ui_file *gdb_stdout;
    extern void fputs_filtered (const char *linebuffer, struct ui_file *stream);
#endif

    int s1_len = strlen(s1) + 1;
    char * cs1 = (char *) alloca(s1_len);
    int s2_len = strlen(s2) + 1;
    char * cs2 = (char *) alloca(s2_len);

    memcpy(cs1, s1, s1_len);
    correct_name(cs1, s1_len);

    memcpy(cs2, s2, s2_len);
    correct_name(cs2, s2_len);

    s1_len = strlen(cs1) + 1;
    s2_len = strlen(cs2) + 1;

    if (s1_len > s2_len)
        memcpy(cs1, &cs1[s1_len - s2_len], s2_len);
    else if (s1_len < s2_len)
        memcpy(cs2, &cs2[s2_len - s1_len], s1_len);

#ifdef LOC_DEBUG
    fputs_filtered ("!Check file:", gdb_stdout);
    fputs_filtered (cs2, gdb_stdout);
    fputs_filtered (": compare :", gdb_stdout);
    fputs_filtered (cs1, gdb_stdout);
    fputs_filtered (":\n", gdb_stdout);
#endif

    return strcmp(cs1, cs2);
}





reply via email to

[Prev in Thread] Current Thread [Next in Thread]