/* vfs */ static int _vfs(void) { int ret = 0; Mime * mime; char const downloads[] = "/home/user/Downloads"; char const * type; GdkPixbuf * icon; if((mime = mime_new(NULL)) == NULL) return -1; if((type = browser_vfs_mime_type(mime, downloads, S_IFDIR)) == NULL || strcmp(type, "inode/directory") != 0) ret = -1; else printf("%s\n", type); if((icon = browser_vfs_mime_icon(mime, downloads, type, NULL, NULL, 48)) != NULL) g_object_unref(icon); mime_delete(mime); return ret; }
GdkPixbuf * browser_vfs_mime_icon(Mime * mime, char const * filename, char const * type, struct stat * lst, struct stat * st, int size) { GdkPixbuf * ret = NULL; mode_t mode = (lst != NULL) ? lst->st_mode : 0; struct stat s; char const * emblem; if(filename == NULL) return NULL; if(type == NULL) type = browser_vfs_mime_type(mime, filename, S_ISLNK(mode) ? 0 : mode); if(st == NULL && browser_vfs_stat(filename, &s) == 0) st = &s; if(S_ISDIR(mode) || (st != NULL && S_ISDIR(st->st_mode))) ret = _mime_icon_folder(mime, filename, lst, st, size); else if(S_ISLNK(mode) && (st != NULL && S_ISDIR(st->st_mode))) ret = _mime_icon_folder(mime, filename, lst, st, size); else mime_icons(mime, type, size, &ret, -1); if(ret == NULL || lst == NULL) return ret; /* determine the emblem */ if(S_ISCHR(lst->st_mode) || S_ISBLK(lst->st_mode)) emblem = "emblem-system"; else if(S_ISLNK(lst->st_mode)) emblem = "emblem-symbolic-link"; else if((lst->st_mode & (S_IRUSR | S_IRGRP | S_IROTH)) == 0) emblem = "emblem-unreadable"; else if((lst->st_mode & (S_IWUSR | S_IWGRP | S_IWOTH)) == 0) emblem = "emblem-readonly"; else emblem = NULL; /* apply the emblem if relevant */ if(emblem != NULL) ret = _mime_icon_emblem(ret, size, emblem); return ret; }