*/
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif /*_GNU_SOURCE*/
+#include <string.h> /* for strcasestr */
+
+
#include <glib.h>
-#include <string.h>
#include <stdlib.h>
#include <glib/gi18n.h>
#include <regex.h>
gboolean
+modest_text_utils_validate_folder_name (const gchar *folder_name)
+{
+ /* based on http://msdn2.microsoft.com/en-us/library/aa365247.aspx,
+ * with some extras */
+
+ guint len;
+ const gchar **cursor;
+ const gchar *forbidden_chars[] = {
+ "<", ">", ":", "\"", "/", "\\", "|", "?", "*", "^", "%", "$", NULL
+ };
+ const gchar *forbidden_names[] = { /* windows does not like these */
+ "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6",
+ "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9",
+ ".", "..", NULL
+ };
+
+ /* cannot be NULL */
+ if (!folder_name)
+ return FALSE;
+
+ /* cannot be empty */
+ len = strlen(folder_name);
+ if (len == 0)
+ return FALSE;
+
+ /* cannot start or end with a space */
+ if (g_ascii_isspace(folder_name[0]) || g_ascii_isspace(folder_name[len - 1]))
+ return FALSE;
+
+ /* cannot contain a forbidden char */
+ for (cursor = forbidden_chars; cursor && *cursor; ++cursor)
+ if (strstr(folder_name, *cursor) != NULL)
+ return FALSE;
+
+ /* cannot contain a forbidden word */
+ if (len <= 4) {
+ for (cursor = forbidden_names; cursor && *cursor; ++cursor) {
+ g_warning ("%s", *cursor);
+ if (g_ascii_strcasecmp (folder_name, *cursor) == 0)
+ return FALSE;
+ }
+ }
+ return TRUE; /* it's valid! */
+}
+
+
+
+gboolean
modest_text_utils_validate_domain_name (const gchar *domain)
{
gboolean valid = FALSE;
gboolean modest_text_utils_validate_email_address (const gchar *email_address,
const gchar **invalid_char_position);
+
+/**
+ * modest_text_utils_validate_folder_name:
+ * @folder_name: a string
+ *
+ * validates the folder name passed as argument. a 'valid folder name'
+ * is a name which should be valid on both Unix and Windows file systems.
+ * of course, this might be stricter than strictly needed in some cases,
+ * but it's better to err on the safe side.
+ *
+ * Returns: TRUE if the folder name is valid, FALSE otherwise
+ **/
+gboolean modest_text_utils_validate_folder_name (const gchar *folder_name);
+
/**
* modest_text_utils_validate_recipient:
* @recipient: a string