开发者

Strange error(dereferencing pointer to incomplete type)

开发者 https://www.devze.com 2022-12-28 08:32 出处:网络
void get_cwd(char* buf) { char *result; current->fs->pwd; result = get_dentry开发者_运维技巧_path(current->fs->pwd);
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);
}

error: dereferencing pointer to incomplete type

The error points to current->fs->pwd;

includes:

#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>

If I type current->fs; on 5th line gcc don't give error on this line. The problem is with pwd field.


This question is kind of stale but I ran into the same issue again trying to implement getcwd in kernel v2.6.33. Since this is the most relevant result that comes up when searched for "dereferencing pointer to incomplete type current->fs", it would be good to have the solution for future reference.

The solution is to include both of these headers:

#include <linux/sched.h>
#include <linux/fs_struct.h>


error: dereferencing pointer to incomplete type means that you're attempting to access data within an opaque data structure. An opaque data structure is usually just a typedef in a header file (.h*), with the real definition in the implementation file (.c*) and only accessible to the implementation. This is used to hide the implementation details and only provide access to the elements via the interface API provided by the header.

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


http://lxr.linux.no/#linux+v2.6.33/include/linux/fs_struct.h#L11 -- this should work; current should be a pointer to struct task struct, which should contain a pointer to struct fs_struct fs, which should contain struct path pwd. Perhaps you need to include fs_struct.h so you can see the contents of struct fs_struct.


Well, the error message and your experiments obviously mean that current->fs is a pointer to an incomplete type. That's all there is to it. Why do you consider it "strange"?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号