Странная ошибка (разыменование указателя на неполный тип) - PullRequest
1 голос
/ 22 апреля 2010
void get_cwd(char* buf)
{
    char *result;

  current->fs->pwd;
    result = get_dentry_path(current->fs->pwd);

    memcpy(buf, result, strlen(result)+1);

    kfree(result);
}

ошибка: разыменование указателя на неполный тип

Ошибка указывает на current-> fs-> pwd;

включает в себя:

#include <asm/stat.h>
#include <linux/fs.h>
#include <linux/file.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/string.h>
#include <linux/dirent.h>
#include <linux/sched.h>
#include <asm/uaccess.h>
#include <asm/current.h>
#include <linux/path.h>

Если я наберу current-> fs; в 5-й строке gcc не выдает ошибку в этой строке. Проблема в pwd поле.

Ответы [ 4 ]

6 голосов
/ 04 апреля 2011

Этот вопрос устарел, но я снова столкнулся с той же проблемой, пытаясь реализовать getcwd в ядре v2.6.33. Поскольку это наиболее релевантный результат, который появляется при поиске «разыменования указателя на неполный тип current-> fs», было бы хорошо иметь решение для дальнейшего использования.

Решение состоит в том, чтобы включить оба этих заголовка:

#include <linux/sched.h>
#include <linux/fs_struct.h>
4 голосов
/ 22 апреля 2010

error: dereferencing pointer to incomplete type означает, что вы пытаетесь получить доступ к данным в непрозрачной структуре данных. Непрозрачная структура данных обычно представляет собой просто typedef в заголовочном файле (.h *) с реальным определением в файле реализации (.c *) и доступна только для реализации. Это используется, чтобы скрыть детали реализации и предоставить доступ к элементам только через интерфейс API, предоставленный заголовком.

http://en.wikipedia.org/wiki/Opaque_pointer

2 голосов
/ 22 апреля 2010

http://lxr.linux.no/#linux+v2.6.33/include/linux/fs_struct.h#L11 - это должно работать; current должен быть указателем на struct task struct , которая должна содержать указатель на struct fs_struct fs , которая должна содержать struct path pwd, Возможно, вам нужно включить fs_struct.h , чтобы вы могли видеть содержимое struct fs_struct .

0 голосов
/ 22 апреля 2010

Ну, сообщение об ошибке и ваши эксперименты, очевидно, означают, что current->fs - указатель на неполный тип. Это все, что нужно сделать. Почему вы считаете это "странным"?

...