+ /* fcntl() takes different types of arguments depending on the cmd type
+ * (int, void and pointers are used at the moment). Handling these
+ * arguments for different systems and with possible changes in the future
+ * is error prone.
+ *
+ * Therefore always retrieve a void-pointer from our arguments (even if it
+ * wasn't there) and pass it to real_fcntl(). This shouldn't cause any
+ * problems because a void-pointer is most-likely bigger than an int
+ * (something which is not true in reverse) and shouldn't cause
+ * truncation. For register based calling conventions an invalid register
+ * content is passed, but ignored by real_fcntl(). Not perfect, but should
+ * work fine.
+ */
+ va_start(ap, cmd);
+ result = real_fcntl(fd, cmd, va_arg(ap, void *));
+ va_end(ap);