list_t *_addelement (list_t *list, char *dirname, char *filename, type_t type)
{
+ struct stat sb;
char *name = newfilename (dirname, filename);
- struct stat sb = {0};
- int error = (STAT (name, &sb) == -1);
+ STAT (name, &sb);
size_t size = 0;
- if (type == type_reg_e) {
- size = sb.st_size;
+ if ((type == type_unkn_e) || (type == type_reg_e)) {
+ switch (sb.st_mode & S_IFMT) {
+ case S_IFBLK:
+ type = type_block_e;
+ break;
+ case S_IFCHR:
+ type = type_char_e;
+ break;
+ case S_IFDIR:
+ type = type_dir_e;
+ break;
+ case S_IFIFO:
+ type = type_pipe_e;
+ break;
+#ifndef WIN32
+ case S_IFLNK:
+ type = type_symb_e;
+ break;
+#endif
+ case S_IFREG:
+ type = type_reg_e;
+ break;
+#ifndef WIN32
+ case S_IFSOCK:
+ type = type_socket_e;
+ break;
+#endif
+ }
+
+ if (type == type_reg_e) {
+ size = sb.st_size;
+ }
}
list->nb++;