+/**
+ * Performs validity checking for the PVFS_TYPE_DIRECTORY
directory entries
+ * Checks the following:
+ * - invalid characters in entry names
+ * - entry_names <= PVFS2_SEGMENT_MAX
+ * - warnings for characters that tend to confuse shells
+ * .
+ * \retval 0 on success
+ * \retval -PVFS_EWARNING for non critical warnings
+ * \retval -PVFS_error on failure
+ */
+int PVFS_fsck_validate_dir_ent(
+ const struct PINT_fsck_options *fsck_options, /**< generic
fsck options */
+ const char *filename) /**< Filename associated
with handle */
+{
+ int ret = 0;
+
+ if (strlen(filename) > PVFS_SEGMENT_MAX)
+ {
+ gossip_err(
+ "Error: directory entry [%s] length is >
PVFS_SEGMENT_MAX [%d]\n",
+ filename, PVFS_SEGMENT_MAX);
+ set_return_code(&ret, -PVFS_EINVAL);
+ }
+
+ if (strspn(filename, "/") > 0)
+ {
+ gossip_err("Error: directory entry [%s] contains
invalid / character \n",
+ filename);
+ set_return_code(&ret, -PVFS_EINVAL);
+ }
+
+ if (strspn(filename, "\n") > 0)
+ {
+ gossip_err(
+ "WARNING: directory entry [%s] contains invalid
new line character\n",
+ filename);
+ set_return_code(&ret, -PVFS_EWARNING);
+ }
+
+ if (strspn(filename, "\r") > 0)
+ {
+ gossip_err(
+ "WARNING: directory entry [%s] contains invalid
carriage return character\n",
+ filename);
+ set_return_code(&ret, -PVFS_EWARNING);
+ }
+
+ if (strspn(filename, "|") > 0)
+ {
+ gossip_err(
+ "WARNING: directory entry [%s] contains invalid
pipe character\n",
+ filename);
+ set_return_code(&ret, -PVFS_EWARNING);
+ }
+
+ if (strspn(filename, "*") > 0)
+ {
+ gossip_err(
+ "WARNING: directory entry [%s] contains invalid #
character\n",
+ filename);
+ set_return_code(&ret, -PVFS_EWARNING);
+ }
+
+ if (strspn(filename, "?") > 0)
+ {
+ gossip_err(
+ "WARNING: directory entry [%s] contains invalid ?
character\n",
+ filename);
+ set_return_code(&ret, -PVFS_EWARNING);
+ }
+
+ return ret;
+}