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: [EMAIL PROTECTED] # 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: [EMAIL PROTECTED] # # 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 <[EMAIL PROTECTED]> + * 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 <[EMAIL PROTECTED]> * 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 [EMAIL PROTECTED] pdf_bool_t is_read_only [EMAIL PROTECTED] pdf_bool_t is_readable [EMAIL PROTECTED] 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 [EMAIL PROTECTED] pdf_u32_t creator_code [EMAIL PROTECTED] pdf_u32_t type_code [EMAIL PROTECTED] pdf_u32_t version_major [EMAIL PROTECTED] pdf_u32_t version_minor [EMAIL PROTECTED] pdf_bool_t is_checked_out [EMAIL PROTECTED] 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
