OSDN Git Service

Reorder DIR structure due to bad apps.
authorChristopher Ferris <cferris@google.com>
Thu, 4 Jun 2015 20:30:45 +0000 (13:30 -0700)
committerChristopher Ferris <cferris@google.com>
Thu, 4 Jun 2015 20:30:45 +0000 (13:30 -0700)
It turns out that apportable apps expect that the DIR structure is
the same as in L and below. Modify the structure to have the same
order, and move the new variable to the end of the structure.

Bug: 21037208
Change-Id: Id1258e9dc19423109a2c3a8086d3022965591166

libc/bionic/dirent.cpp

index fb45398..6fd3842 100644 (file)
 
 extern "C" int __getdents64(unsigned int, dirent*, unsigned int);
 
+// Apportable decided to copy the data structure from this file
+// and use it in their own code, but they also call into readdir.
+// In order to avoid a lockup, the structure must be maintained in
+// the exact same order as in L and below. New structure members
+// need to be added to the end of this structure.
+// See b/21037208 for more details.
 struct DIR {
   int fd_;
   size_t available_bytes_;
   dirent* next_;
-  long current_pos_;
   pthread_mutex_t mutex_;
   dirent buff_[15];
+  long current_pos_;
 };
 
 static DIR* __allocate_DIR(int fd) {