|
|
/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
util.c
Abstract:
Utility functions for dbghelp.
Author:
Pat Styles (patst) 6-Dec-2001
Environment:
User Mode
--*/
#include "private.h"
#include "symbols.h"
#include "globals.h"
#include <dbhpriv.h>
int ReverseCmp( char *one, char *two ) { char *p1; char *p2; int i;
p1 = one + strlen(one) - 1; p2 = two + strlen(two) - 1;
for (i = 0; p1 >= one && p2 >= two; i++, p1--, p2--) { if (*p1 != *p2) return i; }
return i; }
BOOL UpdateBestSrc( char *cmp, char *trg, char *src ) { assert(cmp && *cmp && trg && src);
if (!*trg || (ReverseCmp(cmp, src) > ReverseCmp(cmp, trg))) { strcpy(trg, src); return true; }
return false; }
BOOL ShortNodeName( char *in, char *out, size_t osize ) { char *p;
assert(in);
if (osize < 1 || !out) return false;
CopyString(out, in, osize);
for (p = out + strlen(out) -1; p >= out; p--) { if (*p == '~') { *(++p) = 'X'; *(++p) = 0; return true; } if (*p < '0' || *p > '9') return false; }
return false; }
BOOL ShortFileName( char *in, char *out, size_t osize) { char drive[_MAX_DRIVE + 1]; char dir[_MAX_DIR + 1]; char fname[_MAX_FNAME + 1]; char ext[_MAX_EXT + 1]; char nfname[_MAX_FNAME + 1]; BOOL rc;
_splitpath(in, drive, dir, fname, ext);
rc = ShortNodeName(fname, nfname, DIMA(nfname));
CopyString(out, drive, osize); CatString(out, dir, osize); CatString(out, nfname, osize); CatString(out, ext, osize);
return rc; }
BOOL ToggleFailCriticalErrors( BOOL reset ) { static UINT oldmode = 0;
if (!option(SYMOPT_FAIL_CRITICAL_ERRORS)) return false;
if (reset) SetErrorMode(oldmode); else oldmode = SetErrorMode(SEM_FAILCRITICALERRORS);
return true; }
DWORD fnGetFileAttributes( char *lpFileName ) { DWORD rc;
SetCriticalErrorMode(); rc = GetFileAttributes(lpFileName); ResetCriticalErrorMode();
return rc; }
void rtrim( LPSTR sz ) { LPSTR p;
assert(sz);
for (p = sz + strlen(sz) - 1; p >= sz; p--) { if (!isspace(*p)) break; *p = 0; } }
void ltrim( LPSTR sz ) { LPSTR p; assert(sz);
for (p = sz; *p; p++) { if (!isspace(*p)) break; }
if (p == sz) return;
for (; *p; p++, sz++) *sz = *p; *sz = 0; }
void trim( LPSTR sz ) { rtrim(sz); ltrim(sz); }
char *errortext(DWORD err) { char *sz;
switch (err) { case ERROR_FILE_NOT_FOUND: return "file not found"; case ERROR_PATH_NOT_FOUND: return "path not found"; case ERROR_NOT_READY: return "drive not ready"; case ERROR_ACCESS_DENIED: return "access is denied"; default: sz = FormatStatus(err); return (sz) ? sz : ""; } }
VOID RemoveTrailingBackslash( LPSTR sz ) { int i;
assert(sz);
i = lstrlen(sz); if (!i) return;
if (sz[i - 1] == '\\') sz[i - 1] = 0; }
|