aboutsummaryrefslogtreecommitdiff
path: root/winsup/cygwin/fhandler_dev_fd.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler_dev_fd.cc')
-rw-r--r--winsup/cygwin/fhandler_dev_fd.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/winsup/cygwin/fhandler_dev_fd.cc b/winsup/cygwin/fhandler_dev_fd.cc
new file mode 100644
index 0000000..6462838
--- /dev/null
+++ b/winsup/cygwin/fhandler_dev_fd.cc
@@ -0,0 +1,53 @@
+/* fhandler_process_fd.cc: fhandler for the /dev/{fd,std{in,out,err}} symlinks
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#include "winsup.h"
+#include "path.h"
+#include "fhandler.h"
+
+fhandler_dev_fd::fhandler_dev_fd ():
+ fhandler_virtual ()
+{
+}
+
+virtual_ftype_t
+fhandler_dev_fd::exists ()
+{
+ return virt_symlink;
+}
+
+int __reg2
+fhandler_dev_fd::fstat (struct stat *buf)
+{
+ const char *path = get_name ();
+ debug_printf ("fstat (%s)", path);
+
+ fhandler_base::fstat (buf);
+
+ buf->st_mode = S_IFLNK | STD_RBITS | S_IWUSR | S_IWGRP | S_IWOTH | STD_XBITS;
+ buf->st_ino = get_ino ();
+
+ return 0;
+}
+
+bool
+fhandler_dev_fd::fill_filebuf ()
+{
+ const char *path = get_name ();
+ debug_printf ("fill_filebuf (%s)", path);
+
+ const char *native = get_native_name ();
+ if (!native)
+ {
+ return false;
+ }
+
+ free(filebuf);
+ filebuf = cstrdup (native);
+ return true;
+}