summaryrefslogtreecommitdiff
path: root/client/mysqlmanager-pwgen.c
diff options
context:
space:
mode:
authorStaale Smedseng <staale.smedseng@sun.com>2009-08-28 17:51:31 +0200
committerStaale Smedseng <staale.smedseng@sun.com>2009-08-28 17:51:31 +0200
commit1ba25ae47caace207cda0be2b7994a1a845e6cce (patch)
tree4278d9f3353d5c86ca327f6ac2680c001e809843 /client/mysqlmanager-pwgen.c
parent5edd807a7ab72fc16472293fc94a7eb8e762e2b7 (diff)
downloadmariadb-git-1ba25ae47caace207cda0be2b7994a1a845e6cce.tar.gz
Bug #43414 Parenthesis (and other) warnings compiling MySQL
with gcc 4.3.2 This patch fixes a number of GCC warnings about variables used before initialized. A new macro UNINIT_VAR() is introduced for use in the variable declaration, and LINT_INIT() usage will be gradually deprecated. (A workaround is used for g++, pending a patch for a g++ bug.) GCC warnings for unused results (attribute warn_unused_result) for a number of system calls (present at least in later Ubuntus, where the usual void cast trick doesn't work) are also fixed. client/mysqlmanager-pwgen.c: A fix for warn_unused_result, adding fallback to use of srand()/rand() if /dev/random cannot be used. Also actually adds calls to rand() in the second branch so that it actually creates a random password.
Diffstat (limited to 'client/mysqlmanager-pwgen.c')
-rw-r--r--client/mysqlmanager-pwgen.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/client/mysqlmanager-pwgen.c b/client/mysqlmanager-pwgen.c
index 568358b1cda..1be4d8b6970 100644
--- a/client/mysqlmanager-pwgen.c
+++ b/client/mysqlmanager-pwgen.c
@@ -104,29 +104,34 @@ void get_pass(char* pw, int len)
{
FILE* fp;
char* pw_end=pw+len;
+ size_t elements_read= 0;
/*
/dev/random is more secure than rand() because the seed is easy to
predict, so we resort to rand() only if /dev/random is not available
*/
if ((fp=fopen("/dev/random","r")))
{
- fread(pw,len,1,fp);
- fclose(fp);
- while (pw<pw_end)
+ if ((elements_read= fread(pw,len,1,fp)))
{
- char tmp= 'a'+((uint)*pw % 26);
- *pw++= tmp;
+ while (pw<pw_end)
+ {
+ char tmp= 'a'+((uint)*pw % 26);
+ *pw++= tmp;
+ }
}
+ fclose(fp);
}
- else
+
+ if (elements_read != 1)
{
srand(time(NULL));
while (pw<pw_end)
{
- char tmp= 'a'+((uint)*pw % 26);
+ char tmp= 'a'+((uint)rand() % 26);
*pw++= tmp;
}
}
+
*pw_end=0;
}