Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCorinna Vinschen <corinna@vinschen.de>2001-04-25 01:45:20 +0400
committerCorinna Vinschen <corinna@vinschen.de>2001-04-25 01:45:20 +0400
commit3c73ae1c1e7007777e5c8e6a089d3494092fd69e (patch)
tree18cb2ebbba3fa8a61d8c7bcd7671727073603466 /winsup/cygwin/passwd.cc
parentf669342ed759e39e4709c35d5a66df9b581e5129 (diff)
* passwd.cc (getpwnam_r): Use correct offsets into buffer.
Copy pw_gecos field as well. (getpwuid_r): Ditto.
Diffstat (limited to 'winsup/cygwin/passwd.cc')
-rw-r--r--winsup/cygwin/passwd.cc18
1 files changed, 12 insertions, 6 deletions
diff --git a/winsup/cygwin/passwd.cc b/winsup/cygwin/passwd.cc
index 319ebbbcd..405d8d861 100644
--- a/winsup/cygwin/passwd.cc
+++ b/winsup/cygwin/passwd.cc
@@ -230,7 +230,8 @@ getpwuid_r (uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize, struct
return 0;
/* check needed buffer size. */
- size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) + strlen (temppw->pw_shell);
+ size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) +
+ strlen (temppw->pw_shell) + strlen (temppw->pw_gecos) + 4;
if (needsize > bufsize)
return ERANGE;
@@ -239,11 +240,13 @@ getpwuid_r (uid_t uid, struct passwd *pwd, char *buffer, size_t bufsize, struct
pwd->pw_uid = temppw->pw_uid;
pwd->pw_gid = temppw->pw_gid;
pwd->pw_name = buffer;
- pwd->pw_dir = buffer + strlen (temppw->pw_name);
- pwd->pw_shell = buffer + strlen (temppw->pw_name) + strlen (temppw->pw_dir);
+ pwd->pw_dir = pwd->pw_name + strlen (temppw->pw_name) + 1;
+ pwd->pw_shell = pwd->pw_dir + strlen (temppw->pw_dir) + 1;
+ pwd->pw_gecos = pwd->pw_shell + strlen (temppw->pw_shell) + 1;
strcpy (pwd->pw_name, temppw->pw_name);
strcpy (pwd->pw_dir, temppw->pw_dir);
strcpy (pwd->pw_shell, temppw->pw_shell);
+ strcpy (pwd->pw_gecos, temppw->pw_gecos);
return 0;
}
@@ -282,7 +285,8 @@ getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, s
return 0;
/* check needed buffer size. */
- size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) + strlen (temppw->pw_shell);
+ size_t needsize = strlen (temppw->pw_name) + strlen (temppw->pw_dir) +
+ strlen (temppw->pw_shell) + strlen (temppw->pw_gecos) + 4;
if (needsize > bufsize)
return ERANGE;
@@ -291,11 +295,13 @@ getpwnam_r (const char *nam, struct passwd *pwd, char *buffer, size_t bufsize, s
pwd->pw_uid = temppw->pw_uid;
pwd->pw_gid = temppw->pw_gid;
pwd->pw_name = buffer;
- pwd->pw_dir = buffer + strlen (temppw->pw_name);
- pwd->pw_shell = buffer + strlen (temppw->pw_name) + strlen (temppw->pw_dir);
+ pwd->pw_dir = pwd->pw_name + strlen (temppw->pw_name) + 1;
+ pwd->pw_shell = pwd->pw_dir + strlen (temppw->pw_dir) + 1;
+ pwd->pw_gecos = pwd->pw_shell + strlen (temppw->pw_shell) + 1;
strcpy (pwd->pw_name, temppw->pw_name);
strcpy (pwd->pw_dir, temppw->pw_dir);
strcpy (pwd->pw_shell, temppw->pw_shell);
+ strcpy (pwd->pw_gecos, temppw->pw_gecos);
return 0;
}