From: Eric Blake <eblake@redhat.com>
To: Xu Wang <gesaint@linux.vnet.ibm.com>
Cc: kwolf@redhat.com, famz@redhat.com, stefanha@gmail.com,
qemu-devel@nongnu.org, wdongxu@linux.vnet.ibm.com,
Xu Wang <cngesaint@gmail.com>,
xiawenc@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [PATCH V5 3/6] block: Add WIN32 platform support for backing_file_loop_check()
Date: Fri, 02 Aug 2013 16:27:25 -0600 [thread overview]
Message-ID: <51FC324D.2070105@redhat.com> (raw)
In-Reply-To: <1375434137-4452-4-git-send-email-gesaint@linux.vnet.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 2949 bytes --]
On 08/02/2013 03:02 AM, Xu Wang wrote:
> From: Xu Wang <cngesaint@gmail.com>
>
> Method of get_inode is different between Linux and WIN32 plateform.
s/plateform/platform/g (3 instances in the commit message)
> This patch added inode caculate method on Windows plateform so that
s/added/adds an/
s/caculate/calculation/
> backing file check could work on Windows plateform.
>
> Signed-off-by: Xu Wang <cngesaint@gmail.com>
> ---
> block.c | 156 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 148 insertions(+), 8 deletions(-)
>
> }
>
> +#ifdef _WIN32
> +static int get_lnk_target_file(const char *lnk_file, char *filepath)
> +{
> + unsigned int flag, offset;
> + unsigned int sflag;
> + char uch;
> + int i = 0;
> +
> + FILE *fd = fopen(lnk_file, "rb");
> + if (!fd) {
> + error_report("Open file %s failed.", lnk_file);
Error messages should not include '.'; also, when it is due to a system
call failure, you should include strerror() information explaining the
failure.
> + return -1;
> + }
> +
> + /* Check if the file is shortcuts by reading first 4 bytes if it's 0x4c */
> + if (fread(&flag, 4, 1, fd) != 1) {
> + error_report("Read 0x4c field of %s failed.", lnk_file);
I don't know WIN32 programming well enough to know if this really how
you should be checking for infinite loops. But how is this supposed to
work? In POSIX, fopen() of a symlink opens its destination; to read a
symlink's contents, you have to use readlink() (that is, the API used to
read file contents is NOT the API used to chase link resolution). This
whole function feels like a horrible hack, unlikely to do what you meant.
> +
> +static long get_inode(const char *filename)
Again, 'long' and 'ino_t' are not necessarily compatible types. Use
ino_t. And again, 'ino_t' alone does not uniquely designate a file; it
is the combination of device and inode numbers together that give
uniqueness.
> +{
> + #ifdef _WIN32
We usually anchor # in the first column.
> + char pbuf[PATH_MAX + 1], *p;
> + long inode;
> + struct stat sbuf;
> + char path[PATH_MAX + 1];
> + int len;
> +
> + /* If filename contains .lnk, it's a shortcuts. Target file
> + * need to be parsed.
How does the rest of the qemu code base handle .lnk files? Are we
trying to dereference the target file automatically? If so, is there
already code that does that, which we can reuse here? It just seems
awkward that you are implementing this from scratch - either we support
reading through windows links (and should reuse that code) or we don't
(and hence it doesn't matter if the user passes us a .lnk file, we
aren't treating it any different than any other data file).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 621 bytes --]
next prev parent reply other threads:[~2013-08-02 22:27 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-02 9:02 [Qemu-devel] [PATCH V5 0/6] Refine and export backing file loop check Xu Wang
2013-08-02 9:02 ` [Qemu-devel] [PATCH V5 1/6] block/qemu-img: Refine and export infinite loop checking in collect_image_info_list() Xu Wang
2013-08-02 22:09 ` Eric Blake
2013-10-11 8:27 ` Xu Wang
2013-08-02 9:02 ` [Qemu-devel] [PATCH V5 2/6] qemu-img: Add infinite loop checking in bdrv_new_open() Xu Wang
2013-08-02 22:16 ` Eric Blake
2013-08-02 9:02 ` [Qemu-devel] [PATCH V5 3/6] block: Add WIN32 platform support for backing_file_loop_check() Xu Wang
2013-08-02 22:27 ` Eric Blake [this message]
2013-08-02 9:02 ` [Qemu-devel] [PATCH V5 4/6] block: Check infinite loop in bdrv_img_create() Xu Wang
2013-08-02 22:29 ` Eric Blake
2013-08-02 9:02 ` [Qemu-devel] [PATCH V5 5/6] block: Add backing file loop check in change_backing_file() Xu Wang
2013-08-02 22:31 ` Eric Blake
2013-08-02 9:02 ` [Qemu-devel] [PATCH V5 6/6] block: Add infinite loop check in drive_init() Xu Wang
2013-08-02 22:33 ` Eric Blake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51FC324D.2070105@redhat.com \
--to=eblake@redhat.com \
--cc=cngesaint@gmail.com \
--cc=famz@redhat.com \
--cc=gesaint@linux.vnet.ibm.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@gmail.com \
--cc=wdongxu@linux.vnet.ibm.com \
--cc=xiawenc@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).