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: [EMAIL PROTECTED] # 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: [EMAIL PROTECTED] # # 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 <[EMAIL PROTECTED]> + * 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 <[EMAIL PROTECTED]> * 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 [EMAIL PROTECTED] 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}) [EMAIL PROTECTED] 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: [EMAIL PROTECTED] @code [EMAIL PROTECTED] PDF_OK +The operation succeeded. [EMAIL PROTECTED] PDF_EINVAL +The mode provided was invalid. [EMAIL PROTECTED] PDF_ERROR +General failure, most applicable to Win32. [EMAIL PROTECTED] 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=
