在已安装文件上执行mdb-export时,“无法分配文件名”

丹尼斯·塞古瑞特(DenysSéguret)

我已经使用CIFS挂载了Windows目录:

sudo mount -t cifs //SERVER/Bases/some/path ~/mnt/data -o user=windomain/login%password

这有效:

cp mnt/data/blabla/file.mdb .
/usr/bin/mdb-export file.mdb tablename

但这不是:

/usr/bin/mdb-export mnt/data/blabla/file.mdb tablename

输出失败

Can't alloc filename

为什么 ?如何mdb-export在已装载的文件上执行而不必先在本地复制它?

丹尼斯·塞古瑞特(DenysSéguret)

一种解决方法是更改​​mount命令以添加noserverino,nounix选项:

sudo mount -t cifs //SERVER/Bases/some/path ~/mnt/data -o user=windomain/login%password,noserverino,nounix

Florian向我指出了正确的方向,那就是mdb_find_fileMDB工具的源代码中的函数:

static gchar *mdb_find_file(char *file_name)
{
    struct stat status;
    gchar *mdbpath, **dir, *tmpfname;
    unsigned int i = 0;

    /* try the provided file name first */
    if (!stat(file_name, &status)) {
        return g_strdup(file_name);
    }

    /* Now pull apart $MDBPATH and try those */
    mdbpath = (gchar *) getenv("MDBPATH");
    /* no path, can't find file */
    if (!mdbpath || !strlen(mdbpath)) return NULL;

    dir = g_strsplit(mdbpath, ":", 0); 
    while (dir[i]) {
        if (!strlen(dir[i])) continue;
        tmpfname = g_strconcat(dir[i++], "/", file_name, NULL);
        if (!stat(tmpfname, &status)) {
            g_strfreev(dir);
            return tmpfname;
        }
        g_free(tmpfname);
    }
    g_strfreev(dir);
    return NULL;
}

由于我没有任何MDBPATHenv var,因此很明显stat调用中存在错误我在那个方向上搜索了一下:

http://www.linuxquestions.org/questions/programming-9/problem-with-stat-o​​n-cifs-852983/

因为我没有尝试重新编译MDB工具来获取错误代码,所以我不确定这是同一个问题,但是添加了该线程建议的选项解决了我的问题,调用时没有更多错误mdb-export

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章