diff --git a/src/calc.c b/src/calc.c
index e54eb01fe2a96246634e2abc83660184a3fc9ab2..79bd4ec976f025e7e12d367229c6ef492d200187 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -344,9 +344,13 @@ void calc_process() {
     strcpy(t->name, orig->name);
   } else {
     t->name = malloc(strlen(path)+strlen(name)+1);
-    strcpy(t->name, path);
-    strcat(t->name, "/");
-    strcat(t->name, name);
+    if(strcmp(path, "/"))
+      strcpy(t->name, path);
+    if(strcmp(name, ".")) {
+      strcat(t->name, "/");
+      strcat(t->name, name);
+    } else
+      t->name[0] = 0;
   }
   root = t;
   curdev = fs.st_dev;
diff --git a/src/util.c b/src/util.c
index 76f43d7b123355f47856a79bd9065212c536e5fe..a19fea0790f09463b39173e7e7e7ef89221f0f18 100644
--- a/src/util.c
+++ b/src/util.c
@@ -214,6 +214,9 @@ char *getpath(struct dir *cur) {
   struct dir *d, **list;
   int c, i;
 
+  if(!cur->name[0])
+    return "/";
+
   c = i = 1;
   for(d=cur; d!=NULL; d=d->parent) {
     i += strlen(d->name)+1;