- sprintf(newfile, "%s/%s", filename, name);
- sum += size(newfile);
+ if ((strcmp(name, "..") == 0)
+ || (strcmp(name, ".") == 0)) {
+ continue;
+ }
+
+ if (len + strlen(name) + 1 > PATH_MAX) {
+ fprintf(stderr, name_too_long, "du");
+ du_depth--;
+ return 0;
+ }
+ sprintf(newfile, "%s/%s", filename, name);
+
+ sum += du(newfile);
+ }
+ closedir(dir);
+ print(sum, filename);
+ }
+ else if (statbuf.st_nlink > 1 && !count_hardlinks) {
+ /* Add files with hard links only once */
+ if (is_in_ino_dev_hashtable(&statbuf, NULL)) {
+ sum = 0L;
+ if (du_depth == 1)
+ print(sum, filename);
+ }
+ else {
+ add_to_ino_dev_hashtable(&statbuf, NULL);
+ }