realpath Problem

Maik Holtkamp s-y-l at gmx.net
Mon Jul 9 00:29:02 CEST 2001


Hallo,

ich habe ein Problem beim Aufruf von make dep:

---schnipp---
root at syl:/usr/src/linux > make dep
gcc -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -I/include -o
scripts/mkdep scripts/mkdep.c
make[1]: Entering directory
`/usr/src/linux-2.4.6.SuSE/arch/i386/boot'
make[1]: Nothing to be done for `dep'.
make[1]: Leaving directory
`/usr/src/linux-2.4.6.SuSE/arch/i386/boot'
scripts/mkdep -- init/*.c > .depend
realpath(/include) failed, No such file or directory
make: *** [dep-files] Error 1
---schnapp---

Ich habe es auch schon mit dem Orginalen kernel versucht, leider
ohne Erfolg :(.

Ein strace auf make dep liefert einige:

---schnipp---
stat64("scripts/RCS", 0xbfffd66c)       = -1 ENOENT (No such file or
directory)
stat64("scripts/SCCS", 0xbfffd66c)      = -1 ENOENT (No such file or
directory)
---schanpp---

und laut man realpath bedeutet ein ENOENT:

---schnipp---
 ENOENT The named file does not exist.
---schnapp---

von /usr/src/linux/scripts/mkdep.c wird realpath hierin aufgerufen:

---schnipp---
void add_path(const char * name)
{
        struct path_struct *path;
        char resolved_path[PATH_MAX+1];
        const char *name2;

        if (strcmp(name, ".")) {
                name2 = realpath(name, resolved_path);
                if (!name2) {
                  fprintf(stderr, "realpath(%s) failed, %m\n", name);
                        exit(1);
                }
        }
        else {
                name2 = "";
        }

        path_array = realloc(path_array,
(++paths)*sizeof(*path_array));
        if (!path_array) {
                fprintf(stderr, "cannot expand path_arry\n");
                exit(1);
        }

        path = path_array+paths-1;
        path->len = strlen(name2);
        path->buffer = malloc(path->len+1+256+1);
        if (!path->buffer) {
                fprintf(stderr, "cannot allocate path buffer\n");
                exit(1);
        }
        strcpy(path->buffer, name2);
        if (path->len && *(path->buffer+path->len-1) != '/') {
                *(path->buffer+path->len) = '/';
                *(path->buffer+(++(path->len))) = '\0';
        }
}
---schnapp---

Schaut so aus, dass mein Problem schon im ersten if-Zweig liegt,
aber ich kann kein C :(. 

Die Quellen liegen unter /usr/src/linux-2.4.6.SuSE bzw.
/usr/src/linux-2.4.6. 

Mit ln -s habe ich einen Softlink nach /usr/src/linux erstellt und
bin jetzt mit meinem Latein am Ende :(.  Freue mich über jeden
Hinweis.

TIA.


-- 
- maik




More information about the Linux mailing list