static BOOL test_GetPrintProcessorDirectory(struct torture_context *tctx, LPSTR servername, LPSTR architecture) { DWORD levels[] = { 1 }; DWORD success[] = { 1 }; DWORD i; LPBYTE buffer = NULL; for (i=0; i < ARRAY_SIZE(levels); i++) { DWORD needed = 0; DWORD err = 0; char tmp[1024]; torture_comment(tctx, "Testing GetPrintProcessorDirectory level %d", levels[i]); GetPrintProcessorDirectory(servername, architecture, levels[i], NULL, 0, &needed); err = GetLastError(); if (err == ERROR_INSUFFICIENT_BUFFER) { err = 0; buffer = malloc(needed); torture_assert(tctx, buffer, "malloc failed"); if (!GetPrintProcessorDirectory(servername, architecture, levels[i], buffer, needed, &needed)) { err = GetLastError(); } } if (err) { sprintf(tmp, "GetPrintProcessorDirectory failed level %d on [%s] (buffer size = %d), error: %s\n", levels[i], servername, needed, errstr(err)); if (success[i]) { torture_fail(tctx, tmp); } else { torture_warning(tctx, tmp); } } free(buffer); buffer = NULL; } return TRUE; }
int main (int argc, char* argv[]) { DWORD needed, i; LPTSTR buffer1 = NULL; if (argc < 2) { fprintf (stderr, "useage: %s <servername>\n", argv[0]); exit (-1); } for (i=0; i<NUM_ARCH; i++) { printf ("[%s]\n", arch[i]); needed = 0; GetPrintProcessorDirectory(argv[1], arch[i], 1, (LPBYTE)buffer1, 0, &needed); if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) { fprintf (stderr, "Error GetPrintProcessorDirectory for [%s] using NULL buffer.\n\n", argv[1]); continue; } if ((buffer1 = (LPBYTE)malloc(needed)) == NULL) { fprintf (stderr, "Unable to malloc memory for buffer!\n"); exit (-1); } if (!GetPrintProcessorDirectory(argv[1], arch[i], 1, (LPBYTE)buffer1, needed, &needed)) { fprintf (stderr, "Error getting print processor path for [%s].\nSize of buffer = %d\n\n", argv[1], needed); } printf ("\tPrint Processor Path\t= %s\n", buffer1); printf ("\n"); free (buffer1); } return 0; }