pdf-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pdf-devel] [PATCH] Updates to disk filesystem implementation.


From: Zac Brown
Subject: [pdf-devel] [PATCH] Updates to disk filesystem implementation.
Date: Mon, 18 Aug 2008 20:49:23 -0500
User-agent: Thunderbird 2.0.0.16 (X11/20080724)

More updates to the disk filesystem implementation including:
* implemented pdf_fsys_disk_file_get_mode
* implemented pdf_fsys_disk_file_set_mode and changed return type to 
pdf_status_t
* fixed return value in pdf_fsys_disk_file_flush
* added file_mode field to pdf_fsys_disk_file_t

-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: 45697fced434a1751e62fc9441ebb83744b7bf17
# timestamp: 2008-08-18 20:43:11 -0500
# base_revision_id: address@hidden
# 
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog   2008-08-18 20:48:15 +0000
+++ ChangeLog   2008-08-19 01:42:52 +0000
@@ -1,3 +1,20 @@
+2008-08-18  Zac Brwon  <address@hidden>
+       * doc/gnupdf.texi (pdf_fsys_file_get_mode): Updated example.
+       (pdf_fsys_file_set_mode): Updated example and updated return type.
+
+       * src/base/pdf-fsys-disk.c
+       (pdf_fsys_disk_file_get_mode): Implemented function.
+       (pdf_fsys_disk_file_set_mode): Implemented function and updated
+       return type to give better information in instances of failure.
+       (pdf_fsys_disk_file_flush): Fix return value for success from
+       PDF_TRUE to PDF_OK.
+
+       * src/base/pdf-fsys-disk.h (pdf_fsys_disk_file_t): Add file_mode field.
+       (pdf_fsys_disk_file_set_mode): Update return type to pdf_status_t.
+
+       * src/base/pdf-fsys.{ch} (pdf_fsys_file_set_mode): Update return type
+       to pdf_status_t.
+
 2008-08-18  Jose E. Marchesi  <address@hidden>
 
        * AUTHORS: Added David Vazquez.

=== modified file 'doc/gnupdf.texi'
--- doc/gnupdf.texi     2008-08-15 00:34:15 +0000
+++ doc/gnupdf.texi     2008-08-19 01:42:52 +0000
@@ -6952,10 +6952,18 @@
 An open file.
 @end table
 @item Returns
-A mode value.
+A mode value if successful, otherwise returns -1.
 @item Usage example
 @example
-XXX
+pdf_status_t ret;
+pdf_fsys_file_t file = pdf_alloc(sizeof(pdf_fsys_file_s));
+pdf_text_t path = pdf_text_new_from_unicode (&text,
+                                             "/path/to/foo",
+                                             12, PDF_TEXT_UTF8);
+ret = pdf_fsys_open (path, PDF_FSYS_OPEN_MODE_READ, file);
+
+enum pdf_fsys_file_mode_e mode;
+mode = pdf_fsys_file_get_mode(file);
 @end example
 @end table
 @end deftypefun
@@ -6985,7 +6993,7 @@
 @end table
 @end deftypefun
 
address@hidden enum pdf_fsys_file_mode_e pdf_fsys_file_set_mode 
(pdf_fsys_file_t @var{file}, enum pdf_fsys_file_mode_e @var{new_mode})
address@hidden pdf_status_t pdf_fsys_file_set_mode (pdf_fsys_file_t @var{file}, 
enum pdf_fsys_file_mode_e @var{new_mode})
 
 Update the mode of a given open file.
 
@@ -6998,11 +7006,28 @@
 The new mode to set for the file.
 @end table
 @item Returns
-The previous mode of the file or 0 if there is an error setting the
-new mode.
+Returns PDF_OK if the mode is set to the new mode, otherwise returns
+an appropriate pdf_status_t error.
+A PDF status value:
address@hidden @code
address@hidden PDF_OK
+The operation succeeded.
address@hidden PDF_EINVAL
+The mode provided was invalid.
address@hidden PDF_ERROR
+General failure, most applicable to Win32.
address@hidden table
 @item Usage example
 @example
-XXX
+pdf_status_t ret;
+pdf_fsys_file_t file = pdf_alloc(sizeof(pdf_fsys_file_s));
+pdf_text_t path = pdf_text_new_from_unicode (&text,
+                                             "/path/to/foo",
+                                             12, PDF_TEXT_UTF8);
+ret = pdf_fsys_open (path, PDF_FSYS_OPEN_MODE_WRITE, file);
+
+enum pdf_fsys_file_mode_e mode = PDF_FSYS_OPEN_MODE_READ;
+ret = pdf_fsys_file_set_mode(file, mode);
 @end example
 @end table
 @end deftypefun

=== modified file 'src/base/pdf-fsys-disk.c'
--- src/base/pdf-fsys-disk.c    2008-08-06 13:51:06 +0000
+++ src/base/pdf-fsys-disk.c    2008-08-19 01:42:52 +0000
@@ -226,6 +226,8 @@
           }
         }
 
+      file_data->file_mode = mode;
+
       return ret_status;
     }
 
@@ -644,8 +646,7 @@
 enum pdf_fsys_file_mode_e
 pdf_fsys_disk_file_get_mode (pdf_fsys_file_t file)
 {
-  /* FIXME: Please implement me :o) */
-  return 0;
+  return ((pdf_fsys_disk_file_t)file->data)->file_mode;
 }
 
 pdf_text_t 
