Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solaris should support constants like termios' FIONREAD #76841

Closed
jcea opened this issue Jan 25, 2018 · 5 comments
Closed

Solaris should support constants like termios' FIONREAD #76841

jcea opened this issue Jan 25, 2018 · 5 comments
Assignees
Labels
3.7 (EOL) end of life type-feature A feature request or enhancement

Comments

@jcea
Copy link
Member

jcea commented Jan 25, 2018

BPO 32660
Nosy @jcea
PRs
  • bpo-32660: Solaris should support constants like termios' FIONREAD #5328
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/jcea'
    closed_at = <Date 2019-01-04.20:51:00.930>
    created_at = <Date 2018-01-25.00:56:59.493>
    labels = ['type-feature', '3.7']
    title = "Solaris should support constants like termios' FIONREAD"
    updated_at = <Date 2019-01-04.20:51:00.929>
    user = 'https://github.com/jcea'

    bugs.python.org fields:

    activity = <Date 2019-01-04.20:51:00.929>
    actor = 'cheryl.sabella'
    assignee = 'jcea'
    closed = True
    closed_date = <Date 2019-01-04.20:51:00.930>
    closer = 'cheryl.sabella'
    components = []
    creation = <Date 2018-01-25.00:56:59.493>
    creator = 'jcea'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 32660
    keywords = ['patch']
    message_count = 5.0
    messages = ['310651', '310719', '310722', '310723', '310946']
    nosy_count = 1.0
    nosy_names = ['jcea']
    pr_nums = ['5328']
    priority = 'normal'
    resolution = 'fixed'
    stage = 'resolved'
    status = 'closed'
    superseder = None
    type = 'enhancement'
    url = 'https://bugs.python.org/issue32660'
    versions = ['Python 3.7']

    @jcea
    Copy link
    Member Author

    jcea commented Jan 25, 2018

    Solaris supports termios constants like FIONREAD with an appropiate "#include" in the C code. The main issue is that some names conflicts between System V and BSD personalities.

    I could evaluate the situation and do a patch proposal for Python 3.7. We are still a week away of 3.7RC1 and this patch would affect only Solaris/derivatives.

    @jcea jcea added the 3.7 (EOL) end of life label Jan 25, 2018
    @jcea jcea self-assigned this Jan 25, 2018
    @jcea jcea added the type-feature A feature request or enhancement label Jan 25, 2018
    @jcea
    Copy link
    Member Author

    jcea commented Jan 25, 2018

    Solaris has two personalities: System V and BSD. This is not usually an issue but sometimes some constants have a different value in a mode or the other.

    By default, when including <sys/ioctl.h> Solaris is in System V mode. We can force BSD mode defining symbol "BSD_COMP". This greatly expand the names available but, unfortunately, some values change.

    The comment in <sys/ioctl.h> is quite clear:

    """

    •  There are some inherent problems in having a single file
      
    •  ioctl.h, with both System V and BSD flags. Introducing
      
    •  BSD flags into this file creates compilation problems
      
    •  with flags such as ECHO, NL1 etc., if termio.h and ioctl.h
      
    •  are included by the same file. Since these two files can
      
    •  be only included by System V applications, /usr/inclule/sys/ioctl.h
      
    •  will be System V mode and all the BSD flags will be turned off
      
    •  using #ifdef BSD_COMP. This file will also exist in
      
    •  /usr/ucbinclude/sys/ioctl.h for BSD applications but without the
      
    •  BSD flags turned off. System V appliactions can use ioctl.h without
      
    •  any changes, System V applications requiring BSD flags should
      
    •  -D BSD_COMP when compiling (and be warned about the common
      
    •  flags between System V and BSD) and BSD applications should
      
    •  use /usr/ucbinclude/sys/ioctl.h.
      

    """

    Using "gcc -dM -E" we can observe defined symbols.

    Ambiguous values when defininf "BSD_COMP" are: BS0, BS1, CR0, CR1, CR2, CR3, ECHO, FF0, FF1, FLUSHO, NL0, NL1, NOFLSH, PENDIN, TAB0, TAB1, TAB2, TOSTOP, XTABS.

    Sounds quite important, actually.

    Since I am no aiming to perfection, I would be satisfied making quite a few new symbols available, not all of them. A simple approach would be to include <sys/filio.h> and <sys/sockio.h>. In those header files there are only constants, not functions or data structures.

    Just including those headers we get these new symbols (none overlapping other):

    _FIO_COMPRESSED
    _FIO_COUNT_FILLED
    _FIO_GET_TOP_STATS
    _FIO_SEEK_DATA
    _FIO_SEEK_HOLE
    _FIO_SET_LUFS_DEBUG
    _FIO_SET_LUFS_ERROR
    _FIOAI
    _FIODIRECTIO
    _FIOFFS
    _FIOGDIO
    _FIOGETMAXPHYS
    _FIOGETSUPERBLOCK
    _FIOIO
    _FIOISBUSY
    _FIOISLOG
    _FIOISLOGOK
    _FIOLFS
    _FIOLFSS
    _FIOLOGDISABLE
    _FIOLOGENABLE
    _FIOLOGRESET
    _FIOOBSOLETE67
    _FIOSATIME
    _FIOSDIO
    _FIOSNAPSHOTCREATE
    _FIOSNAPSHOTCREATE_MULTI
    _FIOSNAPSHOTDELETE
    _FIOTUNE
    _IO(x,y)
    _IOR(x,y,t)
    _IORN(x,y,t)
    _IOW(x,y,t)
    _IOWN(x,y,t)
    _IOWR(x,y,t)
    _IOWRN(x,y,t)
    _SIOCSOCKFALLBACK
    _SYS_FILIO_H
    _SYS_IOCCOM_H
    _SYS_SOCKIO_H
    FIOASYNC
    FIOCLEX
    FIOGETOWN
    FIONBIO
    FIONCLEX
    FIONREAD
    FIOSETOWN
    IF_UNITSEL
    IOC_IN
    IOC_INOUT
    IOC_OUT
    IOC_VOID
    IOCPARM_MASK
    O_SIOCGIFCONF
    O_SIOCGLIFCONF
    SIOCADDMULTI
    SIOCADDRT
    SIOCATMARK
    SIOCDARP
    SIOCDELMULTI
    SIOCDELRT
    SIOCDXARP
    SIOCGARP
    SIOCGDSTINFO
    SIOCGENADDR
    SIOCGENPSTATS
    SIOCGETLSGCNT
    SIOCGETNAME
    SIOCGETPEER
    SIOCGETPROP
    SIOCGETSGCNT
    SIOCGETSYNC
    SIOCGETVIFCNT
    SIOCGHIWAT
    SIOCGIFADDR
    SIOCGIFBRDADDR
    SIOCGIFCONF
    SIOCGIFDSTADDR
    SIOCGIFFLAGS
    SIOCGIFHWADDR
    SIOCGIFINDEX
    SIOCGIFMEM
    SIOCGIFMETRIC
    SIOCGIFMTU
    SIOCGIFMUXID
    SIOCGIFNETMASK
    SIOCGIFNUM
    SIOCGIP6ADDRPOLICY
    SIOCGIPMSFILTER
    SIOCGLIFADDR
    SIOCGLIFBINDING
    SIOCGLIFBRDADDR
    SIOCGLIFCONF
    SIOCGLIFDADSTATE
    SIOCGLIFDSTADDR
    SIOCGLIFFLAGS
    SIOCGLIFGROUPINFO
    SIOCGLIFGROUPNAME
    SIOCGLIFHWADDR
    SIOCGLIFINDEX
    SIOCGLIFLNKINFO
    SIOCGLIFMETRIC
    SIOCGLIFMTU
    SIOCGLIFMUXID
    SIOCGLIFNETMASK
    SIOCGLIFNUM
    SIOCGLIFSRCOF
    SIOCGLIFSUBNET
    SIOCGLIFTOKEN
    SIOCGLIFUSESRC
    SIOCGLIFZONE
    SIOCGLOWAT
    SIOCGMSFILTER
    SIOCGPGRP
    SIOCGSTAMP
    SIOCGXARP
    SIOCIFDETACH
    SIOCILB
    SIOCLIFADDIF
    SIOCLIFDELND
    SIOCLIFGETND
    SIOCLIFREMOVEIF
    SIOCLIFSETND
    SIOCLOWER
    SIOCSARP
    SIOCSCTPGOPT
    SIOCSCTPPEELOFF
    SIOCSCTPSOPT
    SIOCSENABLESDP
    SIOCSETPROP
    SIOCSETSYNC
    SIOCSHIWAT
    SIOCSIFADDR
    SIOCSIFBRDADDR
    SIOCSIFDSTADDR
    SIOCSIFFLAGS
    SIOCSIFINDEX
    SIOCSIFMEM
    SIOCSIFMETRIC
    SIOCSIFMTU
    SIOCSIFMUXID
    SIOCSIFNAME
    SIOCSIFNETMASK
    SIOCSIP6ADDRPOLICY
    SIOCSIPMSFILTER
    SIOCSLGETREQ
    SIOCSLIFADDR
    SIOCSLIFBRDADDR
    SIOCSLIFDSTADDR
    SIOCSLIFFLAGS
    SIOCSLIFGROUPNAME
    SIOCSLIFINDEX
    SIOCSLIFLNKINFO
    SIOCSLIFMETRIC
    SIOCSLIFMTU
    SIOCSLIFMUXID
    SIOCSLIFNAME
    SIOCSLIFNETMASK
    SIOCSLIFPREFIX
    SIOCSLIFSUBNET
    SIOCSLIFTOKEN
    SIOCSLIFUSESRC
    SIOCSLIFZONE
    SIOCSLOWAT
    SIOCSLSTAT
    SIOCSMSFILTER
    SIOCSPGRP
    SIOCSPROMISC
    SIOCSQPTR
    SIOCSSDSTATS
    SIOCSSESTATS
    SIOCSXARP
    SIOCTMYADDR
    SIOCTMYSITE
    SIOCTONLINK
    SIOCUPPER
    SIOCX25RCV
    SIOCX25TBL
    SIOCX25XMT
    SIOCXPROTO

    Not all those symbols are going to be exported in Python.

    @jcea
    Copy link
    Member Author

    jcea commented Jan 26, 2018

    After doing this change, I see FIVE new symbols in Python's termios:

    """
    FIONREAD, FIONCLEX, FIOCLEX, FIOASYNC, FIONBIO.
    """

    Good enough for now and me.

    @jcea
    Copy link
    Member Author

    jcea commented Jan 26, 2018

    With this change, a SmarOS native zone exports 206 symbols in Python termios. Before it export 201. By comparison, a Linux Ubuntu 16.04 Python provides 244 symbols.

    Some references for the future:

    http://www.verycomputer.com/168_45f4bd8c333a252f_1.htm

    @jcea
    Copy link
    Member Author

    jcea commented Jan 28, 2018

    New changeset f0a95f2 by jcea in branch 'master':
    bpo-32660: Solaris should support constants like termios' FIONREAD (bpo-5328)
    f0a95f2

    @csabella csabella closed this as completed Jan 4, 2019
    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    3.7 (EOL) end of life type-feature A feature request or enhancement
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants