[S390] kernel: Convert upper case scpdata to lower case
authorHendrik Brueckner <brueckner@linux.vnet.ibm.com>
Fri, 11 Sep 2009 08:28:41 +0000 (10:28 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Fri, 11 Sep 2009 08:29:46 +0000 (10:29 +0200)
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>
arch/s390/kernel/ipl.c

index 04451a5e3c15920310b2a9f105dbfab41c85b4c5..ee57a42e6e930a9a6be4a985ab6d938bfd97eac8 100644 (file)
@@ -340,19 +340,28 @@ size_t reipl_append_ascii_scpdata(char *dest, size_t size,
 {
        size_t count;
        size_t i;
+       int has_lowercase;
 
        count = min(size - 1, scpdata_length(ipb->ipl_info.fcp.scp_data,
                                             ipb->ipl_info.fcp.scp_data_len));
        if (!count)
                goto out;
 
-       for (i = 0; i < count; i++)
+       has_lowercase = 0;
+       for (i = 0; i < count; i++) {
                if (!isascii(ipb->ipl_info.fcp.scp_data[i])) {
                        count = 0;
                        goto out;
                }
+               if (!has_lowercase && islower(ipb->ipl_info.fcp.scp_data[i]))
+                       has_lowercase = 1;
+       }
 
-       memcpy(dest, ipb->ipl_info.fcp.scp_data, count);
+       if (has_lowercase)
+               memcpy(dest, ipb->ipl_info.fcp.scp_data, count);
+       else
+               for (i = 0; i < count; i++)
+                       dest[i] = tolower(ipb->ipl_info.fcp.scp_data[i]);
 out:
        dest[count] = '\0';
        return count;