@@ -655,12 +656,62 @@
   return NULL;
 }
 
-enum pdf_fsys_file_mode_e
+pdf_status_t
 pdf_fsys_disk_file_set_mode (pdf_fsys_file_t file,
                              enum pdf_fsys_file_mode_e new_mode)
 {
-  /* FIXME: Please implement me :D */
-  return 0;
+  pdf_char_t mode_str[4];
+  pdf_status_t result_status;
+  pdf_fsys_disk_file_t work_file = (pdf_fsys_disk_file_t)file->data;
+
+  pdf_fsys_disk_build_mode_string(new_mode, mode_str);
+
+  work_file->file_descriptor = freopen(work_file->host_path, mode_str,
+                                       work_file->file_descriptor);
+
+  work_file->file_mode = new_mode;
+
+  if (work_file->file_descriptor == NULL)
+    {
+            switch (errno)
+        {
+#ifndef PDF_HOST_WIN32
+          /* On Windows platforms (excluding Cygwin), freopen does not
+             set errno upon failure. */
+
+        case EBADF:
+        case EFAULT:
+        case EFBIG:
+        case EINVAL:
+          {
+            /* Bad function parameters to underlying write() */
+            result_status = PDF_EBADDATA;
+            break;
+          }
+        case EAGAIN:
+          {
+            /* non-blocking descriptor and blocking writing
+               requested */
+            result_status = PDF_EAGAIN;
+            break;
+          }
+        case ENOSPC:
+          {
+            /* Not room in the disk for the data */
+            result_status = PDF_ENOSPC;
+            break;
+          }
+#endif /* !PDF_HOST_WIN32 */
+        default:
+          {
+            /* Other error conditions */
+            result_status = PDF_ERROR;
+            break;
+          }
+        }
+    }
+
+  return result_status;
 }
 
 pdf_bool_t
@@ -779,7 +830,7 @@
     }
   else
     {
-      result_status = PDF_TRUE;
+      result_status = PDF_OK;
     }
 
   return result_status;

=== modified file 'src/base/pdf-fsys-disk.h'
--- src/base/pdf-fsys-disk.h    2008-08-06 13:51:06 +0000
+++ src/base/pdf-fsys-disk.h    2008-08-19 01:42:52 +0000
@@ -37,6 +37,8 @@
                                  encoded version */
   pdf_size_t host_path_size;  /* Size of the host encoded path */
 
+  enum pdf_fsys_file_mode_e file_mode; /* file mode set when file
+                                          was opened */
   FILE *file_descriptor;      /* The descriptor of the open file */
 };
 
@@ -65,8 +67,8 @@
 pdf_fsys_t pdf_fsys_disk_file_get_filesystem (pdf_fsys_file_t file);
 enum pdf_fsys_file_mode_e pdf_fsys_disk_file_get_mode (pdf_fsys_file_t file);
 pdf_text_t pdf_fsys_disk_file_get_url (pdf_fsys_file_t file);
-enum pdf_fsys_file_mode_e pdf_fsys_disk_file_set_mode (pdf_fsys_file_t file,
-                                                       enum 
pdf_fsys_file_mode_e new_mode);
+pdf_status_t pdf_fsys_disk_file_set_mode (pdf_fsys_file_t file,
+                                          enum pdf_fsys_file_mode_e new_mode);
 pdf_bool_t pdf_fsys_disk_file_same_p (pdf_fsys_file_t file,
                                       pdf_text_t path);
 pdf_status_t pdf_fsys_disk_file_get_pos (pdf_fsys_file_t file,

=== modified file 'src/base/pdf-fsys.c'
--- src/base/pdf-fsys.c 2008-08-06 21:45:28 +0000
+++ src/base/pdf-fsys.c 2008-08-19 01:42:52 +0000
@@ -358,7 +358,7 @@
     }
 }
 
-enum pdf_fsys_file_mode_e
+pdf_status_t
 pdf_fsys_file_set_mode (pdf_fsys_file_t file,
                         enum pdf_fsys_file_mode_e new_mode)
 {

=== modified file 'src/base/pdf-fsys.h'
--- src/base/pdf-fsys.h 2008-08-06 13:51:06 +0000
+++ src/base/pdf-fsys.h 2008-08-19 01:42:52 +0000
@@ -219,7 +219,7 @@
 pdf_fsys_t pdf_fsys_file_get_filesystem (pdf_fsys_file_t file);
 enum pdf_fsys_file_mode_e pdf_fsys_file_get_mode (pdf_fsys_file_t file);
 pdf_text_t pdf_fsys_file_get_url (pdf_fsys_file_t file);
-enum pdf_fsys_file_mode_e pdf_fsys_file_set_mode (pdf_fsys_file_t file,
+pdf_status_t pdf_fsys_file_set_mode (pdf_fsys_file_t file,
                                                   enum pdf_fsys_file_mode_e 
new_mode);
 pdf_bool_t pdf_fsys_file_same_p (pdf_fsys_file_t file,
                                  pdf_text_t path);

# Begin bundle
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
VDGIBvvH+LuSKcKEgBjtiag=

reply via email to

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