bashcompletions += ['lsblk']
endif
+mq_libs = []
+mq_libs += cc.find_library('rt', required : true)
+
exe = executable(
'lsfd',
lsfd_sources,
include_directories : includes,
link_with : [lib_common,
lib_smartcols],
+ dependencies : mq_libs,
install_dir : usrbin_exec_dir,
install : true)
if not is_disabler(exe)
build_by_default: program_tests)
exes += exe
-mq_libs = []
-mq_libs += cc.find_library('rt', required : true)
-
if LINUX
exe = executable(
'test_mkfds',
misc-utils/lsfd-sock-xinfo.c \
misc-utils/lsfd-unkn.c \
misc-utils/lsfd-fifo.c
-lsfd_LDADD = $(LDADD) libsmartcols.la libcommon.la
+lsfd_LDADD = $(LDADD) $(MQ_LIBS) libsmartcols.la libcommon.la
lsfd_CFLAGS = $(AM_CFLAGS) -I$(ul_libsmartcols_incdir)
endif
#include <linux/sched.h>
#include <sys/shm.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include <mqueue.h> /* mq_open */
+
#include "buffer.h"
#include "idcache.h"
#include "strutils.h"
return m;
}
+static unsigned long get_minor_for_mqueue(void)
+{
+ mqd_t mq;
+ char mq_name[BUFSIZ];
+ struct mq_attr attr = {
+ .mq_maxmsg = 1,
+ .mq_msgsize = 1,
+ };
+
+ pid_t self = getpid();
+ struct stat sb;
+
+ snprintf(mq_name, sizeof(mq_name), "/.lsfd-mqueue-nodev-test:%d", self);
+ mq = mq_open(mq_name, O_CREAT|O_EXCL | O_RDONLY, S_IRUSR | S_IWUSR, &attr);
+ if (mq < 0)
+ return 0;
+
+ if (fstat((int)mq, &sb) < 0) {
+ mq_close(mq);
+ mq_unlink(mq_name);
+ return 0;
+ }
+
+ mq_close(mq);
+ mq_unlink(mq_name);
+ return minor(sb.st_dev);
+}
+
static void file_class_initialize(void)
{
unsigned long m;
m = get_minor_for_sysvipc();
if (m)
add_nodev(m, "tmpfs");
+
+ m = get_minor_for_mqueue();
+ if (m)
+ add_nodev(m, "mqueue");
}
static void file_class_finalize(void)