|
|
/*++
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
getuname.c
Abstract:
Provides a function to prompt the user for a username similar to getpass for passwords.
Author:
Mike Massa (mikemas) Sept 20, 1991
Revision History:
Who When What -------- -------- ---------------------------------------------- mikemas 03-25-92 created by cloning getpass.c
Notes:
Exports:
getuname
--*/
#include <stdio.h>
#include <windef.h>
#include <winbase.h>
#include <wincon.h>
#include <winuser.h>
#include <nls.h>
#include "nlstxt.h"
#define MAXUSERNAMELEN 32
static char ubuf[MAXUSERNAMELEN+1];
/******************************************************************/ char * getusername( char *prompt ) /******************************************************************/ { HANDLE InHandle = (HANDLE)-1, OutHandle = (HANDLE)-1; BOOL Result; DWORD NumBytes; int i;
ubuf[0] = '\0';
InHandle = CreateFile("CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (InHandle == (HANDLE)-1) { NlsPutMsg(STDERR,LIBUEMUL_ERROR_GETTING_CI_HANDLE,GetLastError()); goto exit_getusername; }
OutHandle = CreateFile("CONOUT$", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); if (OutHandle == (HANDLE)-1) { NlsPutMsg(STDERR,LIBUEMUL_ERROR_GETTING_CO_HANDLE,GetLastError()); goto exit_getusername; }
NumBytes = strlen(prompt);
CharToOemBuff(prompt, prompt, NumBytes);
Result = WriteFile(OutHandle, prompt, NumBytes, &NumBytes, NULL); if (!Result) { NlsPutMsg(STDERR,LIBUEMUL_WRITE_TO_CONSOLEOUT_ERROR, GetLastError()); goto exit_getusername; }
Result = ReadFile(InHandle, ubuf, MAXUSERNAMELEN, &NumBytes, NULL); if (!Result) NlsPutMsg(STDERR,LIBUEMUL_READ_FROM_CONSOLEIN_ERROR, GetLastError()); ubuf[MAXUSERNAMELEN] = '\0';
OemToCharBuff (ubuf, ubuf, NumBytes);
// peel off linefeed
i = (int) NumBytes; while(--i >= 0) if ((ubuf[i] == '\n') || (ubuf[i] == '\r')) ubuf[i] = '\0'; exit_getusername : if (InHandle != (HANDLE)-1) CloseHandle(InHandle); if (OutHandle != (HANDLE)-1) CloseHandle(OutHandle);
return(ubuf); }
|