From owner-svn-src-projects@FreeBSD.ORG Wed Jul 15 22:27:36 2009 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 79795106566B; Wed, 15 Jul 2009 22:27:36 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 679AD8FC0C; Wed, 15 Jul 2009 22:27:36 +0000 (UTC) (envelope-from stas@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6FMRa2R005488; Wed, 15 Jul 2009 22:27:36 GMT (envelope-from stas@svn.freebsd.org) Received: (from stas@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6FMRa2j005485; Wed, 15 Jul 2009 22:27:36 GMT (envelope-from stas@svn.freebsd.org) Message-Id: <200907152227.n6FMRa2j005485@svn.freebsd.org> From: Stanislav Sedov Date: Wed, 15 Jul 2009 22:27:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195713 - projects/libprocstat/usr.bin/fstat X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 15 Jul 2009 22:27:36 -0000 Author: stas Date: Wed Jul 15 22:27:36 2009 New Revision: 195713 URL: http://svn.freebsd.org/changeset/base/195713 Log: - Fix file flags processing. Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c projects/libprocstat/usr.bin/fstat/libprocstat.h Modified: projects/libprocstat/usr.bin/fstat/libprocstat.c ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.c Wed Jul 15 17:29:05 2009 (r195712) +++ projects/libprocstat/usr.bin/fstat/libprocstat.c Wed Jul 15 22:27:36 2009 (r195713) @@ -78,26 +78,41 @@ static struct { }; #define NVFTYPES (sizeof(vt2fst) / sizeof(*vt2fst)) -char *getmnton(kvm_t *kd, struct mount *m); -void -socktrans(kvm_t *kd, struct socket *sock, int fd, int flags, struct filestat *fst); +static struct { + int flag; + int fst_flag; +} fstflags[] = { + { FREAD, PS_FST_FFLAG_READ }, + { FWRITE, PS_FST_FFLAG_WRITE }, + { O_NONBLOCK, PS_FST_FFLAG_NONBLOCK }, + { O_APPEND, PS_FST_FFLAG_APPEND }, + { O_SHLOCK, PS_FST_FFLAG_SHLOCK }, + { O_EXLOCK, PS_FST_FFLAG_EXLOCK }, + { O_ASYNC, PS_FST_FFLAG_ASYNC }, + { O_SYNC, PS_FST_FFLAG_SYNC }, + { O_NOFOLLOW, PS_FST_FFLAG_NOFOLLOW }, + { O_CREAT, PS_FST_FFLAG_CREAT }, + { O_TRUNC, PS_FST_FFLAG_TRUNC }, + { O_EXCL, PS_FST_FFLAG_EXCL } +}; +#define NFSTFLAGS (sizeof(fstflags) / sizeof(*fstflags)) + +char *getmnton(kvm_t *kd, struct mount *m); +void socktrans(kvm_t *kd, struct socket *sock, int fd, int flags, + struct filestat *fst); int procstat_get_vnode_info_kvm(kvm_t *kd, struct filestat *fst, struct vnstat *vn, char *errbuf); -int -procstat_get_vnode_info_sysctl(struct filestat *fst, struct vnstat *vn, +int procstat_get_vnode_info_sysctl(struct filestat *fst, struct vnstat *vn, char *errbuf); -int -procstat_get_pipe_info_sysctl(struct filestat *fst, struct pipestat *pipe, - char *errbuf); -int -procstat_get_pipe_info_kvm(kvm_t *kd, struct filestat *fst, +int procstat_get_pipe_info_sysctl(struct filestat *fst, struct pipestat *pipe, char *errbuf); -int -procstat_get_pts_info_sysctl(struct filestat *fst, struct ptsstat *pts, +int procstat_get_pipe_info_kvm(kvm_t *kd, struct filestat *fst, + struct pipestat *pipe, char *errbuf); +int procstat_get_pts_info_sysctl(struct filestat *fst, struct ptsstat *pts, char *errbuf); -int -procstat_get_pts_info_kvm(kvm_t *kd, struct filestat *fst, +int procstat_get_pts_info_kvm(kvm_t *kd, struct filestat *fst, struct ptsstat *pts, char *errbuf); +static int to_filestat_flags(int flags); /* @@ -378,7 +393,7 @@ procstat_getfiles_kvm(kvm_t *kd, struct continue; } entry = filestat_new_entry(data, type, i, - PS_FST_FFLAG_READ); + to_filestat_flags(file.f_flag)); if (entry != NULL) STAILQ_INSERT_TAIL(head, entry, next); } @@ -387,6 +402,19 @@ exit: return (head); } +static int +to_filestat_flags(int flags) +{ + int fst_flags; + unsigned int i; + + fst_flags = 0; + for (i = 0; i < NFSTFLAGS; i++) + if (flags & fstflags[i].flag) + fst_flags |= fstflags[i].fst_flag; + return (fst_flags); +} + struct filestat_list * procstat_getfiles_sysctl(struct kinfo_proc *kp __unused) { Modified: projects/libprocstat/usr.bin/fstat/libprocstat.h ============================================================================== --- projects/libprocstat/usr.bin/fstat/libprocstat.h Wed Jul 15 17:29:05 2009 (r195712) +++ projects/libprocstat/usr.bin/fstat/libprocstat.h Wed Jul 15 22:27:36 2009 (r195713) @@ -27,8 +27,18 @@ struct procstat { #define PS_FST_FD_TEXT -5 #define PS_FST_FD_MMAP -6 -#define PS_FST_FFLAG_READ 0x01 -#define PS_FST_FFLAG_WRITE 0x02 +#define PS_FST_FFLAG_READ 0x0001 +#define PS_FST_FFLAG_WRITE 0x0002 +#define PS_FST_FFLAG_NONBLOCK 0x0004 +#define PS_FST_FFLAG_APPEND 0x0008 +#define PS_FST_FFLAG_SHLOCK 0x0010 +#define PS_FST_FFLAG_EXLOCK 0x0020 +#define PS_FST_FFLAG_ASYNC 0x0040 +#define PS_FST_FFLAG_SYNC 0x0080 +#define PS_FST_FFLAG_NOFOLLOW 0x0100 +#define PS_FST_FFLAG_CREAT 0x0200 +#define PS_FST_FFLAG_TRUNC 0x0400 +#define PS_FST_FFLAG_EXCL 0x0800 #define PS_FST_FLAG_ERROR 0x01 #define PS_FST_FLAG_UNKNOWNFS 0x02