From 51251cad3242679063890c8d320854c915b7dee0 Mon Sep 17 00:00:00 2001
From: Andre Maroneze <andre.maroneze@cea.fr>
Date: Mon, 23 Sep 2024 16:09:08 +0200
Subject: [PATCH] [Libc] fixes and improvements after review

---
 share/libc/dirent.h  | 12 ++++++------
 share/libc/ifaddrs.h |  7 +++++--
 share/libc/utmp.h    | 38 +++++++++++++++++++-------------------
 3 files changed, 30 insertions(+), 27 deletions(-)

diff --git a/share/libc/dirent.h b/share/libc/dirent.h
index 6502d82e23..bd4e1f4f7c 100644
--- a/share/libc/dirent.h
+++ b/share/libc/dirent.h
@@ -59,7 +59,7 @@ extern int alphasort(const struct dirent **a, const struct dirent **b);
 /*@
   requires dirp_valid_dir_stream: \subset(dirp,&__fc_opendir[0 .. __FC_FOPEN_MAX-1]);
   assigns \result \from dirp, *dirp, __fc_p_opendir;
-  assigns __fc_errno \from dirp, *dirp, __fc_p_opendir;
+  assigns errno \from dirp, *dirp, __fc_p_opendir;
   assigns *dirp \from dirp, *dirp, __fc_p_opendir;
   ensures err_or_closed_on_success: 
     (\result == 0 && dirp->__fc_dir_inode == \null) || \result == -1;
@@ -73,13 +73,14 @@ extern int dirfd(DIR *fd);
 
 /*@
   assigns \result \from __fc_p_opendir;
+  assigns errno \from indirect:__fc_opendir[0 .. __FC_FOPEN_MAX-1];
   assigns __fc_opendir[0 .. __FC_FOPEN_MAX-1] \from __fc_opendir[0 .. __FC_FOPEN_MAX-1];
 */
 extern DIR *fdopendir(int fd);
 
 /*@
   assigns \result \from path[0..], __fc_p_opendir;
-  assigns __fc_errno \from path[0..], __fc_p_opendir;
+  assigns errno \from path[0..], __fc_p_opendir;
   ensures result_null_or_valid: \result == \null || \valid(\result);
   ensures valid_dir_stream_on_success: 
     \result != \null ==> \result == &__fc_opendir[\result->__fc_dir_id];
@@ -92,17 +93,16 @@ extern DIR *opendir(const char *path);
   requires dirp_valid_dir_stream: \subset(dirp, &__fc_opendir[0 .. __FC_FOPEN_MAX-1]);
   assigns \result \from *dirp, __fc_p_opendir;
   assigns dirp->__fc_dir_position \from dirp->__fc_dir_position;
-  assigns __fc_errno \from dirp, *dirp, __fc_p_opendir;
+  assigns errno \from dirp, *dirp, __fc_p_opendir;
   ensures result_null_or_valid: \result == \null || \valid(\result);
 */
 extern struct dirent *readdir(DIR *dirp);
 
 /*@
   assigns \result \from *dirp, __fc_p_opendir;
-  assigns *dirp \from *dirp;
-  assigns *entry \from *entry;
+  assigns *dirp, *entry \from *dirp;
   assigns *result \from entry;
-  assigns __fc_errno \from indirect:*dirp, indirect:*entry;
+  assigns errno \from indirect:*dirp, indirect:*entry;
 */
 extern int readdir_r(DIR * dirp, struct dirent * entry,
                      struct dirent ** result);
diff --git a/share/libc/ifaddrs.h b/share/libc/ifaddrs.h
index 3103c22978..f51042afb7 100644
--- a/share/libc/ifaddrs.h
+++ b/share/libc/ifaddrs.h
@@ -26,6 +26,7 @@
 __PUSH_FC_STDLIB
 
 #include "__fc_define_sockaddr.h"
+#include "errno.h"
 
 __BEGIN_DECLS
 
