diff options
author | Joerg Steffens <joerg.steffens@bareos.com> | 2015-10-05 11:01:05 +0300 |
---|---|---|
committer | Joerg Steffens <joerg.steffens@bareos.com> | 2015-10-05 11:01:05 +0300 |
commit | af845931530a32f52e408b3181c6d86f2ea27317 (patch) | |
tree | b481fe58e15354b3146d41ce4a07955b7e37a02d | |
parent | 8b61728254745f224634a02e0e320d536d0d38c5 (diff) |
work with utf-8 filenames
-rw-r--r-- | bareos/fuse/node/base.py | 13 | ||||
-rw-r--r-- | bareos/fuse/node/bvfscommon.py | 6 | ||||
-rw-r--r-- | bareos/fuse/node/directory.py | 5 |
3 files changed, 16 insertions, 8 deletions
diff --git a/bareos/fuse/node/base.py b/bareos/fuse/node/base.py index f859b0b..3cd8a89 100644 --- a/bareos/fuse/node/base.py +++ b/bareos/fuse/node/base.py @@ -46,10 +46,17 @@ class Base(object): # ========= def get_name(self): - return self.name + result = self.name + if isinstance(self.name, unicode): + result = name.encode('utf-8', 'replace') + return result def set_name(self, name): - self.name = name + if isinstance(name, unicode): + self.name = name.encode('utf-8', 'replace') + else: + # should be str or NoneType + self.name = name def set_static(self, value=True): self.static = value @@ -196,6 +203,8 @@ class Base(object): if path.len() == 0: try: result = self.xattr[key] + if isinstance(self.xattr[key], unicode): + result = self.xattr[key].encode('utf-8','replace') except KeyError: pass else: diff --git a/bareos/fuse/node/bvfscommon.py b/bareos/fuse/node/bvfscommon.py index a91cb23..adba721 100644 --- a/bareos/fuse/node/bvfscommon.py +++ b/bareos/fuse/node/bvfscommon.py @@ -16,11 +16,11 @@ class BvfsCommon(Base): self.static = True self.restorepath = os.path.normpath("/%s/jobid=%s/" % (self.root.restorepath, self.jobid)) if filename: - self.restorepathfull = os.path.normpath("%s%s%s" % (self.restorepath, path, filename)) + self.restorepathfull = os.path.normpath(u"%s%s%s" % (self.restorepath, path, filename)) else: - self.restorepathfull = os.path.normpath("%s%s" % (self.restorepath, path)) + self.restorepathfull = os.path.normpath(u"%s%s" % (self.restorepath, path)) self.xattr = { - 'user.bareos.restorepath': str(self.restorepathfull), + 'user.bareos.restorepath': self.restorepathfull, 'user.bareos.restored': 'no', } if self.root.restoreclient: diff --git a/bareos/fuse/node/directory.py b/bareos/fuse/node/directory.py index 3559d0c..ffa68ee 100644 --- a/bareos/fuse/node/directory.py +++ b/bareos/fuse/node/directory.py @@ -13,7 +13,7 @@ class Directory(Base): """ def __init__(self, root, name): super(Directory, self).__init__(root, name) - self.defaultdirs = [ ".", ".." ] + self.defaultdirs = [ '.', '..' ] self.stat.st_mode = stat.S_IFDIR | 0755 self.stat.st_nlink = len(self.defaultdirs) # arbitrary default value @@ -24,8 +24,7 @@ class Directory(Base): # copy default dirs if path.len() == 0: self.update() - # TODO: use encode instead str - result = list(self.defaultdirs) + [ str(i) for i in self.subnodes.keys() ] + result = list(self.defaultdirs) + list(self.subnodes.keys()) else: if path.get(0) in self.subnodes: topdir = path.shift() |