* Vincent Torri <vto...@univ-evry.fr> [2011-06-08 20:56:52 +0200]:

> 
> 
> On Tue, 7 Jun 2011, Lucas De Marchi wrote:
> 
> >On Tue, Jun 7, 2011 at 8:24 PM, Vincent Torri <vto...@univ-evry.fr> wrote:
> >>
> >>Hey,
> >>
> >>On windows, using open() followed by fopen() does not work. Hence, in
> >>edje_cc, where mkstemp (which uses open) is followed by fopen, edje_cc
> >>fails.
> >>
> >>Instead of fopen, we can use fdopen. I pasted a  patch below. Can you
> >>comment it (like, instead of keeping the filename in the function that i
> >>modified, why not using it for the fd?
> >
> >The patch looks a bit weird. IMO you should take one of the following
> >approaches (in order of preference):
> >
> >1) Pass only the file descriptor instead of the filename. This way you
> >will write to the file descriptor recently opened by mkstemp.
> >
> >2) call close(fd) before calling create_script_file() and
> >compile_script_file(). This is very ugly thing that should work as
> >well, however one might argument that there's a race because the file
> >might disappear between the call to mkstemp() -- its creation -- and
> >the above functions.
> 
> woldn't it be better to directly call open, fdopen and close in the
> functions create_script_file() and compile_script_file() ?


You actually have no guarantees the file still exists... Someone could
have deleted the file meanwhile. But for this use-case this is just
being paranoid.

So, the easiest fix (and cleanest in my POV) would be the patch below
(untested);


Lucas De Marchi



Index: src/bin/edje_cc_out.c
===================================================================
--- src/bin/edje_cc_out.c       (revision 59987)
+++ src/bin/edje_cc_out.c       (working copy)
@@ -864,8 +864,8 @@
          error_and_abort(ef, "Unable to open temp file \"%s\" for script "
                          "compilation.\n", tmpn);
 
+       close(fd);
        create_script_file(ef, tmpn, cd);
-       close(fd);
 
        snprintf(tmpo, PATH_MAX, "%s/edje_cc.amx-tmp-XXXXXX", tmp_dir);
        fd = mkstemp(tmpo);
@@ -876,8 +876,8 @@
                             "compilation.\n", tmpn);
          }
 
+       close(fd);
        compile_script_file(ef, tmpn, tmpo, i);
-       close(fd);
 
        unlink(tmpn);
        unlink(tmpo);

------------------------------------------------------------------------------
EditLive Enterprise is the world's most technically advanced content
authoring tool. Experience the power of Track Changes, Inline Image
Editing and ensure content is compliant with Accessibility Checking.
http://p.sf.net/sfu/ephox-dev2dev
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to