aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel
diff options
context:
space:
mode:
authorHendrik Brueckner <brueckner@linux.vnet.ibm.com>2009-09-11 04:28:41 -0400
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2009-09-11 04:29:46 -0400
commit18d00acfe2f3fc5ee62f679eb2e397ae962fe69b (patch)
treebeb18427dba544c4ace628980bf445564b85e765 /arch/s390/kernel
parent684d2fd48e718e70dad21ef7c528649578147e48 (diff)
[S390] kernel: Convert upper case scpdata to lower case
If the CP SET LOADDEV on the 3215 console has been used to specify SCPdata, all data is converted to upper case letters. When scpdata contains upper case letters only, convert all letters to lower case. Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r--arch/s390/kernel/ipl.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index 04451a5e3c15..ee57a42e6e93 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -340,19 +340,28 @@ size_t reipl_append_ascii_scpdata(char *dest, size_t size,
340{ 340{
341 size_t count; 341 size_t count;
342 size_t i; 342 size_t i;
343 int has_lowercase;
343 344
344 count = min(size - 1, scpdata_length(ipb->ipl_info.fcp.scp_data, 345 count = min(size - 1, scpdata_length(ipb->ipl_info.fcp.scp_data,
345 ipb->ipl_info.fcp.scp_data_len)); 346 ipb->ipl_info.fcp.scp_data_len));
346 if (!count) 347 if (!count)
347 goto out; 348 goto out;
348 349
349 for (i = 0; i < count; i++) 350 has_lowercase = 0;
351 for (i = 0; i < count; i++) {
350 if (!isascii(ipb->ipl_info.fcp.scp_data[i])) { 352 if (!isascii(ipb->ipl_info.fcp.scp_data[i])) {
351 count = 0; 353 count = 0;
352 goto out; 354 goto out;
353 } 355 }
356 if (!has_lowercase && islower(ipb->ipl_info.fcp.scp_data[i]))
357 has_lowercase = 1;
358 }
354 359
355 memcpy(dest, ipb->ipl_info.fcp.scp_data, count); 360 if (has_lowercase)
361 memcpy(dest, ipb->ipl_info.fcp.scp_data, count);
362 else
363 for (i = 0; i < count; i++)
364 dest[i] = tolower(ipb->ipl_info.fcp.scp_data[i]);
356out: 365out:
357 dest[count] = '\0'; 366 dest[count] = '\0';
358 return count; 367 return count;