All of lore.kernel.org
 help / color / mirror / Atom feed
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 "\
>


  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.