Submitted By: Robert Connolly (ashes) Date: 2008-05-31 Initial Package Version: 2.5.1 Upstream Status: From Upstream Origin: CVS Description: Bug fixes to handle empty string and make results more random. --- glibc-2.5.1/string/strfry.c 2002-03-11 23:47:45.000000000 +0000 +++ libc/string/strfry.c 2008-03-31 18:30:11.000000000 +0000 @@ -1,4 +1,4 @@ -/* Copyright (C) 1992, 1996, 1999, 2002 Free Software Foundation, Inc. +/* Copyright (C) 1992, 1996, 1999, 2002, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -26,7 +26,6 @@ { static int init; static struct random_data rdata; - size_t len, i; if (!init) { @@ -37,19 +36,18 @@ init = 1; } - len = strlen (string); - for (i = 0; i < len; ++i) - { - int32_t j; - char c; - - __random_r (&rdata, &j); - j %= len; - - c = string[i]; - string[i] = string[j]; - string[j] = c; - } + size_t len = strlen (string); + if (len > 0) + for (size_t i = 0; i < len - 1; ++i) + { + int32_t j; + __random_r (&rdata, &j); + j = j % (len - i) + i; + + char c = string[i]; + string[i] = string[j]; + string[j] = c; + } return string; }