svn commit: r329474 - head/stand/liblua

Conrad Meyer cem at FreeBSD.org
Sat Feb 17 22:18:40 UTC 2018


Author: cem
Date: Sat Feb 17 22:18:39 2018
New Revision: 329474
URL: https://svnweb.freebsd.org/changeset/base/329474

Log:
  liblua: Emulate DIR, opendir, fdopendir, closedir
  
  In a similar fashion to FILE, provide thin shims for the standard directory
  manipulation functions.
  
  Reviewed by:	imp
  Sponsored by:	Dell EMC Isilon
  Differential Revision:	https://reviews.freebsd.org/D14417

Modified:
  head/stand/liblua/lstd.c
  head/stand/liblua/lstd.h

Modified: head/stand/liblua/lstd.c
==============================================================================
--- head/stand/liblua/lstd.c	Sat Feb 17 22:17:21 2018	(r329473)
+++ head/stand/liblua/lstd.c	Sat Feb 17 22:18:39 2018	(r329474)
@@ -127,6 +127,42 @@ getc(FILE *stream)
 	return EOF;
 }
 
+DIR *
+opendir(const char *name)
+{
+	DIR *dp;
+	int fd;
+
+	fd = open(name, O_RDONLY);
+	if (fd < 0)
+		return NULL;
+	dp = fdopendir(fd);
+	if (dp == NULL)
+		close(fd);
+	return dp;
+}
+
+DIR *
+fdopendir(int fd)
+{
+	DIR *dp;
+
+	dp = malloc(sizeof(*dp));
+	if (dp == NULL)
+		return NULL;
+	dp->fd = fd;
+	return dp;
+}
+
+int
+closedir(DIR *dp)
+{
+	close(dp->fd);
+	dp->fd = -1;
+	free(dp);
+	return 0;
+}
+
 void
 luai_writestring(const char *s, int i)
 {

Modified: head/stand/liblua/lstd.h
==============================================================================
--- head/stand/liblua/lstd.h	Sat Feb 17 22:17:21 2018	(r329473)
+++ head/stand/liblua/lstd.h	Sat Feb 17 22:18:39 2018	(r329474)
@@ -43,6 +43,11 @@ typedef struct FILE
 	size_t size;
 } FILE;
 
+typedef struct DIR
+{
+	int fd;
+} DIR;
+
 FILE *fopen(const char *filename, const char *mode);
 FILE *freopen( const char *filename, const char *mode, FILE *stream);
 size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
@@ -50,6 +55,9 @@ int fclose(FILE *stream);
 int ferror(FILE *stream);
 int feof(FILE *stream);
 int getc(FILE * stream);
+DIR *opendir(const char *name);
+DIR *fdopendir(int fd);
+int closedir(DIR *);
 
 #ifndef EOF
 #define EOF (-1)


More information about the svn-src-all mailing list