]> sourceware.org Git - newlib-cygwin.git/commitdiff
2004-04-14 Pierre Humblet <pierre.humblet@ieee.org>
authorPierre Humblet <phumblet@phumblet.no-ip.org>
Wed, 14 Apr 2004 03:08:00 +0000 (03:08 +0000)
committerPierre Humblet <phumblet@phumblet.no-ip.org>
Wed, 14 Apr 2004 03:08:00 +0000 (03:08 +0000)
        * path.h (path_conv::set_symlink): Add argument.
        (path_conv::get_symlink_length): New method.
        (path_conv::symlink_length): New member.
        * path.cc (path_conv::check): Pass symlen to set_symlink.
        * fhandler_disk_file.cc (fhandler_base::fstat_helper): For symlinks
        set st_size from get_symlink_length.

winsup/cygwin/ChangeLog
winsup/cygwin/fhandler_disk_file.cc
winsup/cygwin/path.cc
winsup/cygwin/path.h

index 51bcd00d13af6ca3b0204f188720aa82fbc425b6..5be12c9687f9bbb0f6b9d637e8ec9c3d8c261451 100644 (file)
@@ -1,3 +1,12 @@
+2004-04-14  Pierre Humblet <pierre.humblet@ieee.org>
+
+        * path.h (path_conv::set_symlink): Add argument.
+        (path_conv::get_symlink_length): New method. 
+        (path_conv::symlink_length): New member.
+        * path.cc (path_conv::check): Pass symlen to set_symlink.
+        * fhandler_disk_file.cc (fhandler_base::fstat_helper): For symlinks
+        set st_size from get_symlink_length.    
+
 2004-04-13  Corinna Vinschen  <corinna@vinschen.de>
 
        * security.cc (set_nt_attribute): Only call get_nt_object_security
index 587f32314a8def7eae24a64024b421dffe768c28..0dce4701b90d162a3a446d6a93ecea8446794cc1 100644 (file)
@@ -282,6 +282,7 @@ fhandler_base::fstat_helper (struct __stat64 *buf,
     buf->st_mode = S_IFDIR;
   else if (pc.issymlink ())
     {
+      buf->st_size = pc.get_symlink_length ();
       /* symlinks are everything for everyone! */
       buf->st_mode = S_IFLNK | S_IRWXU | S_IRWXG | S_IRWXO;
       get_file_attribute (pc.has_acls (), get_io_handle (), get_win32_name (),
index 08e0199152a6850cbec139eaa6398bd97230da4b..1b4000fe754701402945ea7d7519160183081962 100644 (file)
@@ -705,7 +705,7 @@ path_conv::check (const char *src, unsigned opt,
                  saw_symlinks = 1;
                  if (component == 0 && !need_directory && !(opt & PC_SYM_FOLLOW))
                    {
-                     set_symlink (); // last component of path is a symlink.
+                     set_symlink (symlen); // last component of path is a symlink.
                      if (opt & PC_SYM_CONTENTS)
                        {
                          strcpy (path, sym.contents);
index a2db84262926d073966d6ce2ebe2c94dac75d53d..150799d595f4a243abc8cee9d59fc73578e7040e 100644 (file)
@@ -162,7 +162,7 @@ class path_conv
   }
 
   void set_binary () {path_flags |= PATH_BINARY;}
-  void set_symlink () {path_flags |= PATH_SYMLINK;}
+  void set_symlink (DWORD n) {path_flags |= PATH_SYMLINK; symlink_length = n;}
   void set_has_symlinks () {path_flags |= PATH_HAS_SYMLINKS;}
   void set_isdisk () {path_flags |= PATH_ISDISK; dev.devn = FH_FS;}
   void set_exec (int x = 1) {path_flags |= x ? PATH_EXEC : PATH_NOTEXEC;}
@@ -215,7 +215,9 @@ class path_conv
   char *normalized_path;
   size_t normalized_path_size;
   void set_normalized_path (const char *) __attribute__ ((regparm (2)));
+  DWORD get_symlink_length () { return symlink_length; };
  private:
+  DWORD symlink_length;  
   char path[CYG_MAX_PATH];
 };
 
This page took 0.038264 seconds and 5 git commands to generate.