<html><head></head><body>No; I was looking for all uses of _PyRaw_Strdup. Surprisingly, it's used only a few times.<br><br><div class="gmail_quote">Cyd Haselton <chaselton@gmail.com> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
Question:<br />
When you said earlier that you found the problem by using grep...were you looking for places where strdup called locale?<br /><br /><div class="gmail_quote">On January 30, 2015 7:52:47 PM CST, Ryan Gonzalez <rymg19@gmail.com> wrote:<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div dir="ltr">Regardless, if you're looking to toy more with stuff like this, I'd highly recommend dual-booting with Ubuntu, which is what I'm doing now. (Now I rarely ever boot into Windows!)</div><div class="gmail_extra"><br /><div class="gmail_quote">On Fri, Jan 30, 2015 at 7:51 PM, Ryan Gonzalez <span dir="ltr"><<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>></span> wrote:<br /><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Do you have just the SDK (which doesn't require Cygwin) or a rooted phone? If so, I can upload instructions that don't use the NDK. <br /></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br /><div class="gmail_quote">On Fri, Jan 30, 2015 at 6:19 PM, Cyd Haselton <span dir="ltr"><<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>></span> wrote:<br /><blockquote
class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This is going to take some time...here's why:<br />
<br />
Downloading and installing the NDK/SDK won't be too hard...I have to<br />
clear some space...but my primary machine is running Windows 7 and I'd<br />
rather swallow hot coals than install Cygwin.  I've got next to no<br />
experience with it, other than knowing that the NDK recommends against<br />
it.<br />
<br />
I've got a CentOS VM...but it's currently in tarball form on an<br />
external drive for space reasons...and it only has the NDK installed.<br />
If I am able to get it back up and running, there's still the task of<br />
getting  adb connected to my device. from the VM.<br />
<br />
Not saying it's impossible...just that it'll take time...and I'll<br />
probably have to tackle it tomorrow (earliest) or Sunday (latest).  In<br />
the meantime I'll also check to see if there's anything that can a)<br />
run in an Android terminal and b) can take a stack trace; it would be<br />
far, far, far easier than either option above.<br />
<div><div><br />
<br />
<br />
On Fri, Jan 30, 2015 at 4:19 PM, Ryan Gonzalez <<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>> wrote:<br />
> Do you have the Android SDK and NDK installed? If so...<br />
><br />
> Using Google, I've created this series of steps, which may (or may not)<br />
> work:<br />
><br />
> 1. Make sure you have a copy of Python on your computer and make sure that<br />
> it's built with debug symbols.<br />
><br />
> 2. Run the following commands from a shell with your phone plugged in:<br />
><br />
>   adb forward tcp:5039 tcp:5039<br />
>   adb shell /system/bin/gdbserver tcp:5039 <path to python executable><br />
>   <path to ndk binary folder>/arm-linux-androideabi-gdb<br />
><br />
> Now, GDB should have opened, so type the following commands:<br />
><br />
>   set solib-search-path <directory holder libpython.so><br />
>   file <path to local python executable><br />
>   target remote :5055<br />
>   run<br />
><br />
> Now, wait for the program to crash and type:<br />
><br />
>   backtrace<br />
><br />
> You should now see a complete backtrace in your terminal. To GDB, type:<br />
><br />
>   quit<br />
><br />
> *crosses fingers*<br />
><br />
> On Fri, Jan 30, 2015 at 2:50 PM, Cyd Haselton <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>> wrote:<br />
>><br />
>> Unfortunately it is still reporting the same function :-/.<br />
>><br />
>> On Fri, Jan 30, 2015 at 1:44 PM, Ryan Gonzalez <<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>> wrote:<br />
>> > Yes...<br />
>> ><br />
>> > Can you check if it's crashing in a different function now?<br />
>> ><br />
>> > On Fri, Jan 30, 2015 at 1:39 PM, Cyd Haselton <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> > wrote:<br />
>> >><br />
>> >> Yes I did.  I did have to enter all the information in manually...I'm<br />
>> >> not familiar with automated patch application tools and even if I<br />
>> >> were, I'm pretty sure I wouldn't have them on my device.<br />
>> >><br />
>> >> Just so that I'm absolutely sure I got everything correct...you wanted<br />
>> >> all of the lines in the patch commented out, correct?  Basically<br />
>> >> everything referencing oldloc?<br />
>> >><br />
>> >> On Fri, Jan 30, 2015 at 1:00 PM, Ryan Gonzalez <<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>><br />
>> >> wrote:<br />
>> >> > Are you sure the patch was applied correctly? I was SO sure it would<br />
>> >> > work!<br />
>> >> ><br />
>> >> > FYI, you tried the patch I attached to the email message, right?<br />
>> >> ><br />
>> >> > On Fri, Jan 30, 2015 at 12:58 PM, Cyd Haselton <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> >> > wrote:<br />
>> >> >><br />
>> >> >> Update:  I did try the patch after getting it installed correctly,<br />
>> >> >> but<br />
>> >> >> I'm still getting a segfault on the newly built binary.<br />
>> >> >> Will post info this afternoon.<br />
>> >> >><br />
>> >> >> On Fri, Jan 30, 2015 at 12:10 PM, Ryan Gonzalez <<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>><br />
>> >> >> wrote:<br />
>> >> >> > No, it returns NULL if malloc gives it a raw pointer. It<br />
>> >> >> > unconditionally<br />
>> >> >> > checks the length of the (possibly null) string argument first.<br />
>> >> >> ><br />
>> >> >> > Please try the patch I attached in the last email. It *might* fix<br />
>> >> >> > the<br />
>> >> >> > issue.<br />
>> >> >> > Android has crappy locale handling.<br />
>> >> >> ><br />
>> >> >> > On Fri, Jan 30, 2015 at 12:09 PM, Cyd Haselton<br />
>> >> >> > <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> >> >> > wrote:<br />
>> >> >> >><br />
>> >> >> >>   Unless i'm reading something incorrectly,  _PyMem_RawStrdup is<br />
>> >> >> >> currently returning NULL when given a null pointer.<br />
>> >> >> >><br />
>> >> >> >> From obmalloc.c<br />
>> >> >> >><br />
>> >> >> >> _PyMem_RawStrdup(const char *str)<br />
>> >> >> >> {<br />
>> >> >> >>     size_t size;<br />
>> >> >> >> char *copy;<br />
>> >> >> >>     size = strlen(str) + 1;<br />
>> >> >> >>     copy = PyMem_RawMalloc(size);<br />
>> >> >> >>     if (copy == NULL)<br />
>> >> >> >>         return NULL;<br />
>> >> >> >> memcpy(copy, str, size);<br />
>> >> >> >> return copy;<br />
>> >> >> >>           }<br />
>> >> >> >><br />
>> >> >> >> On Fri, Jan 30, 2015 at 11:56 AM, Ryan Gonzalez<br />
>> >> >> >> <<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>><br />
>> >> >> >> wrote:<br />
>> >> >> >> > I seriously doubt the issue is in that file; _PyMem_RawStrdup<br />
>> >> >> >> > crashes<br />
>> >> >> >> > when<br />
>> >> >> >> > calling strlen. It's that whatever is calling it is likely<br />
>> >> >> >> > asking<br />
>> >> >> >> > it<br />
>> >> >> >> > to<br />
>> >> >> >> > duplicate a null pointer. Basically, it's probably the caller's<br />
>> >> >> >> > fault.<br />
>> >> >> >> ><br />
>> >> >> >> > You could always try modifying _PyMem_RawStrdup to return NULL<br />
>> >> >> >> > when<br />
>> >> >> >> > given a<br />
>> >> >> >> > null pointer and see where it then segfaults.<br />
>> >> >> >> ><br />
>> >> >> >> > On Fri, Jan 30, 2015 at 11:53 AM, Cyd Haselton<br />
>> >> >> >> > <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> >> >> >> > wrote:<br />
>> >> >> >> >><br />
>> >> >> >> >> Alternatively, is there a hassle-free way to find out what<br />
>> >> >> >> >> changed<br />
>> >> >> >> >> in<br />
>> >> >> >> >> obmalloc.c between 2.7.x and 3.4.x?<br />
>> >> >> >> >><br />
>> >> >> >> >><br />
>> >> >> >> >> On Fri, Jan 30, 2015 at 9:29 AM, Cyd Haselton<br />
>> >> >> >> >> <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> >> >> >> >> wrote:<br />
>> >> >> >> >> > There's a related strdup patch for readline.c, mentioned<br />
>> >> >> >> >> > here:<a href="http://bugs.python.org/issue21390" target="_blank">http://bugs.python.org/issue21390</a> and here<br />
>> >> >> >> >> > <a href="https://github.com/rave-engine/python3-android/issues/2" target="_blank">https://github.com/rave-engine/python3-android/issues/2</a>.<br />
>> >> >> >> >> > There's a patch, but I'm not sure how to modify it for<br />
>> >> >> >> >> > obmalloc.c,<br />
>> >> >> >> >> > as<br />
>> >> >> >> >> > (I think) the functions all belong to Python...they're all<br />
>> >> >> >> >> > prefixed<br />
>> >> >> >> >> > with _PyXx<br />
>> >> >> >> >> ><br />
>> >> >> >> >> > On Fri, Jan 30, 2015 at 9:05 AM, Cyd Haselton<br />
>> >> >> >> >> > <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> >> >> >> >> > wrote:<br />
>> >> >> >> >> >> Absolutely.  Good thing I have addr2line on device<br />
>> >> >> >> >> >><br />
>> >> >> >> >> >> /bld/python/Python-3.4.2 $ addr2line -C -f -e<br />
>> >> >> >> >> >> /lib/libpython3.4m.so.1.0<br />
>> >> >> >> >> >> 0008bbc8<br />
>> >> >> >> >> >> _PyMem_RawStrdup<br />
>> >> >> >> >> >> /bld/python/Python-3.4.2/Objects/obmalloc.c:323<br />
>> >> >> >> >> >> /bld/python/Python-3.4.2 $<br />
>> >> >> >> >> >><br />
>> >> >> >> >> >><br />
>> >> >> >> >> >><br />
>> >> >> >> >> >> On Thu, Jan 29, 2015 at 8:26 PM, Ryan <<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>><br />
>> >> >> >> >> >> wrote:<br />
>> >> >> >> >> >>> Could you try the steps at<br />
>> >> >> >> >> >>> <a href="http://stackoverflow.com/a/11369475/2097780" target="_blank">http://stackoverflow.com/a/11369475/2097780</a>? They<br />
>> >> >> >> >> >>> allow you to get a better idea of where libc is crashing.<br />
>> >> >> >> >> >>><br />
>> >> >> >> >> >>> Cyd Haselton <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>> wrote:<br />
>> >> >> >> >> >>>><br />
>> >> >> >> >> >>>> Managed to get this out of logcat:<br />
>> >> >> >> >> >>>> F(11914) Fatal signal 11 (SIGSEGV) at 0x00000000<br />
>> >> >> >> >> >>>> (code=1),<br />
>> >> >> >> >> >>>> thread<br />
>> >> >> >> >> >>>> 11914 (python)  (libc)<br />
>> >> >> >> >> >>>><br />
>> >> >> >> >> >>>> [ 01-29 19:30:55.855 23373:23373 F/libc     ]<br />
>> >> >> >> >> >>>> Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread<br />
>> >> >> >> >> >>>> 23373<br />
>> >> >> >> >> >>>> (python)<br />
>> >> >> >> >> >>>><br />
>> >> >> >> >> >>>> Less detail than strace but it seems to be that python is<br />
>> >> >> >> >> >>>> segfaulting<br />
>> >> >> >> >> >>>> libc...<br />
>> >> >> >> >> >>>><br />
>> >> >> >> >> >>>> On Wed, Jan 28, 2015 at 11:23 AM, Ryan Gonzalez<br />
>> >> >> >> >> >>>> <<a href="mailto:rymg19@gmail.com" target="_blank">rymg19@gmail.com</a>><br />
>> >> >> >> >> >>>> wrote:<br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>>  On Wed, Jan 28, 2015 at 10:43 AM, Guido van Rossum<br />
>> >> >> >> >> >>>>> <<a href="mailto:guido@python.org" target="_blank">guido@python.org</a>><br />
>> >> >> >> >> >>>>> wrote:<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  What I see in the strace:<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  ... load libpython3.4m.so.1.0<br />
>> >> >> >> >> >>>>>>  ... load libm<br />
>> >> >> >> >> >>>>>>  ... open /dev/__properties__ and do something to it<br />
>> >> >> >> >> >>>>>> (what?)<br />
>> >> >> >> >> >>>>>>  ... get current time<br />
>> >> >> >> >> >>>>>>  ... allocate memory<br />
>> >> >> >> >> >>>>>>  ... getuid<br />
>> >> >> >> >> >>>>>>  ... segfault<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  That's not a lot to go on, but it doesn't look as if<br />
>> >> >> >> >> >>>>>> it<br />
>> >> >> >> >> >>>>>> has<br />
>> >> >> >> >> >>>>>> started to<br />
>> >> >> >> >> >>>>>>  load modules yet.<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  Does /dev/__properties__ ring a bell? Not to me.<br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>> <a href="https://android.googlesource.com/platform/system/core/+/tools_r22/init/property_service.c" target="_blank">https://android.googlesource.com/platform/system/core/+/tools_r22/init/property_service.c</a><br />
>> >> >> >> >> >>>>>  is the code that works with that file.<br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>>  This explains it a bit (slides 24-29). Looks like<br />
>> >> >> >> >> >>>>> something<br />
>> >> >> >> >> >>>>> to<br />
>> >> >> >> >> >>>>> do<br />
>> >> >> >> >> >>>>> with<br />
>> >> >> >> >> >>>>>  interprocess communication. Likely has nothing to do<br />
>> >> >> >> >> >>>>> with<br />
>> >> >> >> >> >>>>> Python<br />
>> >> >> >> >> >>>>> itself.<br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>>  Maybe this would be useful?<br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  That stack trace would be really helpful.<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  On Wed, Jan 28, 2015 at 8:34 AM, Cyd Haselton<br />
>> >> >> >> >> >>>>>> <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> >> >> >> >> >>>>>> wrote:<br />
>> >> >> >> >> >>>>>>><br />
>> >> >> >> >> >>>>>>><br />
>> >> >> >> >> >>>>>>>  Apologies...I'm not sure what a stack track is, but I<br />
>> >> >> >> >> >>>>>>> do<br />
>> >> >> >> >> >>>>>>> have<br />
>> >> >> >> >> >>>>>>> the<br />
>> >> >> >> >> >>>>>>>  strace.  Nearest I can tell, it happens due to an<br />
>> >> >> >> >> >>>>>>> open<br />
>> >> >> >> >> >>>>>>> call,<br />
>> >> >> >> >> >>>>>>> though I<br />
>> >> >> >> >> >>>>>>>  am probably wrong.<br />
>> >> >> >> >> >>>>>>>  Attaching the strace output to this email.  I'm going<br />
>> >> >> >> >> >>>>>>> to<br />
>> >> >> >> >> >>>>>>> head<br />
>> >> >> >> >> >>>>>>> back to<br />
>> >> >> >> >> >>>>>>>  the documentation and to back out of some<br />
>> >> >> >> >> >>>>>>> Android-related<br />
>> >> >> >> >> >>>>>>> changes<br />
>> >> >> >> >> >>>>>>> in<br />
>> >> >> >> >> >>>>>>>  _localemodule.c<br />
>> >> >> >> >> >>>>>>><br />
>> >> >> >> >> >>>>>>>  On Wed, Jan 28, 2015 at 9:43 AM, Guido van Rossum<br />
>> >> >> >> >> >>>>>>> <<a href="mailto:guido@python.org" target="_blank">guido@python.org</a>><br />
>> >> >> >> >> >>>>>>>  wrote:<br />
>> >> >> >> >> >>>>>>>><br />
>> >> >> >> >> >>>>>>>>  There could be a million differences relevant<br />
>> >> >> >> >> >>>>>>>> (unicode,<br />
>> >> >> >> >> >>>>>>>> ints,<br />
>> >> >> >> >> >>>>>>>> ...).<br />
>> >> >> >> >> >>>>>>>>  Perhaps<br />
>> >> >> >> >> >>>>>>>>  the importlib bootstrap is failing. Perhaps the<br />
>> >> >> >> >> >>>>>>>> dynamic<br />
>> >> >> >> >> >>>>>>>> loading<br />
>> >> >> >> >> >>>>>>>> code<br />
>> >> >> >> >> >>>>>>>>  changed. Did you get a stack track? (IIRC strace<br />
>> >> >> >> >> >>>>>>>> shows<br />
>> >> >> >> >> >>>>>>>> a<br />
>> >> >> >> >> >>>>>>>> syscall<br />
>> >> >> >> >> >>>>>>>> trace<br />
>> >> >> >> >> >>>>>>>>  --<br />
>> >> >> >> >> >>>>>>>>  also useful, but doesn't tell you precisely how<br />
>> >> >> >> >> >>>>>>>> it segfaulted.)<br />
>> >> >> >> >> >>>>>>>><br />
>> >> >> >> >> >>>>>>>>  On Wed, Jan 28, 2015 at 6:43 AM, Cyd Haselton<br />
>> >> >> >> >> >>>>>>>> <<a href="mailto:chaselton@gmail.com" target="_blank">chaselton@gmail.com</a>><br />
>> >> >> >> >> >>>>>>>>  wrote:<br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>>  All,<br />
>> >> >> >> >> >>>>>>>>>  I recently ditched my attempts to port Python 2.7.8<br />
>> >> >> >> >> >>>>>>>>> to<br />
>> >> >> >> >> >>>>>>>>> Android<br />
>> >> >> >> >> >>>>>>>>> in<br />
>> >> >> >> >> >>>>>>>>>  favor of Python 3.4.2.  Unfortunately, after using<br />
>> >> >> >> >> >>>>>>>>> the<br />
>> >> >> >> >> >>>>>>>>> same<br />
>> >> >> >> >> >>>>>>>>> configure<br />
>> >> >> >> >> >>>>>>>>>  options in the same environment, and modifying the<br />
>> >> >> >> >> >>>>>>>>> setup.py<br />
>> >> >> >> >> >>>>>>>>> as<br />
>> >> >> >> >> >>>>>>>>> needed,<br />
>> >> >> >> >> >>>>>>>>>  the newly built binary throws a segfault when the<br />
>> >> >> >> >> >>>>>>>>> generate-posix-vars<br />
>> >> >> >> >> >>>>>>>>>  portion of the build is reached...and when it is<br />
>> >> >> >> >> >>>>>>>>> run<br />
>> >> >> >> >> >>>>>>>>> as<br />
>> >> >> >> >> >>>>>>>>> well<br />
>> >> >> >> >> >>>>>>>>> (i.e.<br />
>> >> >> >> >> >>>>>>>>>  ./python --help, ./python -E -S -m sysconfig, or<br />
>> >> >> >> >> >>>>>>>>> similar)<br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>>  I took a strace of ./python, however I'm a bit lost<br />
>> >> >> >> >> >>>>>>>>> when<br />
>> >> >> >> >> >>>>>>>>> reviewing<br />
>> >> >> >> >> >>>>>>>>> it.<br />
>> >> >> >> >> >>>>>>>>>  Any ideas as to what may be going on...i.e. why<br />
>> >> >> >> >> >>>>>>>>> Python<br />
>> >> >> >> >> >>>>>>>>> 2.7<br />
>> >> >> >> >> >>>>>>>>> works but<br />
>> >> >> >> >> >>>>>>>>>  3.x throws a segfault?<br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>>  Thanks in advance,<br />
>> >> >> >> >> >>>>>>>>>  Cyd<br />
>> >> >> >> >> >>>>>>>>> ________________________________<br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>>  Python-Dev mailing list<br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>> <a href="mailto:Python-Dev@python.org" target="_blank">Python-Dev@python.org</a><br />
>> >> >> >> >> >>>>>>>>>  <a href="https://mail.python.org/mailman/listinfo/python-dev" target="_blank">https://mail.python.org/mailman/listinfo/python-dev</a><br />
>> >> >> >> >> >>>>>>>>>  Unsubscribe:<br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>><br />
>> >> >> >> >> >>>>>>>>> <a href="https://mail.python.org/mailman/options/python-dev/guido%40python.org" target="_blank">https://mail.python.org/mailman/options/python-dev/guido%40python.org</a><br />
>> >> >> >> >> >>>>>>>><br />
>> >> >> >> >> >>>>>>>><br />
>> >> >> >> >> >>>>>>>><br />
>> >> >> >> >> >>>>>>>><br />
>> >> >> >> >> >>>>>>>><br />
>> >> >> >> >> >>>>>>>>  --<br />
>> >> >> >> >> >>>>>>>>  --Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  --<br />
>> >> >> >> >> >>>>>>  --Guido van Rossum (<a href="http://python.org/~guido" target="_blank">python.org/~guido</a>)<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>> ________________________________<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>>  Python-Dev mailing list<br />
>> >> >> >> >> >>>>>>  <a href="mailto:Python-Dev@python.org" target="_blank">Python-Dev@python.org</a><br />
>> >> >> >> >> >>>>>>  <a href="https://mail.python.org/mailman/listinfo/python-dev" target="_blank">https://mail.python.org/mailman/listinfo/python-dev</a><br />
>> >> >> >> >> >>>>>>  Unsubscribe:<br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>><br />
>> >> >> >> >> >>>>>> <a href="https://mail.python.org/mailman/options/python-dev/rymg19%40gmail.com" target="_blank">https://mail.python.org/mailman/options/python-dev/rymg19%40gmail.com</a><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>><br />
>> >> >> >> >> >>>>>  --<br />
>> >> >> >> >> >>>>>  Ryan<br />
>> >> >> >> >> >>>>>  If anybody ever asks me why I prefer C++ to C, my<br />
>> >> >> >> >> >>>>> answer<br />
>> >> >> >> >> >>>>> will<br />
>> >> >> >> >> >>>>> be<br />
>> >> >> >> >> >>>>> simple:<br />
>> >> >> >> >> >>>>>  "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I<br />
>> >> >> >> >> >>>>> don't<br />
>> >> >> >> >> >>>>> think<br />
>> >> >> >> >> >>>>> that was<br />
>> >> >> >> >> >>>>>  nul-terminated."<br />
>> >> >> >> >> >>>>>  Personal reality distortion fields are immune to<br />
>> >> >> >> >> >>>>> contradictory<br />
>> >> >> >> >> >>>>> evidence.<br />
>> >> >> >> >> >>>>> -<br />
>> >> >> >> >> >>>>>  srean<br />
>> >> >> >> >> >>>>>  Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a><br />
>> >> >> >> >> >>><br />
>> >> >> >> >> >>><br />
>> >> >> >> >> >>> --<br />
>> >> >> >> >> >>> Sent from my Android phone with K-9 Mail. Please excuse my<br />
>> >> >> >> >> >>> brevity.<br />
>> >> >> >> >> >>> Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a><br />
>> >> >> >> ><br />
>> >> >> >> ><br />
>> >> >> >> ><br />
>> >> >> >> ><br />
>> >> >> >> > --<br />
>> >> >> >> > Ryan<br />
>> >> >> >> > If anybody ever asks me why I prefer C++ to C, my answer will<br />
>> >> >> >> > be<br />
>> >> >> >> > simple:<br />
>> >> >> >> > "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think<br />
>> >> >> >> > that<br />
>> >> >> >> > was<br />
>> >> >> >> > nul-terminated."<br />
>> >> >> >> > Personal reality distortion fields are immune to contradictory<br />
>> >> >> >> > evidence.<br />
>> >> >> >> > -<br />
>> >> >> >> > srean<br />
>> >> >> >> > Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a><br />
>> >> >> ><br />
>> >> >> ><br />
>> >> >> ><br />
>> >> >> ><br />
>> >> >> > --<br />
>> >> >> > Ryan<br />
>> >> >> > If anybody ever asks me why I prefer C++ to C, my answer will be<br />
>> >> >> > simple:<br />
>> >> >> > "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think<br />
>> >> >> > that<br />
>> >> >> > was<br />
>> >> >> > nul-terminated."<br />
>> >> >> > Personal reality distortion fields are immune to contradictory<br />
>> >> >> > evidence.<br />
>> >> >> > -<br />
>> >> >> > srean<br />
>> >> >> > Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a><br />
>> >> ><br />
>> >> ><br />
>> >> ><br />
>> >> ><br />
>> >> > --<br />
>> >> > Ryan<br />
>> >> > If anybody ever asks me why I prefer C++ to C, my answer will be<br />
>> >> > simple:<br />
>> >> > "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that<br />
>> >> > was<br />
>> >> > nul-terminated."<br />
>> >> > Personal reality distortion fields are immune to contradictory<br />
>> >> > evidence.<br />
>> >> > -<br />
>> >> > srean<br />
>> >> > Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a><br />
>> ><br />
>> ><br />
>> ><br />
>> ><br />
>> > --<br />
>> > Ryan<br />
>> > If anybody ever asks me why I prefer C++ to C, my answer will be simple:<br />
>> > "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was<br />
>> > nul-terminated."<br />
>> > Personal reality distortion fields are immune to contradictory evidence.<br />
>> > -<br />
>> > srean<br />
>> > Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a><br />
><br />
><br />
><br />
><br />
> --<br />
> Ryan<br />
> If anybody ever asks me why I prefer C++ to C, my answer will be simple:<br />
> "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was<br />
> nul-terminated."<br />
> Personal reality distortion fields are immune to contradictory evidence. -<br />
> srean<br />
> Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a><br />
</div></div></blockquote></div><br /><br clear="all" /><div><br /></div>-- <br /><div><div dir="ltr">Ryan<div><div>If anybody ever asks me why I prefer C++ to C, my answer will be simple: "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was nul-terminated."</div></div>Personal reality distortion fields are immune to contradictory evidence. - srean<div>Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a></div></div></div>
</div>
</div></div></blockquote></div><br /><br clear="all" /><div><br /></div>-- <br /><div class="gmail_signature"><div dir="ltr">Ryan<div><div>If anybody ever asks me why I prefer C++ to C, my answer will be simple: "It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was nul-terminated."</div></div>Personal reality distortion fields are immune to contradictory evidence. - srean<div>Check out my website: <a href="http://kirbyfan64.github.io/" target="_blank">http://kirbyfan64.github.io/</a></div></div></div>
</div>
</blockquote></div><br /></blockquote></div><br>
-- <br>
Sent from my Android phone with K-9 Mail. Please excuse my brevity.<br>
Check out my website: <a href="http://kirbyfan64.github.io/">http://kirbyfan64.github.io/</a></body></html>