diff --git a/libc/dirent/fddir-sortix.c b/libc/dirent/fddir-sortix.cpp
similarity index 83%
rename from libc/dirent/fddir-sortix.c
rename to libc/dirent/fddir-sortix.cpp
index 7d23c990..d3062e7f 100644
--- a/libc/dirent/fddir-sortix.c
+++ b/libc/dirent/fddir-sortix.cpp
@@ -17,21 +17,22 @@
You should have received a copy of the GNU Lesser General Public License
along with the Sortix C Library. If not, see .
- dirent/fddir-sortix.c
+ dirent/fddir-sortix.cpp
Handles the file descriptor backend for the DIR* API on Sortix.
*******************************************************************************/
+#include
+
#include
-#include
+#include
+#include
#include
#include
-#include
#include
+#include
#include
-#include
-#include
-#include
+#include
typedef struct fddir_sortix_struct
{
@@ -41,13 +42,13 @@ typedef struct fddir_sortix_struct
int fd;
} fddir_sortix_t;
-int fddir_sortix_readents(fddir_sortix_t* info)
+static int fddir_sortix_readents(fddir_sortix_t* info)
{
if ( !info->dirent )
{
// Allocate a buffer of at least sizeof(kernel_dirent).
info->direntsize = sizeof(struct kernel_dirent) + 4UL;
- info->dirent = malloc(info->direntsize);
+ info->dirent = (struct kernel_dirent*) malloc(info->direntsize);
if ( !info->dirent )
return -1;
}
@@ -59,7 +60,7 @@ int fddir_sortix_readents(fddir_sortix_t* info)
size_t newdirentsize = sizeof(struct kernel_dirent) + info->dirent->d_namelen + 1;
if ( newdirentsize < info->direntsize )
newdirentsize *= 2;
- struct kernel_dirent* newdirent = malloc(newdirentsize);
+ struct kernel_dirent* newdirent = (struct kernel_dirent*) malloc(newdirentsize);
if ( !newdirent )
return -1;
free(info->dirent);
@@ -71,7 +72,7 @@ int fddir_sortix_readents(fddir_sortix_t* info)
return 0;
}
-int fddir_sortix_read(void* user, struct dirent* dirent, size_t* size)
+static int fddir_sortix_read(void* user, struct dirent* dirent, size_t* size)
{
fddir_sortix_t* info = (fddir_sortix_t*) user;
if ( !info->current )
@@ -84,7 +85,8 @@ int fddir_sortix_read(void* user, struct dirent* dirent, size_t* size)
size_t provided = (user) ? *size : 0;
size_t needed = sizeof(struct dirent) + info->current->d_namelen + 1;
*size = needed;
- if ( provided < needed ) { return 1; }
+ if ( provided < needed )
+ return 1;
dirent->d_ino = info->current->d_ino;
dirent->d_reclen = needed;
@@ -95,19 +97,19 @@ int fddir_sortix_read(void* user, struct dirent* dirent, size_t* size)
return 0;
}
-int fddir_sortix_rewind(void* user)
+static int fddir_sortix_rewind(void* user)
{
fddir_sortix_t* info = (fddir_sortix_t*) user;
return lseek(info->fd, 0, SEEK_SET);
}
-int fddir_sortix_fd(void* user)
+static int fddir_sortix_fd(void* user)
{
fddir_sortix_t* info = (fddir_sortix_t*) user;
return info->fd;
}
-int fddir_sortix_close(void* user)
+static int fddir_sortix_close(void* user)
{
fddir_sortix_t* info = (fddir_sortix_t*) user;
int result = close(info->fd);
@@ -116,10 +118,11 @@ int fddir_sortix_close(void* user)
return result;
}
-DIR* fdopendir(int fd)
+extern "C" DIR* fdopendir(int fd)
{
- fddir_sortix_t* info = calloc(sizeof(fddir_sortix_t), 1);
- if ( !info ) { return NULL; }
+ fddir_sortix_t* info = (fddir_sortix_t*) calloc(sizeof(fddir_sortix_t), 1);
+ if ( !info )
+ return NULL;
DIR* dir = dnewdir();
if ( !dir ) { free(info); return NULL; }
@@ -139,7 +142,7 @@ DIR* fdopendir(int fd)
return dir;
}
-DIR* opendir(const char* path)
+extern "C" DIR* opendir(const char* path)
{
int fd = open(path, O_RDONLY | O_DIRECTORY | O_CLOEXEC);
if ( fd < 0 ) { return NULL; }