torture/utable.c

ソースコードを見る。

関数

BOOL torture_utable (int dummy)
static char * form_name (int c)
BOOL torture_casetable (int dummy)


関数

BOOL torture_utable ( int  dummy  ) 

utable.c23 行で定義されています。

参照先 cCH_UNIXCH_UTF16LEclicli_close()cli_mkdir()cli_open()cli_qpathinfo_alt_name()cli_rmdir()cli_unlink()convert_string()d_printf()errnofdlenprintf()strerror()torture_open_connection()valid.

00024 {
00025         struct cli_state *cli;
00026         fstring fname, alt_name;
00027         int fnum;
00028         smb_ucs2_t c2;
00029         int c, len, fd;
00030         int chars_allowed=0, alt_allowed=0;
00031         uint8 valid[0x10000];
00032 
00033         printf("starting utable\n");
00034 
00035         if (!torture_open_connection(&cli, 0)) {
00036                 return False;
00037         }
00038 
00039         memset(valid, 0, sizeof(valid));
00040 
00041         cli_mkdir(cli, "\\utable");
00042         cli_unlink(cli, "\\utable\\*");
00043 
00044         for (c=1; c < 0x10000; c++) {
00045                 char *p;
00046 
00047                 SSVAL(&c2, 0, c);
00048                 fstrcpy(fname, "\\utable\\x");
00049                 p = fname+strlen(fname);
00050                 len = convert_string(CH_UTF16LE, CH_UNIX, 
00051                                      &c2, 2, 
00052                                      p, sizeof(fname)-strlen(fname), True);
00053                 p[len] = 0;
00054                 fstrcat(fname,"_a_long_extension");
00055 
00056                 fnum = cli_open(cli, fname, O_RDWR | O_CREAT | O_TRUNC, 
00057                                 DENY_NONE);
00058                 if (fnum == -1) continue;
00059 
00060                 chars_allowed++;
00061 
00062                 cli_qpathinfo_alt_name(cli, fname, alt_name);
00063 
00064                 if (strncmp(alt_name, "X_A_L", 5) != 0) {
00065                         alt_allowed++;
00066                         valid[c] = 1;
00067                         d_printf("fname=[%s] alt_name=[%s]\n", fname, alt_name);
00068                 }
00069 
00070                 cli_close(cli, fnum);
00071                 cli_unlink(cli, fname);
00072 
00073                 if (c % 100 == 0) {
00074                         printf("%d (%d/%d)\r", c, chars_allowed, alt_allowed);
00075                 }
00076         }
00077         printf("%d (%d/%d)\n", c, chars_allowed, alt_allowed);
00078 
00079         cli_rmdir(cli, "\\utable");
00080 
00081         d_printf("%d chars allowed   %d alt chars allowed\n", chars_allowed, alt_allowed);
00082 
00083         fd = open("valid.dat", O_WRONLY|O_CREAT|O_TRUNC, 0644);
00084         if (fd == -1) {
00085                 d_printf("Failed to create valid.dat - %s", strerror(errno));
00086                 return False;
00087         }
00088         write(fd, valid, 0x10000);
00089         close(fd);
00090         d_printf("wrote valid.dat\n");
00091 
00092         return True;
00093 }

static char* form_name ( int  c  )  [static]

utable.c96 行で定義されています。

参照先 CH_UNIXCH_UTF16LEconvert_string()len.

参照元 _spoolss_deleteform()_spoolss_getform()add_a_form()delete_a_form()display_form()get_a_builtin_ntform()rpc_printer_migrate_forms_internals()spoolss_hnd_addform()spoolss_hnd_deleteform()spoolss_hnd_getform()spoolss_hnd_setform()torture_casetable()update_a_form().

00097 {
00098         static fstring fname;
00099         smb_ucs2_t c2;
00100         char *p;
00101         int len;
00102 
00103         fstrcpy(fname, "\\utable\\");
00104         p = fname+strlen(fname);
00105         SSVAL(&c2, 0, c);
00106 
00107         len = convert_string(CH_UTF16LE, CH_UNIX, 
00108                              &c2, 2, 
00109                              p, sizeof(fname)-strlen(fname), True);
00110         p[len] = 0;
00111         return fname;
00112 }

BOOL torture_casetable ( int  dummy  ) 

utable.c114 行で定義されています。

参照先 cclicli_close()cli_mkdir()cli_nt_create_full()cli_qfileinfo()cli_read()cli_rmdir()cli_unlink()cli_write()form_name()printf()sizetorture_open_connection().

00115 {
00116         static struct cli_state *cli;
00117         char *fname;
00118         int fnum;
00119         int c, i;
00120 #define MAX_EQUIVALENCE 8
00121         smb_ucs2_t equiv[0x10000][MAX_EQUIVALENCE];
00122         printf("starting casetable\n");
00123 
00124         if (!torture_open_connection(&cli, 0)) {
00125                 return False;
00126         }
00127 
00128         memset(equiv, 0, sizeof(equiv));
00129 
00130         cli_unlink(cli, "\\utable\\*");
00131         cli_rmdir(cli, "\\utable");
00132         if (!cli_mkdir(cli, "\\utable")) {
00133                 printf("Failed to create utable directory!\n");
00134                 return False;
00135         }
00136 
00137         for (c=1; c < 0x10000; c++) {
00138                 SMB_OFF_T size;
00139 
00140                 if (c == '.' || c == '\\') continue;
00141 
00142                 printf("%04x (%c)\n", c, isprint(c)?c:'.');
00143 
00144                 fname = form_name(c);
00145                 fnum = cli_nt_create_full(cli, fname, 0,
00146                                           GENERIC_ALL_ACCESS, 
00147                                           FILE_ATTRIBUTE_NORMAL,
00148                                           FILE_SHARE_NONE,
00149                                           FILE_OPEN_IF, 0, 0);
00150 
00151                 if (fnum == -1) {
00152                         printf("Failed to create file with char %04x\n", c);
00153                         continue;
00154                 }
00155 
00156                 size = 0;
00157 
00158                 if (!cli_qfileinfo(cli, fnum, NULL, &size, 
00159                                    NULL, NULL, NULL, NULL, NULL)) continue;
00160 
00161                 if (size > 0) {
00162                         /* found a character equivalence! */
00163                         int c2[MAX_EQUIVALENCE];
00164 
00165                         if (size/sizeof(int) >= MAX_EQUIVALENCE) {
00166                                 printf("too many chars match?? size=%ld c=0x%04x\n",
00167                                        (unsigned long)size, c);
00168                                 cli_close(cli, fnum);
00169                                 return False;
00170                         }
00171 
00172                         cli_read(cli, fnum, (char *)c2, 0, size);
00173                         printf("%04x: ", c);
00174                         equiv[c][0] = c;
00175                         for (i=0; i<size/sizeof(int); i++) {
00176                                 printf("%04x ", c2[i]);
00177                                 equiv[c][i+1] = c2[i];
00178                         }
00179                         printf("\n");
00180                         fflush(stdout);
00181                 }
00182 
00183                 cli_write(cli, fnum, 0, (char *)&c, size, sizeof(c));
00184                 cli_close(cli, fnum);
00185         }
00186 
00187         cli_unlink(cli, "\\utable\\*");
00188         cli_rmdir(cli, "\\utable");
00189 
00190         return True;
00191 }


Sambaに対してSat Aug 29 21:24:32 2009に生成されました。  doxygen 1.4.7