{
char const *p;
unsigned int result;
+ unsigned int number;
size_t freespace = outlen;
if (outlen <= 1) return 0;
p = fmt;
while (*p && (--freespace > 0)) {
+ number = 0;
+
+ /*
+ * Modifiers are polite.
+ *
+ * But we limit it to 100, because we don't want
+ * utter stupidity.
+ */
+ while (isdigit((int) *p)) {
+ if (number >= 100) {
+ *(p++);
+ continue;
+ }
+
+ number *= 10;
+ number += *p - '0';
+ p++;
+ }
+
+ redo:
result = fr_rand();
+
switch (*p) {
/*
* Lowercase letters
return -1;
}
+ if (number > 0) {
+ number--;
+ goto redo;
+ }
+
p++;
}