@@ -59,7 +60,8 @@ struct ifmaddrs {
 
 /*@
   allocates *ifap;
-  assigns \result, *ifap \from \nothing; // missing: \from 'system interfaces'
+  assigns \result, *ifap, errno \from \nothing;
+    // missing: \from 'system interfaces'
 */
 extern int getifaddrs(struct ifaddrs **ifap);
 
@@ -71,7 +73,8 @@ extern void freeifaddrs(struct ifaddrs *ifa);
 
 /*@
   allocates *ifmap;
-  assigns \result, *ifmap \from \nothing; // missing: \from 'system interfaces'
+  assigns \result, *ifmap, errno \from \nothing;
+    // missing: \from 'system interfaces'
 */
 extern int getifmaddrs(struct ifmaddrs **ifmap);
 
diff --git a/share/libc/utmp.h b/share/libc/utmp.h
index 3f7894f0e6..a0db12304b 100644
--- a/share/libc/utmp.h
+++ b/share/libc/utmp.h
@@ -115,16 +115,16 @@ extern void setutent (void);
 extern void endutent (void);
 
 /*@
-  assigns \result \from &__fc_get, indirect:__fc_utmp, indirect:*id;
-  assigns __fc_get \from __fc_get, indirect:__fc_utmp, indirect:*id;
+  assigns \result \from &__fc_get, indirect:__fc_utmp, indirect:*ut;
+  assigns __fc_get \from __fc_get, indirect:__fc_utmp, indirect:*ut;
 */
-extern struct utmp *getutid (const struct utmp *id);
+extern struct utmp *getutid (const struct utmp *ut);
 
 /*@
-  assigns \result \from &__fc_get, indirect:__fc_utmp, indirect:*line;
-  assigns __fc_get \from __fc_get, indirect:__fc_utmp, indirect:*line;
+  assigns \result \from &__fc_get, indirect:__fc_utmp, indirect:*ut;
+  assigns __fc_get \from __fc_get, indirect:__fc_utmp, indirect:*ut;
 */
-extern struct utmp *getutline (const struct utmp *line);
+extern struct utmp *getutline (const struct utmp *ut);
 
 /*@
   assigns __fc_utmp \from __fc_utmp, *utmp_ptr;
@@ -134,26 +134,26 @@ extern struct utmp *pututline (const struct utmp *utmp_ptr);
 
 /*@
   assigns \result \from indirect:__fc_utmp;
-  assigns *buffer \from __fc_utmp;
-  assigns *result \from &__fc_utmp;
+  assigns *ubuf \from __fc_utmp;
+  assigns *ubufp \from &__fc_utmp;
 */
-extern int getutent_r (struct utmp *buffer, struct utmp **result);
+extern int getutent_r (struct utmp *ubuf, struct utmp **ubufp);
 
 /*@
-  assigns \result \from indirect:*id, indirect:__fc_utmp;
-  assigns *buffer \from indirect:*id, __fc_utmp;
-  assigns *result \from indirect:*id, &__fc_utmp;
+  assigns \result \from indirect:*ut, indirect:__fc_utmp;
+  assigns *ubuf \from indirect:*ut, __fc_utmp;
+  assigns *ubufp \from indirect:*ut, &__fc_utmp;
 */
-extern int getutid_r (const struct utmp *id, struct utmp *buffer,
-                      struct utmp **result);
+extern int getutid_r (const struct utmp *ut, struct utmp *ubuf,
+                      struct utmp **ubufp);
 
 /*@
-  assigns \result \from indirect:*line, indirect:__fc_utmp;
-  assigns *buffer \from indirect:*line, __fc_utmp;
-  assigns *result \from indirect:*line, &__fc_utmp;
+  assigns \result \from indirect:*ut, indirect:__fc_utmp;
+  assigns *ubuf \from indirect:*ut, __fc_utmp;
+  assigns *ubufp \from indirect:*ut, &__fc_utmp;
 */
-extern int getutline_r (const struct utmp *line,
-                        struct utmp *buffer, struct utmp **result);
+extern int getutline_r (const struct utmp *ut,
+                        struct utmp *ubuf, struct utmp **ubufp);
 
 
 __END_DECLS
-- 
GitLab