pdf-devel
[Top][All Lists]
Advanced

[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: Sun, 03 Aug 2008 20:09:38 -0700
User-agent: Thunderbird 2.0.0.16 (X11/20080724)

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

reply via email to

[Prev in Thread] Current Thread [Next in Thread]