Added escape_path() functions

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@1873 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Tyler Dauwalder 2002-11-08 00:37:46 +00:00
parent 0eb6cfedb2
commit e5f9569dcb
2 changed files with 84 additions and 10 deletions

View File

@ -39,18 +39,51 @@ status_t check_entry_name(const char *entry);
//! Checks whether a path name is a valid path name.
status_t check_path_name(const char *path);
//! Returns a copy of \c str in which all alphabetic characters are lowercase.
/*! \brief Returns a copy of \c str in which all alphabetic characters
are lowercase.
Returns \c "(null)" if you're a bonehead and pass in a \c NULL pointer.
*/
std::string to_lower(const char *str);
//! Places a copy of \c str in \c result in which all alphabetic characters are lowercase.
/*! \brief Places a copy of \c str in \c result in which all alphabetic
characters are lowercase.
Returns \c "(null)" if you're a bonehead and pass in a \c NULL pointer.
*/
void to_lower(const char *str, std::string &result);
//! Copies \c str into \c result, converting any uppercase alphabetics to lowercase.
/*! \brief Copies \c str into \c result, converting any uppercase alphabetics
to lowercase.
\a str and \a result may point to the same string. \a result is
assumed to be as long as or longer than \a str.
*/
void to_lower(const char *str, char *result);
//! Converts \c str to lowercase.
void to_lower(char *str);
/*! \brief Escapes any whitespace or other special characters in the path
\a result must be large enough to accomodate the addition of
escape sequences to \a str. \a str and \a result may *NOT* point to
the same string.
Note that this function was designed for use with the registrar's
RecentEntries class, and may not create escapes exactly like you're
hoping. Please double check the code for the function to see if this
is the case.
*/
void escape_path(const char *str, char *result);
/*! \brief Escapes any whitespace or other special characters in the path
\a str must be large enough to accomodate the addition of
escape sequences.
*/
void escape_path(char *str);
}; // namespace Storage
}; // namespace BPrivate

View File

@ -300,8 +300,6 @@ check_path_name(const char *path)
return error;
}
/*! Returns "(null)" if you're a bonehead and pass in a \c NULL pointer.
*/
std::string
to_lower(const char *str)
{
@ -310,8 +308,6 @@ to_lower(const char *str)
return result;
}
/*! Returns "(null)" if you're a bonehead and pass in a \c NULL pointer.
*/
void
to_lower(const char *str, std::string &result)
{
@ -323,9 +319,6 @@ to_lower(const char *str, std::string &result)
result = "(null)";
}
/*! \c str and \c result may point to the same string. \c result is
assumed to be as long as or longer than \c str.
*/
void
to_lower(const char *str, char *result)
{
@ -343,6 +336,54 @@ to_lower(char *str)
to_lower(str, str);
}
void escape_path(const char *str, char *result)
{
if (str && result) {
int32 len = strlen(str);
for (int32 i = 0; i < len; i++) {
char ch = str[i];
char escapeChar = 0;
switch (ch) {
case ' ':
case '\'':
case '"':
case '?':
case '\\':
case '(':
case ')':
case '[':
case ']':
case '*':
case '^':
escapeChar = ch;
break;
}
if (escapeChar) {
*(result++) = '\\';
*(result++) = escapeChar;
} else {
*(result++) = ch;
}
}
*result = 0;
}
}
void escape_path(char *str)
{
if (str) {
char *copy = new(nothrow) char[strlen(str)+1];
if (copy) {
strcpy(copy, str);
escape_path(copy, str);
}
delete [] copy;
}
}
}; // namespace Storage
}; // namespace BPrivate