summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorjsorg71 <jsorg71>2007-10-28 05:49:08 +0000
committerjsorg71 <jsorg71>2007-10-28 05:49:08 +0000
commit30492c098840916b0a99f6c95ad5516c18a081d0 (patch)
treeed763e523b0bf1cd06cea67904ff6e3802f47e61 /common
parentd0c70a89b25b5b1bcddf51db3d7af3b13dd753c8 (diff)
downloadxrdp-proprietary-30492c098840916b0a99f6c95ad5516c18a081d0.tar.gz
xrdp-proprietary-30492c098840916b0a99f6c95ad5516c18a081d0.zip
added by_name functions that can read any file size
Diffstat (limited to 'common')
-rw-r--r--common/file.c95
-rw-r--r--common/file.h9
2 files changed, 93 insertions, 11 deletions
diff --git a/common/file.c b/common/file.c
index 6fd3e75d..1f510ad4 100644
--- a/common/file.c
+++ b/common/file.c
@@ -32,8 +32,8 @@
/* returns error
returns 0 if everything is ok
returns 1 if problem reading file */
-int APP_CC
-file_read_sections(int fd, struct list* names)
+static int APP_CC
+l_file_read_sections(int fd, int max_file_size, struct list* names)
{
struct stream* s;
char text[256];
@@ -51,8 +51,8 @@ file_read_sections(int fd, struct list* names)
g_memset(text, 0, 256);
list_clear(names);
make_stream(s);
- init_stream(s, 8192);
- len = g_file_read(fd, s->data, 8192);
+ init_stream(s, max_file_size);
+ len = g_file_read(fd, s->data, max_file_size);
if (len > 0)
{
s->end = s->p + len;
@@ -154,6 +154,7 @@ file_read_line(struct stream* s, char* text)
}
/*****************************************************************************/
+/* returns error */
static int APP_CC
file_split_name_value(char* text, char* name, char* value)
{
@@ -195,9 +196,9 @@ file_split_name_value(char* text, char* name, char* value)
/*****************************************************************************/
/* return error */
-int APP_CC
-file_read_section(int fd, const char* section, struct list* names,
- struct list* values)
+static int APP_CC
+l_file_read_section(int fd, int max_file_size, const char* section,
+ struct list* names, struct list* values)
{
struct stream* s;
char text[512];
@@ -208,7 +209,9 @@ file_read_section(int fd, const char* section, struct list* names,
int in_it_index;
int len;
int index;
+ int file_size;
+ file_size = 32 * 1024; /* 32 K file size limit */
g_file_seek(fd, 0);
in_it_index = 0;
in_it = 0;
@@ -216,8 +219,8 @@ file_read_section(int fd, const char* section, struct list* names,
list_clear(names);
list_clear(values);
make_stream(s);
- init_stream(s, 8192);
- len = g_file_read(fd, s->data, 8192);
+ init_stream(s, file_size);
+ len = g_file_read(fd, s->data, file_size);
if (len > 0)
{
s->end = s->p + len;
@@ -259,3 +262,77 @@ file_read_section(int fd, const char* section, struct list* names,
free_stream(s);
return 1;
}
+
+/*****************************************************************************/
+/* returns error
+ returns 0 if everything is ok
+ returns 1 if problem reading file */
+/* 32 K file size limit */
+int APP_CC
+file_read_sections(int fd, struct list* names)
+{
+ return l_file_read_sections(fd, 32 * 1024, names);
+}
+
+/*****************************************************************************/
+/* return error */
+/* this function should be prefered over file_read_sections because it can
+ read any file size */
+int APP_CC
+file_by_name_read_sections(const char* file_name, struct list* names)
+{
+ int fd;
+ int file_size;
+ int rv;
+
+ file_size = g_file_get_size(file_name);
+ if (file_size < 1)
+ {
+ return 1;
+ }
+ fd = g_file_open(file_name);
+ if (fd < 1)
+ {
+ return 1;
+ }
+ rv = l_file_read_sections(fd, file_size, names);
+ g_file_close(fd);
+ return rv;
+}
+
+/*****************************************************************************/
+/* return error */
+/* 32 K file size limit */
+int APP_CC
+file_read_section(int fd, const char* section,
+ struct list* names, struct list* values)
+{
+ return l_file_read_section(fd, 32 * 1024, section, names, values);
+}
+
+/*****************************************************************************/
+/* return error */
+/* this function should be prefered over file_read_section because it can
+ read any file size */
+int APP_CC
+file_by_name_read_section(const char* file_name, const char* section,
+ struct list* names, struct list* values)
+{
+ int fd;
+ int file_size;
+ int rv;
+
+ file_size = g_file_get_size(file_name);
+ if (file_size < 1)
+ {
+ return 1;
+ }
+ fd = g_file_open(file_name);
+ if (fd < 1)
+ {
+ return 1;
+ }
+ rv = l_file_read_section(fd, file_size, section, names, values);
+ g_file_close(fd);
+ return rv;
+}
diff --git a/common/file.h b/common/file.h
index 6f0dfc8f..c019ae9c 100644
--- a/common/file.h
+++ b/common/file.h
@@ -30,7 +30,12 @@
int APP_CC
file_read_sections(int fd, struct list* names);
int APP_CC
-file_read_section(int fd, const char* section, struct list* names,
- struct list* values);
+file_by_name_read_sections(const char* file_name, struct list* names);
+int APP_CC
+file_read_section(int fd, const char* section,
+ struct list* names, struct list* values);
+int APP_CC
+file_by_name_read_section(const char* file_name, const char* section,
+ struct list* names, struct list* values);
#endif