Module Name: src
Committed By: christos
Date: Fri Jan 14 18:28:28 UTC 2022
Modified Files:
src/sys/miscfs/procfs: procfs_vnops.c
Log Message:
Put the appropriate DT_ constant in the dirent structure depending on the
file type.
To generate a diff of this commit:
cvs rdiff -u -r1.224 -r1.225 src/sys/miscfs/procfs/procfs_vnops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/miscfs/procfs/procfs_vnops.c
diff -u src/sys/miscfs/procfs/procfs_vnops.c:1.224 src/sys/miscfs/procfs/procfs_vnops.c:1.225
--- src/sys/miscfs/procfs/procfs_vnops.c:1.224 Tue Jan 11 17:55:54 2022
+++ src/sys/miscfs/procfs/procfs_vnops.c Fri Jan 14 13:28:28 2022
@@ -1,4 +1,4 @@
-/* $NetBSD: procfs_vnops.c,v 1.224 2022/01/11 22:55:54 christos Exp $ */
+/* $NetBSD: procfs_vnops.c,v 1.225 2022/01/14 18:28:28 christos Exp $ */
/*-
* Copyright (c) 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc.
@@ -105,7 +105,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.224 2022/01/11 22:55:54 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.225 2022/01/14 18:28:28 christos Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@@ -223,6 +223,7 @@ int procfs_print(void *);
int procfs_pathconf(void *);
int procfs_getpages(void *);
+static uint8_t fttodt(file_t *);
static int atoi(const char *, size_t);
/*
@@ -1410,7 +1411,7 @@ procfs_readdir(void *v)
d.d_fileno = PROCFS_FILENO(pfs->pfs_pid, PFSfd, i - 2);
d.d_namlen = snprintf(d.d_name, sizeof(d.d_name),
"%lld", (long long)(i - 2));
- d.d_type = VREG;
+ d.d_type = fttodt(fp);
if ((error = uiomove(&d, UIO_MX, uio)) != 0)
break;
if (cookies)
@@ -1748,3 +1749,31 @@ atoi(const char *b, size_t len)
return p;
}
+
+/**
+ * convert DTYPE_XXX to corresponding DT_XXX
+ * matching what procfs_loadvnode() does.
+ */
+static uint8_t
+fttodt(file_t *fp)
+{
+ switch (fp->f_type) {
+ case DTYPE_VNODE:
+ switch (fp->f_vnode->v_type) {
+ case VREG: return DT_REG;
+ case VDIR: return DT_LNK; /* symlink */
+ case VBLK: return DT_BLK;
+ case VCHR: return DT_CHR;
+ case VLNK: return DT_LNK;
+ case VSOCK: return DT_SOCK;
+ case VFIFO: return DT_FIFO;
+ default: return DT_UNKNOWN;
+ }
+ case DTYPE_PIPE: return DT_FIFO;
+ case DTYPE_SOCKET: return DT_SOCK;
+ case DTYPE_KQUEUE: /*FALLTHROUGH*/
+ case DTYPE_MISC: /*FALLTHROUGH*/
+ case DTYPE_SEM: return DT_LNK; /* symlinks */
+ default: return DT_UNKNOWN;
+ }
+}