* 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
* maximum allowed length. This function does allow the names "." and "..".
- * Returns TRUE if te string is allowed as a filename. */
+ * Returns TRUE if the string is allowed as a filename. */
gboolean validate_filename(const char *filename)
{
if (filename == NULL || filename[0] == '\0')
file->nlink = 1;
file->mode = 0755;
int64_t time = bluesky_get_current_time();
- printf("time: %lld\n", time);
+ printf("time: %"PRIi64"\n", time);
file->mtime = time;
file->ctime = time;
file->atime = time;
{
static wccstat3 result;
- result.status = NFS3ERR_NOTSUPP;
+ result.wccstat3_u.wcc.before.present = FALSE;
+ result.wccstat3_u.wcc.after.present = FALSE;
+
+ BlueSkyInode *dir = lookup_fh(&argp->dir);
+ if (dir == NULL) {
+ result.status = NFS3ERR_STALE;
+ return &result;
+ }
+
+ encode_pre_wcc(&result.wccstat3_u.wcc, dir);
+
+ if (!validate_filename(argp->name)
+ || strcmp(argp->name, ".") == 0
+ || strcmp(argp->name, "..") == 0)
+ {
+ result.status = NFS3ERR_NOENT;
+ return &result;
+ }
+
+ bluesky_directory_remove(dir, argp->name);
+
+ result.status = NFS3_OK;
+ result.wccstat3_u.wcc.after.present = TRUE;
+ encode_fattr3(&result.wccstat3_u.wcc.after.post_op_attr_u.attributes,
+ dir);
return &result;
}
static entry3 dirents[MAX_READDIR_DIRENTS];
int count = 0;
- BlueSkyDirent start = {NULL, argp->cookie, 0};
+ BlueSkyDirent start = {NULL, NULL, argp->cookie, 0};
GSequenceIter *i = g_sequence_search(dir->dirents, &start,
bluesky_dirent_compare, NULL);