vala Posix.lstat () ошибка - PullRequest
       33

vala Posix.lstat () ошибка

0 голосов
/ 08 ноября 2011

У меня есть этот кусок кода:

using Posix;

int fuseguifs_getattr(string path, Posix.Stat *stbuf)
{
    int res;
    res = Posix.lstat(path, stbuf);
    if (res == -1)
        return -Posix.errno;

    return 0;
}

static int main(string [] args)
{
    Posix.Stat *a;
    fuseguifs_getattr("/home/leon", a);
    return 0;
}

Когда я пытаюсь скомпилировать его, я получаю эту ошибку:

test.vala:6.26-6.30: error: Argument 2: Cannot convert from
`Posix.Stat' to `Posix.Stat*'
    res = Posix.lstat(path, stbuf);
                            ^^^^^
Compilation failed: 1 error(s), 0 warning(s)

Я пытался изменить это:fuseguifs_getattr ("/ home / leon", a);to fuseguifs_getattr ("/ home / leon", * a);

Но затем я получаю сообщение об ошибке: "Невозможно передать значение в ссылочный или выходной параметр"

Я пытался добавить "": res = Posix.lstat (path, out * stbuf);

Это выдает эту ошибку: error: аргументы метода ref и out могут использоваться только с полями, параметрами, локальными переменными и доступом к элементу массива

Я не могу изменить параметры метода fuseguifs_getattr, потому что это часть того, чего ожидают привязки предохранителей.

Я действительно застрял.Кто-нибудь, как я могу решить это?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Я думаю, вы хотите сделать что-то вроде этого:

int fuseguifs_getattr(string path, out Posix.Stat stbuf) {
   int res;
   res = Posix.lstat(path, out stbuf);
   if (res == -1)
      return -Posix.errno;
   return 0;
 }

static int main(string [] args)
{
    Posix.Stat a;
    fuseguifs_getattr("/home/leon", out a);
    return 0;
}

Posix.Stat - это структура, которую lstat собирается заполнить. Вместо того, чтобы передавать указатель на эту структуру, Vala ожидает, что вы укажете, что она будет использоваться в качестве вывода lstat, используя ключевое слово out, которое, как и ключевое слово * 1007, должно быть указано как в объявлении, так и в использовании. , Таким образом, любые определения функций, которые out, вы должны снова указать out при вызове функции.

0 голосов
/ 09 ноября 2011

Кажется, это решает проблему:

int fuseguifs_getattr(string path, Posix.Stat *stbuf)
{
    int res;
    Posix.Stat a;
    res = Posix.lstat(path, stbuf);

    if (res == -1) {
        return -Posix.errno;
    }
    *stbuf = a;

    return 0;
}

Это будет верный путь?

...