Git Product home page Git Product logo

Comments (16)

lexxmark avatar lexxmark commented on August 18, 2024

will look into it

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

I invoked win_bison.exe --update calc.y without any errors on the latest version
Please provide more details to reproduce

from winflexbison.

voodoo66 avatar voodoo66 commented on August 18, 2024

If you introduce some updatable code it will fail, e.g.:
%error-verbose

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

Thank you, I have reproduced it.

The input file remain opened (by caret_info global variable) during renaming calc.y to calc.y~ in fixits_run() function.

It seems on Linux it's legitimate operation. Please correct me if I'm wrong.
On windows this situation leads to a Permission denied error.

There are two options:

  1. Report a defect to upstream bison project with hope it will be fixed there (it seems not really a problem on linux)
  2. Try to fix it in winflexbison (may be send pull request to bison project afterwards)

from winflexbison.

GitMensch avatar GitMensch commented on August 18, 2024

You can rename files with an open handle normally fine (all open handles will still be valid), on linux you can additionally delete or overwrite the file (all open handles will still be valid, on Windows the delete/overwrite fails).

But concerning the current issue: discussing with upstream seems reasonable, then likely close, copy, reopen.

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

You can rename files with an open handle normally fine (all open handles will still be valid)

Are you sure it's true for windows? Why we are getting Permission denied error?

from winflexbison.

GitMensch avatar GitMensch commented on August 18, 2024

I'm sure that this is true when you rename a file via Windows Explorer which may means that either different ways of doing the rename are needed or that only a different process can rename the file.

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

I was performing debugging and after opening file in win_bison tried to rename it in Windows Explorer. It didn't allow me with error that file is used in win_bison

image

from winflexbison.

GitMensch avatar GitMensch commented on August 18, 2024

Hm, can you rename the containing folder? if not then my mind has played me a trick and this is only possible for files opened for read (which does work, doesn't it?)

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

I found this article http://blog.httrack.com/blog/2013/10/05/creating-deletable-and-movable-files-on-windows
So windows fopen function locks file in any mode ('r' as well).

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

In bison code I found two "fopen" calls. It makes sense to replace them with function from article.

from winflexbison.

GitMensch avatar GitMensch commented on August 18, 2024

Thank you for sharing the article. I've had a hope that the gnulib fopen module (not checked if bison uses it already) would fix this, but as https://www.gnu.org/software/gnulib/manual/html_node/fopen.html doesn't mention that part i guess not.

So what should be done next?

  • investigate if the gnulib module is used, and if not if it would solve the issue (using the fopen module may be easily done upstream)
  • work around the issue by manually wrapping fopen as mentioned in the article - in this case likely not replacing the calls in the code but add an extra definition and a #define fopen fopen_unixlike

from winflexbison.

GitMensch avatar GitMensch commented on August 18, 2024

Rechecked: the current gnulib fopen imnplementation does nothing like the article, it may still be most reasonable to adjust this module, use it and send it upstream to gnulib. Then let upstream bison use the updated module (preventing the need for patching again and again).

What do you think?

Side note: I'm just remembering that we have #17, using those would likely have caught this issue up-front...

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

I haven't found fopen definition in the winflexbison code, it uses system function defined in "C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\stdio.h"

I replaced fopen with fopen_unixlike and it solved the problem.
Will use define you suggested #define fopen fopen_unixlike

from winflexbison.

lexxmark avatar lexxmark commented on August 18, 2024

Side note: I'm just remembering that we have #17, using those would likely have caught this issue up-front...

It seems I fixed the problem with binary mode. If you need something else from me there let me know.

from winflexbison.

GitMensch avatar GitMensch commented on August 18, 2024

When you already define the function I'd suggest to add that part of the gnulib definition "just in case":

#if defined _WIN32 && ! defined __CYGWIN__
  if (strcmp (filename, "/dev/null") == 0)
    filename = "NUL";
#endif

from winflexbison.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.