[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pdf-devel] [PATCH] Add implementations of four functions for pdf-fsys-d
From: |
Zac Brown |
Subject: |
[pdf-devel] [PATCH] Add implementations of four functions for pdf-fsys-disk.c |
Date: |
Mon, 04 Aug 2008 10:54:04 -0700 |
User-agent: |
Thunderbird 1.5.0.14ubu (X11/20080502) |
Added implementations for pdf_fsys_disk_item_p, pdf_fsys_disk_item_readable_p,
pfd_fsys_disk_item_writable_p and pdf_fsys_disk_get_item_props.
Updated `struct pdf_fsys_item_props_s' to remove unnecessary fields and add
is_readable/is_writable.
Updated documentation to add examples and reflect code.
-Zac
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: http://bzr.savannah.gnu.org/r/pdf/libgnupdf/branches\
# /trunk/
# testament_sha1: c694e003a69b4cc0dd66da37943654fd2adc01aa
# timestamp: 2008-08-03 20:05:24 -0700
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog 2008-07-28 20:28:04 +0000
+++ ChangeLog 2008-08-04 03:03:31 +0000
@@ -1,3 +1,19 @@
+2008-08-03 Zac Brown <address@hidden>
+ * src/base/pdf-fsys.h:
+ (struct pdf_fsys_item_props_s): Remove the following unnecessary
+ fields: is_hidden, is_read_only, is_checked_out, is_published,
+ creator_code, type_code, version_major, version_minor. Added following
fields: is_readable,
+ is_writable.
+
+ * src/base/pdf-fsys-disk.c: Implemented
+ pdf_fsys_disk_get_item_props, pdf_fsys_disk_readable_p,
+ pdf_fsys_disk_writable_p and pdf_fsys_disk_readable_p.
+
+ * doc/gnupdf.texi: Update documentation for
+ `struct pdf_fsys_item_props_s'. Added examples for `pdf_fsys_item_p',
+ `pdf_fsys_get_item_props', `pdf_fsys_item_readable_p' and
+ `pdf_fsys_item_writable_p'
+
2008-07-28 Jose E. Marchesi <address@hidden>
* Fix timestamps.
=== modified file 'doc/gnupdf.texi'
--- doc/gnupdf.texi 2008-07-26 14:31:46 +0000
+++ doc/gnupdf.texi 2008-08-04 03:03:31 +0000
@@ -6168,18 +6168,13 @@
@table @code
@item pdf_bool_t is_hidden
address@hidden pdf_bool_t is_read_only
address@hidden pdf_bool_t is_readable
address@hidden pdf_bool_t is_writable
@item pdf_time_t creation_date
@item pdf_time_t modification_date
@item pdf_u32_t file_size_high
@item pdf_u32_t file_size_low
@item pdf_u32_t folder_size
address@hidden pdf_u32_t creator_code
address@hidden pdf_u32_t type_code
address@hidden pdf_u32_t version_major
address@hidden pdf_u32_t version_minor
address@hidden pdf_bool_t is_checked_out
address@hidden pdf_bool_t is_published
@end table
@end deftp
@@ -6420,7 +6415,12 @@
@end table
@item Usage example
@example
-XXX
+struct pdf_fsys_item_props_s item_props;
+pdf_text_t path = pdf_text_new_from_unicode (&text,
+ "/path/to/foo",
+ 12, PDF_TEXT_UTF8);
+/* Get the properties for the item */
+pdf_status_t ret = pdf_fsys_get_item_props (NULL, path, &item_props);
@end example
@end table
@end deftypefun
@@ -6539,7 +6539,11 @@
@end table
@item Usage example
@example
-XXX
+pdf_text_t path = pdf_text_new_from_unicode (&text,
+ "/path/to/foo",
+ 12, PDF_TEXT_UTF8);
+/* Determine if the item is readable */
+pdf_bool_t ret = pdf_fsys_item_readable_p (NULL, path);
@end example
@end table
@end deftypefun
@@ -6567,7 +6571,11 @@
@end table
@item Usage example
@example
-XXX
+pdf_text_t path = pdf_text_new_from_unicode (&text,
+ "/path/to/foo",
+ 12, PDF_TEXT_UTF8);
+/* Determine if the item is writable */
+pdf_bool_t ret = pdf_fsys_item_writable_p (NULL, path);
@end example
@end table
@end deftypefun
=== modified file 'src/base/pdf-fsys-disk.c'
--- src/base/pdf-fsys-disk.c 2008-06-13 11:55:20 +0000
+++ src/base/pdf-fsys-disk.c 2008-08-04 03:03:31 +0000
@@ -465,29 +465,169 @@
pdf_fsys_disk_get_item_props (pdf_text_t path_name,
struct pdf_fsys_item_props_s *item_props)
{
- /* FIXME: Please implement me :D */
+ pdf_char_t* ascii_path;
+ pdf_u32_t ascii_path_len;
+ pdf_status_t ret_code;
+#ifndef PDF_HOST_WIN32
+ struct stat file_info;
+ unsigned int access_mode;
+#else
+ WIN32_FIND_DATA file_info;
+ HANDLE file_handle;
+#endif
+
+ if (path_name == NULL)
+ {
+ return PDF_EBADDATA;
+ }
+
+ ret_code = pdf_fsys_disk_get_host_path (path_name, &ascii_path,
&ascii_path_len);
+
+ if (ret_code != PDF_OK)
+ {
+ goto set_error;
+ }
+
+ if ((access_mode = access((char*)ascii_path, R_OK)))
+ {
+ goto set_error;
+ }
+ else
+ {
+ item_props->is_readable = PDF_TRUE;
+ }
+
+ if ((access_mode = access((char*)ascii_path, W_OK)))
+ {
+ goto set_error;
+ }
+ else
+ {
+ item_props->is_writable = PDF_TRUE;
+ }
+
+#ifndef PDF_HOST_WIN32
+ if (stat((char*)ascii_path, &file_info))
+ {
+ goto set_error;
+ }
+ item_props->file_size_high = 0;
+ item_props->file_size_low = file_info.st_size;
+#else /* !PDF_HOST_WIN32 */
+ file_handle = FindFirstFile(ascii_path, &file_info);
+ if (file_handle == INVALID_HANDLE_VALUE)
+ {
+ goto set_error;
+ }
+ else
+ {
+ if(CloseHandle(file_handle) == FALSE)
+ {
+ goto set_error;
+ }
+ }
+ item_props->file_size_high = file_info.nFileSizeHigh;
+ item_props->file_size_low = file_info.nFileSizeLow;
+#endif
+
+ if (ascii_path)
+ {
+ pdf_dealloc (ascii_path);
+ }
return PDF_OK;
+
+ set_error:
+ switch(errno)
+ {
+ /* File name syntax errors */
+ case ENAMETOOLONG:
+ case ENOENT:
+ case ENOTDIR:
+#ifndef PDF_HOST_WIN32
+ case ELOOP:
+#endif /* !PDF_HOST_WIN32 */
+ {
+ ret_code = PDF_EBADNAME;
+ break;
+ }
+ /* Specific error conditions */
+ case EACCES:
+ {
+ ret_code = PDF_EBADPERMS;
+ break;
+ }
+ case ENOTEMPTY:
+ {
+ ret_code = PDF_ENOTEMPTY;
+ break;
+ }
+ /* Any other error condition */
+ default:
+ {
+ ret_code = PDF_ERROR;
+ break;
+ }
+ }
+
+ if (ascii_path)
+ {
+ pdf_dealloc (ascii_path);
+ }
+ return ret_code;
}
pdf_bool_t
pdf_fsys_disk_item_p (pdf_text_t path_name)
{
- /* FIXME: Please implement me :D */
+ struct pdf_fsys_item_props_s item_props;
+ pdf_status_t status;
+
+
+ if (pdf_fsys_disk_win32_device_p(path_name) == PDF_TRUE)
+ {
+ return PDF_TRUE;
+ }
+
+ status = pdf_fsys_disk_get_item_props(path_name, &item_props);
+
+ if (status != PDF_OK)
+ {
+ return PDF_FALSE;
+ }
+
return PDF_TRUE;
}
pdf_bool_t
pdf_fsys_disk_item_readable_p (pdf_text_t path_name)
{
- /* FIXME: Please implement me :D */
- return PDF_TRUE;
+ struct pdf_fsys_item_props_s item_props;
+ pdf_status_t status;
+
+ status = pdf_fsys_disk_get_item_props(path_name, &item_props);
+
+ if (status != PDF_OK)
+ {
+ return PDF_FALSE;
+ }
+
+ return item_props.is_readable;
}
pdf_bool_t
pdf_fsys_disk_item_writable_p (pdf_text_t path_name)
{
- /* FIXME: Please implement me :D */
- return PDF_TRUE;
+ struct pdf_fsys_item_props_s item_props;
+ pdf_status_t status;
+
+ status = pdf_fsys_disk_get_item_props(path_name, &item_props);
+
+ if (status != PDF_OK)
+ {
+ return PDF_FALSE;
+ }
+
+ return item_props.is_writable;
}
pdf_text_t
=== modified file 'src/base/pdf-fsys.c'
--- src/base/pdf-fsys.c 2008-06-17 18:24:43 +0000
+++ src/base/pdf-fsys.c 2008-08-04 03:03:31 +0000
@@ -167,46 +167,32 @@
pdf_fsys_item_props_to_hash (const struct pdf_fsys_item_props_s item_props,
pdf_hash_t props_hash)
{
- pdf_bool_t *is_hidden;
- pdf_bool_t *is_read_only;
- pdf_bool_t *is_checked_out;
- pdf_bool_t *is_published;
+ pdf_bool_t *is_hidden;
+ pdf_bool_t *is_readable;
+ pdf_bool_t *is_writable;
/* FIXME: */
/* pdf_time_t creation_date; */
/* pdf_time_t mod_date; */
pdf_u32_t *file_size_high;
pdf_u32_t *file_size_low;
pdf_u32_t *folder_size;
- pdf_u32_t *creator_code;
pdf_u32_t *type_code;
- pdf_u32_t *version_major;
- pdf_u32_t *version_minor;
/* Allocate memory for the hash values */
is_hidden = (pdf_bool_t *) pdf_alloc (sizeof(pdf_bool_t));
- is_read_only = (pdf_bool_t *) pdf_alloc (sizeof(pdf_bool_t));
- is_checked_out = (pdf_bool_t *) pdf_alloc (sizeof(pdf_bool_t));
- is_published = (pdf_bool_t *) pdf_alloc (sizeof(pdf_bool_t));
+ is_readable = (pdf_bool_t *) pdf_alloc (sizeof(pdf_bool_t));
+ is_writable = (pdf_bool_t *) pdf_alloc (sizeof(pdf_bool_t));
file_size_high = (pdf_u32_t*) pdf_alloc (sizeof(pdf_u32_t));
file_size_low = (pdf_u32_t*) pdf_alloc (sizeof(pdf_u32_t));
folder_size = (pdf_u32_t*) pdf_alloc (sizeof(pdf_u32_t));
- creator_code = (pdf_u32_t*) pdf_alloc (sizeof(pdf_u32_t));
- type_code = (pdf_u32_t*) pdf_alloc (sizeof(pdf_u32_t));
- version_major = (pdf_u32_t*) pdf_alloc (sizeof(pdf_u32_t));
- version_minor = (pdf_u32_t*) pdf_alloc (sizeof(pdf_u32_t));
-
+
/* Get the values from the props structure */
*is_hidden = item_props.is_hidden;
- *is_read_only = item_props.is_read_only;
- *is_checked_out = item_props.is_checked_out;
- *is_published = item_props.is_published;
+ *is_readable = item_props.is_readable;
+ *is_writable = item_props.is_writable;
*file_size_high = item_props.file_size_high;
*file_size_low = item_props.file_size_low;
*folder_size = item_props.folder_size;
- *creator_code = item_props.creator_code;
- *type_code = item_props.type_code;
- *version_major = item_props.version_major;
- *version_minor = item_props.version_minor;
/* Associate values with hash keys */
if (pdf_hash_add (props_hash, "isHidden", (void *) is_hidden) !=
@@ -214,17 +200,12 @@
{
return PDF_ERROR;
}
- if (pdf_hash_add (props_hash, "isReadOnly", (void *) is_read_only) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "isCheckedOut", (void *) is_checked_out) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "isPublished", (void *) is_published) !=
+ if (pdf_hash_add (props_hash, "isReadable", (void *) is_readable) !=
+ PDF_OK)
+ {
+ return PDF_ERROR;
+ }
+ if (pdf_hash_add (props_hash, "isWritable", (void *) is_writable) !=
PDF_OK)
{
return PDF_ERROR;
@@ -244,27 +225,6 @@
{
return PDF_ERROR;
}
- if (pdf_hash_add (props_hash, "creatorCode", (void *) creator_code) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "typeCode", (void *) type_code) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "versionMajor", (void *) version_major) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
- if (pdf_hash_add (props_hash, "versionMinor", (void *) version_minor) !=
- PDF_OK)
- {
- return PDF_ERROR;
- }
-
/* Done */
return PDF_OK;
}
=== modified file 'src/base/pdf-fsys.h'
--- src/base/pdf-fsys.h 2008-06-25 01:22:56 +0000
+++ src/base/pdf-fsys.h 2008-08-04 03:03:31 +0000
@@ -45,18 +45,13 @@
struct pdf_fsys_item_props_s
{
pdf_bool_t is_hidden;
- pdf_bool_t is_read_only;
- pdf_bool_t is_checked_out;
- pdf_bool_t is_published;
+ pdf_bool_t is_readable;
+ pdf_bool_t is_writable;
pdf_time_t creation_date;
pdf_time_t modification_date;
pdf_u32_t file_size_high;
pdf_u32_t file_size_low;
pdf_u32_t folder_size;
- pdf_u32_t creator_code;
- pdf_u32_t type_code;
- pdf_u32_t version_major;
- pdf_u32_t version_minor;
};
/* Filesystem */
# Begin bundle
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
I9aB2h55EkmCV/8XckU4UJDFMzSi