nsprpub/pr/tests/mbcs.c

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /*
     7 ** File: mbcs.c
     8 **
     9 ** Synopsis: mbcs {dirName}
    10 **
    11 ** where dirName is the directory to be traversed. dirName is required.
    12 **
    13 ** Description: 
    14 ** mbcs.c tests use of multi-byte characters, as would be passed to
    15 ** NSPR funtions by internationalized applications. 
    16 **
    17 ** mbcs.c, when run on any single-byte platform, should run correctly.
    18 ** In truth, running the mbcs test on a single-byte platform is
    19 ** really meaningless. mbcs.c, nor any NSPR library or test is not
    20 ** intended for use with any wide character set, including Unicode.
    21 ** mbcs.c should not be included in runtests.ksh because it requires
    22 ** extensive user intervention to set-up and run.
    23 **
    24 ** mbcs.c should be run on a platform using some form of multi-byte
    25 ** characters. The initial platform for this test is a Japanese
    26 ** language Windows NT 4.0 machine. ... Thank you Noriko Hoshi.
    27 **
    28 ** To run mbcs.c, the tester should create a directory tree containing
    29 ** some files in the same directory from which the test is run; i.e.
    30 ** the current working directory. The directory and files should be
    31 ** named such that when represented in the local multi-byte character
    32 ** set, one or more characters of the name is longer than a single
    33 ** byte.
    34 ** 
    35 */
    37 #include <plgetopt.h> 
    38 #include <nspr.h> 
    39 #include <stdio.h>
    40 #include <stdlib.h>
    41 #include <string.h>
    43 /*
    44 ** Test harness infrastructure
    45 */
    46 PRLogModuleInfo *lm;
    47 PRLogModuleLevel msgLevel = PR_LOG_NONE;
    48 PRIntn  debug = 0;
    49 PRUint32  failed_already = 0;
    50 /* end Test harness infrastructure */
    52 char *dirName =  NULL;  /* directory name to traverse */
    54 /*
    55 ** Traverse directory
    56 */
    57 static void TraverseDirectory( unsigned char *dir )
    58 {
    59     PRDir *cwd;
    60     PRDirEntry *dirEntry;
    61     PRFileInfo info;
    62     PRStatus rc;
    63     PRInt32 err;
    64     PRFileDesc *fd;
    65     char    nextDir[256];
    66     char    file[256];
    68     printf("Directory: %s\n", dir );
    69     cwd = PR_OpenDir( dir );
    70     if ( NULL == cwd )  {
    71         printf("PR_OpenDir() failed on directory: %s, with error: %d, %d\n", 
    72             dir, PR_GetError(), PR_GetOSError());
    73         exit(1);
    74     }
    75     while( NULL != (dirEntry = PR_ReadDir( cwd, PR_SKIP_BOTH | PR_SKIP_HIDDEN )))  {
    76         sprintf( file, "%s/%s", dir, dirEntry->name );
    77         rc = PR_GetFileInfo( file, &info );
    78         if ( PR_FAILURE == rc ) {
    79             printf("PR_GetFileInfo() failed on file: %s, with error: %d, %d\n", 
    80                 dirEntry->name, PR_GetError(), PR_GetOSError());
    81             exit(1);
    82         }
    83         if ( PR_FILE_FILE == info.type )  {
    84             printf("File: %s \tsize: %ld\n", dirEntry->name, info.size );
    85             fd = PR_Open( file, PR_RDONLY, 0 );
    86             if ( NULL == fd )  {
    87                 printf("PR_Open() failed. Error: %ld, OSError: %ld\n", 
    88                     PR_GetError(), PR_GetOSError());
    89             }
    90             rc = PR_Close( fd );
    91             if ( PR_FAILURE == rc )  {
    92                 printf("PR_Close() failed. Error: %ld, OSError: %ld\n", 
    93                     PR_GetError(), PR_GetOSError());
    94             }
    95         } else if ( PR_FILE_DIRECTORY == info.type ) {
    96             sprintf( nextDir, "%s/%s", dir, dirEntry->name );
    97             TraverseDirectory(nextDir);
    98         } else {
    99             printf("type is not interesting for file: %s\n", dirEntry->name );
   100             /* keep going */
   101         }
   102     }
   103     /* assume end-of-file, actually could be error */
   105     rc = PR_CloseDir( cwd );
   106     if ( PR_FAILURE == rc ) {
   107         printf("PR_CloseDir() failed on directory: %s, with error: %d, %d\n", 
   108             dir, PR_GetError(), PR_GetOSError());
   109     }
   111 } /* end TraverseDirectory() */
   113 int main(int argc, char **argv)
   114 {
   115     { /* get command line options */
   116         /*
   117         ** Get command line options
   118         */
   119         PLOptStatus os;
   120         PLOptState *opt = PL_CreateOptState(argc, argv, "dv");
   122 	    while (PL_OPT_EOL != (os = PL_GetNextOpt(opt)))
   123         {
   124 		    if (PL_OPT_BAD == os) continue;
   125             switch (opt->option)
   126             {
   127             case 'd':  /* debug */
   128                 debug = 1;
   129 			    msgLevel = PR_LOG_ERROR;
   130                 break;
   131             case 'v':  /* verbose mode */
   132 			    msgLevel = PR_LOG_DEBUG;
   133                 break;
   134              default:
   135                 dirName = strdup(opt->value); 
   136                 break; 
   137             }
   138         }
   139 	    PL_DestroyOptState(opt);
   140     } /* end get command line options */
   142     lm = PR_NewLogModule("Test");       /* Initialize logging */
   145     if ( dirName == NULL )  {
   146         printf("you gotta specify a directory as an operand!\n");
   147         exit(1);
   148     }
   150     TraverseDirectory( dirName );
   152     if (debug) printf("%s\n", (failed_already)? "FAIL" : "PASS");
   153     return( (failed_already == PR_TRUE )? 1 : 0 );
   154 }  /* main() */
   155 /* end template.c */

mercurial