| Index: chrome/browser/sync/util/path_helpers-posix.cc
|
| ===================================================================
|
| --- chrome/browser/sync/util/path_helpers-posix.cc (revision 0)
|
| +++ chrome/browser/sync/util/path_helpers-posix.cc (revision 0)
|
| @@ -0,0 +1,99 @@
|
| +// Copyright (c) 2009 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include <pwd.h>
|
| +
|
| +#include <string.h>
|
| +
|
| +#include "base/port.h"
|
| +#include "chrome/browser/sync/util/path_helpers.h"
|
| +#include "strings/strutil.h"
|
| +
|
| +#if ((!defined(OS_LINUX)) && (!defined(OS_MACOSX)))
|
| +#error Compile this file on Mac OS X or Linux only.
|
| +#endif
|
| +
|
| +PathString ExpandTilde(const PathString& path) {
|
| + if (path.empty())
|
| + return path;
|
| + if ('~' != path[0])
|
| + return path;
|
| + PathString ret;
|
| + // TODO(sync): Consider using getpwuid_r.
|
| + ret.insert(0, getpwuid(getuid())->pw_dir);
|
| + ret.append(++path.begin(), path.end());
|
| + return ret;
|
| +}
|
| +
|
| +namespace {
|
| +// TODO(sync): We really should use char[].
|
| +string cache_dir_;
|
| +}
|
| +
|
| +void set_cache_dir(string cache_dir) {
|
| + CHECK(cache_dir_.empty());
|
| + cache_dir_ = cache_dir;
|
| +}
|
| +
|
| +string get_cache_dir() {
|
| + CHECK(!cache_dir_.empty());
|
| + return cache_dir_;
|
| +}
|
| +
|
| +// On Posix, PathStrings are UTF-8, not UTF-16 as they are on Windows.
|
| +// Thus, this function is different from the Windows version.
|
| +PathString TruncatePathString(const PathString& original, int length) {
|
| + if (original.size() <= length)
|
| + return original;
|
| + if (length <= 0)
|
| + return original;
|
| + PathString ret(original.begin(), original.begin() + length);
|
| + COMPILE_ASSERT(sizeof(PathChar) == sizeof(uint8), PathStringNotUTF8);
|
| + PathString::reverse_iterator last_char = ret.rbegin();
|
| +
|
| + // Values taken from
|
| + // http://en.wikipedia.org/w/index.php?title=UTF-8&oldid=252875566
|
| + if (0 == (*last_char & 0x80))
|
| + return ret;
|
| +
|
| + for (; last_char != ret.rend(); ++last_char) {
|
| + if (0 == (*last_char & 0x80)) {
|
| + // got malformed UTF-8; bail
|
| + return ret;
|
| + }
|
| + if (0 == (*last_char & 0x40)) {
|
| + // got another trailing byte
|
| + continue;
|
| + }
|
| + break;
|
| + }
|
| +
|
| + if (ret.rend() == last_char) {
|
| + // We hit the beginning of the string. bail.
|
| + return ret;
|
| + }
|
| +
|
| + int last_codepoint_len = last_char - ret.rbegin() + 1;
|
| +
|
| + if (((0xC0 == (*last_char & 0xE0)) && (2 == last_codepoint_len)) ||
|
| + ((0xE0 == (*last_char & 0xF0)) && (3 == last_codepoint_len)) ||
|
| + ((0xF0 == (*last_char & 0xF8)) && (4 == last_codepoint_len))) {
|
| + // Valid utf-8.
|
| + return ret;
|
| + }
|
| +
|
| + // Invalid utf-8. chop off last "codepoint" and return.
|
| + ret.resize(ret.size() - last_codepoint_len);
|
| + return ret;
|
| +}
|
| +
|
| +// Convert /s to :s .
|
| +PathString MakePathComponentOSLegal(const PathString& component) {
|
| + if (PathString::npos == component.find("/"))
|
| + return PSTR("");
|
| + PathString new_name;
|
| + new_name.reserve(component.size());
|
| + StringReplace(component, "/", ":", true, &new_name);
|
| + return new_name;
|
| +}
|
|
|
| Property changes on: chrome\browser\sync\util\path_helpers-posix.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|