From: Saul Wold <sgw@linux.intel.com>
To: Konrad Scherer <konrad.scherer@windriver.com>,
Laurentiu Palcu <laurentiu.palcu@intel.com>
Cc: openembedded-core@lists.openembedded.org
Subject: Re: [PATCH] Allow script to work with Python 2.4 and 3.
Date: Mon, 14 Oct 2013 11:03:09 -0700 [thread overview]
Message-ID: <525C31DD.6020900@linux.intel.com> (raw)
In-Reply-To: <1381505415-23693-2-git-send-email-konrad.scherer@windriver.com>
On 10/11/2013 08:30 AM, Konrad Scherer wrote:
> From: Konrad Scherer <Konrad.Scherer@windriver.com>
>
> Python 2.4 does not support the 'b' string literal or the
> keyword 'as' in exception handling. Python 3 does not accept
> the old method of exception handling and defaults to unicode.
> The b() function converts strings to bytes on Python 3 and
> using sys.exc_info() avoids the exception handling syntax.
>
I would like to get Laurentiu's opinion on this.
Also the patch synopsis should be in the format of
<file/recipe>: synopsis
In this case it should:
relocate_sdk.py: Allow script to work with Python 2.4 and 3
Thanks
Sau!
> Signed-off-by: Konrad Scherer <Konrad.Scherer@windriver.com>
> ---
> scripts/relocate_sdk.py | 43 ++++++++++++++++++++++++++-----------------
> 1 file changed, 26 insertions(+), 17 deletions(-)
>
> diff --git a/scripts/relocate_sdk.py b/scripts/relocate_sdk.py
> index fe6e4e0..0971e63 100755
> --- a/scripts/relocate_sdk.py
> +++ b/scripts/relocate_sdk.py
> @@ -31,7 +31,15 @@ import os
> import re
> import errno
>
> -old_prefix = re.compile(b"##DEFAULT_INSTALL_DIR##")
> +if sys.version < '3':
> + def b(x):
> + return x
> +else:
> + import codecs
> + def b(x):
> + return codecs.latin_1_encode(x)[0]
> +
> +old_prefix = re.compile(b("##DEFAULT_INSTALL_DIR##"))
>
> def get_arch():
> f.seek(0)
> @@ -92,15 +100,15 @@ def change_interpreter(elf_file_name):
> # External SDKs with mixed pre-compiled binaries should not get
> # relocated so look for some variant of /lib
> fname = f.read(11)
> - if fname.startswith(b"/lib/") or fname.startswith(b"/lib64/") or \
> - fname.startswith(b"/lib32/") or fname.startswith(b"/usr/lib32/") or \
> - fname.startswith(b"/usr/lib32/") or fname.startswith(b"/usr/lib64/"):
> + if fname.startswith(b("/lib/")) or fname.startswith(b("/lib64/")) or \
> + fname.startswith(b("/lib32/")) or fname.startswith(b("/usr/lib32/")) or \
> + fname.startswith(b("/usr/lib32/")) or fname.startswith(b("/usr/lib64/")):
> break
> if (len(new_dl_path) >= p_filesz):
> print("ERROR: could not relocate %s, interp size = %i and %i is needed." \
> % (elf_file_name, p_memsz, len(new_dl_path) + 1))
> break
> - dl_path = new_dl_path + b"\0" * (p_filesz - len(new_dl_path))
> + dl_path = new_dl_path + b("\0") * (p_filesz - len(new_dl_path))
> f.seek(p_offset)
> f.write(dl_path)
> break
> @@ -132,40 +140,40 @@ def change_dl_sysdirs():
> sh_name, sh_type, sh_flags, sh_addr, sh_offset, sh_size, sh_link,\
> sh_info, sh_addralign, sh_entsize = struct.unpack(sh_fmt, sh_hdr)
>
> - name = sh_strtab[sh_name:sh_strtab.find(b"\0", sh_name)]
> + name = sh_strtab[sh_name:sh_strtab.find(b("\0"), sh_name)]
>
> """ look only into SHT_PROGBITS sections """
> if sh_type == 1:
> f.seek(sh_offset)
> """ default library paths cannot be changed on the fly because """
> """ the string lengths have to be changed too. """
> - if name == b".sysdirs":
> + if name == b(".sysdirs"):
> sysdirs = f.read(sh_size)
> sysdirs_off = sh_offset
> sysdirs_sect_size = sh_size
> - elif name == b".sysdirslen":
> + elif name == b(".sysdirslen"):
> sysdirslen = f.read(sh_size)
> sysdirslen_off = sh_offset
> - elif name == b".ldsocache":
> + elif name == b(".ldsocache"):
> ldsocache_path = f.read(sh_size)
> new_ldsocache_path = old_prefix.sub(new_prefix, ldsocache_path)
> # pad with zeros
> - new_ldsocache_path += b"\0" * (sh_size - len(new_ldsocache_path))
> + new_ldsocache_path += b("\0") * (sh_size - len(new_ldsocache_path))
> # write it back
> f.seek(sh_offset)
> f.write(new_ldsocache_path)
>
> if sysdirs != "" and sysdirslen != "":
> - paths = sysdirs.split(b"\0")
> - sysdirs = b""
> - sysdirslen = b""
> + paths = sysdirs.split(b("\0"))
> + sysdirs = b("")
> + sysdirslen = b("")
> for path in paths:
> """ exit the loop when we encounter first empty string """
> - if path == b"":
> + if path == b(""):
> break
>
> new_path = old_prefix.sub(new_prefix, path)
> - sysdirs += new_path + b"\0"
> + sysdirs += new_path + b("\0")
>
> if arch == 32:
> sysdirslen += struct.pack("<L", len(new_path))
> @@ -173,7 +181,7 @@ def change_dl_sysdirs():
> sysdirslen += struct.pack("<Q", len(new_path))
>
> """ pad with zeros """
> - sysdirs += b"\0" * (sysdirs_sect_size - len(sysdirs))
> + sysdirs += b("\0") * (sysdirs_sect_size - len(sysdirs))
>
> """ write the sections back """
> f.seek(sysdirs_off)
> @@ -205,7 +213,8 @@ for e in executables_list:
>
> try:
> f = open(e, "r+b")
> - except IOError as ioex:
> + except IOError:
> + exctype, ioex = sys.exc_info()[:2]
> if ioex.errno == errno.ETXTBSY:
> print("Could not open %s. File used by another process.\nPlease "\
> "make sure you exit all processes that might use any SDK "\
>
next prev parent reply other threads:[~2013-10-14 18:03 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-11 15:30 [Patch 0/1] Update relocate_sdk.py to work with Python 2.4 Konrad Scherer
2013-10-11 15:30 ` [PATCH] Allow script to work with Python 2.4 and 3 Konrad Scherer
2013-10-14 18:03 ` Saul Wold [this message]
2013-10-15 5:22 ` Laurentiu Palcu
2013-10-15 9:30 ` Burton, Ross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=525C31DD.6020900@linux.intel.com \
--to=sgw@linux.intel.com \
--cc=konrad.scherer@windriver.com \
--cc=laurentiu.palcu@intel.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.