135
135
'WorkingSetSize': mem_struct.WorkingSetSize,
136
136
'QuotaPeakPagedPoolUsage': mem_struct.QuotaPeakPagedPoolUsage,
137
137
'QuotaPagedPoolUsage': mem_struct.QuotaPagedPoolUsage,
138
'QuotaPeakNonPagedPoolUsage':
139
mem_struct.QuotaPeakNonPagedPoolUsage,
138
'QuotaPeakNonPagedPoolUsage': mem_struct.QuotaPeakNonPagedPoolUsage,
140
139
'QuotaNonPagedPoolUsage': mem_struct.QuotaNonPagedPoolUsage,
141
140
'PagefileUsage': mem_struct.PagefileUsage,
142
141
'PeakPagefileUsage': mem_struct.PeakPagefileUsage,
153
152
' or win32process')
156
# using base-2 units (see HACKING.txt).
157
trace.note('WorkingSize %7dKiB'
158
'\tPeakWorking %7dKiB\t%s',
155
trace.note('WorkingSize %7dKB'
156
'\tPeakWorking %7dKB\t%s',
159
157
info['WorkingSetSize'] / 1024,
160
158
info['PeakWorkingSetSize'] / 1024,
164
162
trace.note('%s', message)
165
trace.note('WorkingSize %8d KiB', info['WorkingSetSize'] / 1024)
166
trace.note('PeakWorking %8d KiB', info['PeakWorkingSetSize'] / 1024)
167
trace.note('PagefileUsage %8d KiB', info.get('PagefileUsage', 0) / 1024)
168
trace.note('PeakPagefileUsage %8d KiB',
169
info.get('PeakPagefileUsage', 0) / 1024)
170
trace.note('PrivateUsage %8d KiB', info.get('PrivateUsage', 0) / 1024)
163
trace.note('WorkingSize %8d KB', info['WorkingSetSize'] / 1024)
164
trace.note('PeakWorking %8d KB', info['PeakWorkingSetSize'] / 1024)
165
trace.note('PagefileUsage %8d KB', info.get('PagefileUsage', 0) / 1024)
166
trace.note('PeakPagefileUsage %8d KB', info.get('PeakPagefileUsage', 0) / 1024)
167
trace.note('PrivateUsage %8d KB', info.get('PrivateUsage', 0) / 1024)
171
168
trace.note('PageFaultCount %8d', info.get('PageFaultCount', 0))
192
189
(bufx, bufy, curx, cury, wattr,
193
left, top, right, bottom, maxx, maxy) = struct.unpack(
194
"hhhhHhhhhhh", csbi.raw)
190
left, top, right, bottom, maxx, maxy) = struct.unpack("hhhhHhhhhhh", csbi.raw)
195
191
sizex = right - left + 1
196
192
sizey = bottom - top + 1
197
193
return (sizex, sizey)
522
517
trace.mutter('Unable to set hidden attribute on %r: %s', path, e)
525
def _command_line_to_argv(command_line, single_quotes_allowed=False):
526
"""Convert a Unicode command line into a list of argv arguments.
528
It performs wildcard expansion to make wildcards act closer to how they
529
work in posix shells, versus how they work by default on Windows. Quoted
530
arguments are left untouched.
532
:param command_line: The unicode string to split into an arg list.
533
:param single_quotes_allowed: Whether single quotes are accepted as quoting
534
characters like double quotes. False by
536
:return: A list of unicode strings.
538
s = cmdline.Splitter(command_line, single_quotes_allowed=single_quotes_allowed)
539
# Now that we've split the content, expand globs if necessary
521
class UnicodeShlex(object):
522
"""This is a very simplified version of shlex.shlex.
524
The main change is that it supports non-ascii input streams. The internal
525
structure is quite simplified relative to shlex.shlex, since we aren't
526
trying to handle multiple input streams, etc. In fact, we don't use a
527
file-like api either.
530
def __init__(self, uni_string):
531
self._input = uni_string
532
self._input_iter = iter(self._input)
533
self._whitespace_match = re.compile(u'\s').match
534
self._word_match = re.compile(u'\S').match
535
self._quote_chars = u'"'
536
# self._quote_match = re.compile(u'[\'"]').match
537
self._escape_match = lambda x: None # Never matches
539
self._token = [] # Current token being parsed
541
def _get_token(self):
542
# Were there quote chars as part of this token?
543
quoted = None # state:
544
# None - the string is not quoted
545
# empty string ('') - there was quoted substring
546
# double quote (") - we're inside quoted chunk
547
number_of_backslashes = 0
548
for nextchar in self._input_iter:
549
if self._whitespace_match(nextchar):
551
self._token.append(nextchar)
554
elif nextchar == '\\':
555
number_of_backslashes += 1
556
elif nextchar in self._quote_chars:
557
if number_of_backslashes:
558
self._token.append('\\'*(number_of_backslashes/2))
559
if number_of_backslashes % 2:
560
self._token.append('"')
566
number_of_backslashes = 0
567
elif nextchar == quoted:
568
# end of quoted string
573
if number_of_backslashes:
574
self._token.append('\\'*number_of_backslashes)
575
number_of_backslashes = 0
576
self._token.append(nextchar)
577
if number_of_backslashes > 0:
578
self._token.append('\\'*number_of_backslashes)
579
result = ''.join(self._token)
581
quoted = quoted is not None
582
if not quoted and result == '':
584
return quoted, result
590
quoted, token = self._get_token()
596
def _command_line_to_argv(command_line):
597
"""Convert a Unicode command line into a set of argv arguments.
599
This does wildcard expansion, etc. It is intended to make wildcards act
600
closer to how they work in posix shells, versus how they work by default on
603
s = UnicodeShlex(command_line)
604
# Now that we've split the content, expand globs
540
605
# TODO: Use 'globbing' instead of 'glob.glob', this gives us stuff like
541
606
# '**/' style globs
551
616
if has_ctypes and winver != 'Windows 98':
552
617
def get_unicode_argv():
553
prototype = ctypes.WINFUNCTYPE(ctypes.c_wchar_p)
554
GetCommandLineW = prototype(("GetCommandLineW",
555
ctypes.windll.kernel32))
556
command_line = GetCommandLineW()
557
if command_line is None:
558
raise ctypes.WinError()
618
LPCWSTR = ctypes.c_wchar_p
620
POINTER = ctypes.POINTER
621
prototype = ctypes.WINFUNCTYPE(LPCWSTR)
622
GetCommandLine = prototype(("GetCommandLineW",
623
ctypes.windll.kernel32))
624
prototype = ctypes.WINFUNCTYPE(POINTER(LPCWSTR), LPCWSTR, POINTER(INT))
625
command_line = GetCommandLine()
559
626
# Skip the first argument, since we only care about parameters
560
627
argv = _command_line_to_argv(command_line)[1:]
561
628
if getattr(sys, 'frozen', None) is None: