/* Check that a string is a valid file name. We require that it be valid
* UTF-8, that it not be empty, and that it not contain embedded forward
* slashes. Also checks that the length of the string is not more than the
/* Check that a string is a valid file name. We require that it be valid
* UTF-8, that it not be empty, and that it not contain embedded forward
* slashes. Also checks that the length of the string is not more than the
result.wccstat3_u.wcc.before.present = FALSE;
result.wccstat3_u.wcc.after.present = FALSE;
BlueSkyInode *inode = lookup_fh(&argp->object);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.wccstat3_u.wcc.before.present = FALSE;
result.wccstat3_u.wcc.after.present = FALSE;
BlueSkyInode *inode = lookup_fh(&argp->object);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.status = NFS3ERR_NOT_SYNC;
result.wccstat3_u.wcc.after.present = TRUE;
encode_fattr3(&result.wccstat3_u.wcc.after.post_op_attr_u.attributes, inode);
result.status = NFS3ERR_NOT_SYNC;
result.wccstat3_u.wcc.after.present = TRUE;
encode_fattr3(&result.wccstat3_u.wcc.after.post_op_attr_u.attributes, inode);
BlueSkyInode *dir = lookup_fh(&argp->dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.lookup3res_u.resfail.present = FALSE;
BlueSkyInode *dir = lookup_fh(&argp->dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.lookup3res_u.resfail.present = FALSE;
}
/* TODO: Special-case "." and "..". */
uint64_t inum = bluesky_directory_lookup(dir, argp->name);
if (inum == 0) {
result.status = NFS3ERR_NOENT;
}
/* TODO: Special-case "." and "..". */
uint64_t inum = bluesky_directory_lookup(dir, argp->name);
if (inum == 0) {
result.status = NFS3ERR_NOENT;
}
BlueSkyInode *inode = bluesky_get_inode(fs, inum);
if (inode == NULL) {
result.status = NFS3ERR_NOENT;
}
BlueSkyInode *inode = bluesky_get_inode(fs, inum);
if (inode == NULL) {
result.status = NFS3ERR_NOENT;
result.lookup3res_u.resok.obj_attributes.present = TRUE;
encode_fattr3(&result.lookup3res_u.resok.obj_attributes.post_op_attr_u.attributes, inode);
result.lookup3res_u.resok.obj_attributes.present = TRUE;
encode_fattr3(&result.lookup3res_u.resok.obj_attributes.post_op_attr_u.attributes, inode);
fh_bytes = GUINT64_TO_BE(inum);
result.lookup3res_u.resok.object.data.data_len = 8;
result.lookup3res_u.resok.object.data.data_val = (char *)&fh_bytes;
fh_bytes = GUINT64_TO_BE(inum);
result.lookup3res_u.resok.object.data.data_len = 8;
result.lookup3res_u.resok.object.data.data_val = (char *)&fh_bytes;
BlueSkyInode *inode = lookup_fh(&argp->object);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.access3res_u.resfail.present = FALSE;
BlueSkyInode *inode = lookup_fh(&argp->object);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.access3res_u.resfail.present = FALSE;
encode_fattr3(&result.access3res_u.resok.obj_attributes.post_op_attr_u.attributes, inode);
result.access3res_u.resok.access = argp->access;
encode_fattr3(&result.access3res_u.resok.obj_attributes.post_op_attr_u.attributes, inode);
result.access3res_u.resok.access = argp->access;
memset(&result, 0, sizeof(result));
BlueSkyInode *inode = lookup_fh(argp);
memset(&result, 0, sizeof(result));
BlueSkyInode *inode = lookup_fh(argp);
BlueSkyInode *inode = lookup_fh(&argp->file);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.read3res_u.resfail.present = FALSE;
BlueSkyInode *inode = lookup_fh(&argp->file);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.read3res_u.resfail.present = FALSE;
}
encode_pre_wcc(&wcc, inode);
if (inode->type != BLUESKY_REGULAR) {
result.status = NFS3ERR_INVAL;
result.write3res_u.resfail = wcc;
}
encode_pre_wcc(&wcc, inode);
if (inode->type != BLUESKY_REGULAR) {
result.status = NFS3ERR_INVAL;
result.write3res_u.resfail = wcc;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.diropres3_u.resfail = wcc;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.diropres3_u.resfail = wcc;
encode_fattr3(&result.diropres3_u.resok.obj_attributes.post_op_attr_u.attributes, file);
result.diropres3_u.resok.dir_wcc = wcc;
encode_fattr3(&result.diropres3_u.resok.obj_attributes.post_op_attr_u.attributes, file);
result.diropres3_u.resok.dir_wcc = wcc;
fh_bytes = GUINT64_TO_BE(file->inum);
result.diropres3_u.resok.obj.present = TRUE;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_len = 8;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_val = (char *)&fh_bytes;
fh_bytes = GUINT64_TO_BE(file->inum);
result.diropres3_u.resok.obj.present = TRUE;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_len = 8;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_val = (char *)&fh_bytes;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.diropres3_u.resfail = wcc;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.diropres3_u.resfail = wcc;
encode_fattr3(&result.diropres3_u.resok.obj_attributes.post_op_attr_u.attributes, file);
result.diropres3_u.resok.dir_wcc = wcc;
encode_fattr3(&result.diropres3_u.resok.obj_attributes.post_op_attr_u.attributes, file);
result.diropres3_u.resok.dir_wcc = wcc;
fh_bytes = GUINT64_TO_BE(file->inum);
result.diropres3_u.resok.obj.present = TRUE;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_len = 8;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_val = (char *)&fh_bytes;
fh_bytes = GUINT64_TO_BE(file->inum);
result.diropres3_u.resok.obj.present = TRUE;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_len = 8;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_val = (char *)&fh_bytes;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.diropres3_u.resfail = wcc;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.diropres3_u.resfail = wcc;
encode_fattr3(&result.diropres3_u.resok.obj_attributes.post_op_attr_u.attributes, file);
result.diropres3_u.resok.dir_wcc = wcc;
encode_fattr3(&result.diropres3_u.resok.obj_attributes.post_op_attr_u.attributes, file);
result.diropres3_u.resok.dir_wcc = wcc;
fh_bytes = GUINT64_TO_BE(file->inum);
result.diropres3_u.resok.obj.present = TRUE;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_len = 8;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_val = (char *)&fh_bytes;
fh_bytes = GUINT64_TO_BE(file->inum);
result.diropres3_u.resok.obj.present = TRUE;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_len = 8;
result.diropres3_u.resok.obj.post_op_fh3_u.handle.data.data_val = (char *)&fh_bytes;
- static wccstat3 result;
-
- result.wccstat3_u.wcc.before.present = FALSE;
- result.wccstat3_u.wcc.after.present = FALSE;
+ wccstat3 result;
+ memset(&result, 0, sizeof(result));
|| strcmp(argp->name, "..") == 0)
{
result.status = NFS3ERR_NOENT;
|| strcmp(argp->name, "..") == 0)
{
result.status = NFS3ERR_NOENT;
- static wccstat3 result;
-
- result.wccstat3_u.wcc.before.present = FALSE;
- result.wccstat3_u.wcc.after.present = FALSE;
+ wccstat3 result;
+ memset(&result, 0, sizeof(result));
|| strcmp(argp->name, "..") == 0)
{
result.status = NFS3ERR_NOENT;
|| strcmp(argp->name, "..") == 0)
{
result.status = NFS3ERR_NOENT;
}
uint64_t inum = bluesky_directory_lookup(dir, argp->name);
BlueSkyInode *inode = bluesky_get_inode(fs, inum);
if (inode == NULL) {
result.status = NFS3ERR_NOENT;
}
uint64_t inum = bluesky_directory_lookup(dir, argp->name);
BlueSkyInode *inode = bluesky_get_inode(fs, inum);
if (inode == NULL) {
result.status = NFS3ERR_NOENT;
}
if (g_sequence_get_length(inode->dirents) > 0) {
printf("Directory not empty: %d entries\n",
g_sequence_get_length(inode->dirents));
result.status = NFS3ERR_NOTEMPTY;
}
if (g_sequence_get_length(inode->dirents) > 0) {
printf("Directory not empty: %d entries\n",
g_sequence_get_length(inode->dirents));
result.status = NFS3ERR_NOTEMPTY;
wcc_data *wcc1 = &result.rename3res_u.res.fromdir_wcc;
wcc_data *wcc2 = &result.rename3res_u.res.todir_wcc;
wcc_data *wcc1 = &result.rename3res_u.res.fromdir_wcc;
wcc_data *wcc2 = &result.rename3res_u.res.todir_wcc;
}
encode_pre_wcc(wcc1, dir1);
BlueSkyInode *dir2 = lookup_fh(&argp->to.dir);
if (dir2 == NULL) {
result.status = NFS3ERR_STALE;
}
encode_pre_wcc(wcc1, dir1);
BlueSkyInode *dir2 = lookup_fh(&argp->to.dir);
if (dir2 == NULL) {
result.status = NFS3ERR_STALE;
}
BlueSkyInode *dir = lookup_fh(&argp->link.dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.link3res_u.res.linkdir_wcc = wcc;
}
BlueSkyInode *dir = lookup_fh(&argp->link.dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.link3res_u.res.linkdir_wcc = wcc;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.link3res_u.res.linkdir_wcc = wcc;
}
encode_pre_wcc(&wcc, dir);
if (dir->type != BLUESKY_DIRECTORY) {
result.status = NFS3ERR_NOTDIR;
result.link3res_u.res.linkdir_wcc = wcc;
}
if (!bluesky_directory_insert(dir, argp->link.name, inode->inum)) {
result.status = NFS3ERR_EXIST;
result.link3res_u.res.linkdir_wcc = wcc;
}
if (!bluesky_directory_insert(dir, argp->link.name, inode->inum)) {
result.status = NFS3ERR_EXIST;
result.link3res_u.res.linkdir_wcc = wcc;
encode_fattr3(&result.link3res_u.res.file_attributes.post_op_attr_u.attributes, inode);
result.link3res_u.res.linkdir_wcc = wcc;
encode_fattr3(&result.link3res_u.res.file_attributes.post_op_attr_u.attributes, inode);
result.link3res_u.res.linkdir_wcc = wcc;
}
gint bluesky_dirent_compare(gconstpointer a, gconstpointer b,
gpointer unused);
#define MAX_READDIR_DIRENTS 64
}
gint bluesky_dirent_compare(gconstpointer a, gconstpointer b,
gpointer unused);
#define MAX_READDIR_DIRENTS 64
BlueSkyInode *dir = lookup_fh(&argp->dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.readdir3res_u.resfail.present = FALSE;
BlueSkyInode *dir = lookup_fh(&argp->dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.readdir3res_u.resfail.present = FALSE;
memset(result.readdir3res_u.resok.cookieverf, 0,
sizeof(result.readdir3res_u.resok.cookieverf));
memset(result.readdir3res_u.resok.cookieverf, 0,
sizeof(result.readdir3res_u.resok.cookieverf));
int count = 0;
BlueSkyDirent start = {NULL, NULL, argp->cookie, 0};
int count = 0;
BlueSkyDirent start = {NULL, NULL, argp->cookie, 0};
result.readdir3res_u.resok.reply.entries = NULL;
result.readdir3res_u.resok.reply.eof = g_sequence_iter_is_end(i);
result.readdir3res_u.resok.reply.entries = NULL;
result.readdir3res_u.resok.reply.eof = g_sequence_iter_is_end(i);
* attributes/fh3: 88 + 8 + filehandle size
*/
size_t dircount = 88 + 16, attrcount = 0;
* attributes/fh3: 88 + 8 + filehandle size
*/
size_t dircount = 88 + 16, attrcount = 0;
BlueSkyInode *dir = lookup_fh(&argp->dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.readdirplus3res_u.resfail.present = FALSE;
BlueSkyInode *dir = lookup_fh(&argp->dir);
if (dir == NULL) {
result.status = NFS3ERR_STALE;
result.readdirplus3res_u.resfail.present = FALSE;
memset(result.readdirplus3res_u.resok.cookieverf, 0,
sizeof(result.readdirplus3res_u.resok.cookieverf));
memset(result.readdirplus3res_u.resok.cookieverf, 0,
sizeof(result.readdirplus3res_u.resok.cookieverf));
result.readdirplus3res_u.resok.reply.entries = NULL;
result.readdirplus3res_u.resok.reply.eof = g_sequence_iter_is_end(i);
result.readdirplus3res_u.resok.reply.entries = NULL;
result.readdirplus3res_u.resok.reply.eof = g_sequence_iter_is_end(i);
BlueSkyInode *inode = lookup_fh(argp);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.fsstat3res_u.resfail.present = FALSE;
BlueSkyInode *inode = lookup_fh(argp);
if (inode == NULL) {
result.status = NFS3ERR_STALE;
result.fsstat3res_u.resfail.present = FALSE;
result.fsinfo3res_u.resok.properties
= FSF3_LINK | FSF3_SYMLINK | FSF3_HOMOGENEOUS | FSF3_CANSETTIME;
result.fsinfo3res_u.resok.properties
= FSF3_LINK | FSF3_SYMLINK | FSF3_HOMOGENEOUS | FSF3_CANSETTIME;
result.pathconf3res_u.resok.case_insensitive = FALSE;
result.pathconf3res_u.resok.case_preserving = TRUE;
result.pathconf3res_u.resok.case_insensitive = FALSE;
result.pathconf3res_u.resok.case_preserving = TRUE;