Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

semantics of Sys.rename #2352

Closed
vicuna opened this issue Mar 17, 2004 · 4 comments
Closed

semantics of Sys.rename #2352

vicuna opened this issue Mar 17, 2004 · 4 comments
Labels

Comments

@vicuna
Copy link

vicuna commented Mar 17, 2004

Original bug ID: 2352
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)

Bug description

Full_Name:
Version: 3.07
OS: mingw
Submission from: serveur-demons.lri.fr (129.175.8.130)

Sys.rename does not have the same semantics under unix and under win32(mingw)

Under Unix, (Sys.rename old new) succeeds even if new exists, but fails under
Mingw.
Moreover, in the latter case the error message is incorrect (Sys.Error "old:
file exists" instead of "new:file exists")

@vicuna
Copy link
Author

vicuna commented Apr 13, 2004

Comment author: administrator

Sys.rename does not have the same semantics under unix and under win32(mingw)

Under Unix, (Sys.rename old new) succeeds even if new exists, but fails under
Mingw.
Moreover, in the latter case the error message is incorrect (Sys.Error "old:
file exists" instead of "new:file exists")

Merci pour le rapport de bug. Comme Sys.rename se contente de refleter la
semantique de la fonction rename de la librairie C, il n'y a pas grand-chose
qu'on puisse faire. J'ai documente la difference de comportement quand le
nouveau nom est deja utilise, et j'ai change le message d'erreur pour qu'il ne
contienne aucun des deux noms (le systeme ne donne aucune indication
qui permette de savoir lequel des deux a declenche une erreur).

-- Damien

@vicuna
Copy link
Author

vicuna commented Apr 13, 2004

Comment author: administrator

In case of an error, there is no way to tell whether it is caused by the old
name
or the new name. Fixed the error message to mention neither.
Documented the variable behaviour. DD 2004-04-13

@vicuna vicuna closed this as completed Apr 13, 2004
@vicuna
Copy link
Author

vicuna commented Apr 13, 2004

Comment author: administrator

"Damien" == Damien Doligez caml-bugs@pauillac.inria.fr writes:

>> Sys.rename does not have the same semantics under unix and under win32(mingw)
>> 
>> Under Unix, (Sys.rename old new) succeeds even if new exists, but fails under
>> Mingw. 
>> Moreover, in the latter case the error message is incorrect (Sys.Error "old:
>> file exists" instead of "new:file exists")

Damien> Merci pour le rapport de bug.  Comme Sys.rename se contente de refleter la
Damien> semantique de la fonction rename de la librairie C, il n'y a pas grand-chose
Damien> qu'on puisse faire.  J'ai documente la difference de comportement quand le
Damien> nouveau nom est deja utilise, et j'ai change le message d'erreur pour qu'il ne
Damien> contienne aucun des deux noms (le systeme ne donne aucune indication
Damien> qui permette de savoir lequel des deux a declenche une erreur).

C'est dommage de ne pas reussir a faire que Sys soit une librairie
reellement independante de l'OS. Autant je comprends que pour Unix
c'est impossible, pour Sys ca devrait pouvoir se faire.

Pourquoi pas un truc du genre

#ifdef _WIN32
unlink(String_val(newname));
#endif

bien sur, c'est juste une suggestion, et je ne sais pas si ca marche
sur toutes les variantes de Win32.

  • Claude

--
| Claude Marché | mailto:Claude.Marche@lri.fr |
| LRI - Bât. 490 | http://www.lri.fr/~marche/ |
| Université de Paris-Sud | phoneto: +33 1 69 15 64 85 |
| F-91405 ORSAY Cedex | faxto: +33 1 69 15 65 86 |

@vicuna
Copy link
Author

vicuna commented Apr 14, 2004

Comment author: administrator

On Apr 13, 2004, at 18:08, Claude.Marche@lri.fr wrote:

C'est dommage de ne pas reussir a faire que Sys soit une librairie
reellement independante de l'OS. Autant je comprends que pour Unix
c'est impossible, pour Sys ca devrait pouvoir se faire.

Pourquoi pas un truc du genre

#ifdef _WIN32
unlink(String_val(newname));
#endif

bien sur, c'est juste une suggestion, et je ne sais pas si ca marche
sur toutes les variantes de Win32.

Malheureusement, ca ne marche pas. Par exemple dans le cas ou un
autre thread (ou processus) essaye d'ouvrir le fichier en meme temps,
ou dans le cas ou oldname et newname representent le meme nom de
fichier.

L'appel systeme Unix a une garantie d'atomicite qu'il est impossible
d'implementer par une couche de librairie. Je ne pense pas que
ca vaut le coup de compliquer le code pour une compatibilite qui
ne sera que partielle de toutes facons.

-- Damien

@vicuna vicuna added the bug label Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant