From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by befuddled.reisers.ca (Postfix, from userid 65534) id BEF831F033D; Sun, 18 Jun 2017 05:35:40 -0400 (EDT) Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by befuddled.reisers.ca (Postfix) with ESMTPS id 71EE61F0339 for ; Sun, 18 Jun 2017 05:35:37 -0400 (EDT) Received: by mail-wm0-x242.google.com with SMTP id d17so11995876wme.3 for ; Sun, 18 Jun 2017 02:35:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:user-agent:date:from:to:cc:subject:references :mime-version:content-disposition; bh=4WZvaBozYx+F01gZFZuHqNNsF3KZUrA6yhHinAz2mTU=; b=PsEfUK/D/10NzCHixOtDJ+MMFQIEyyj5dEJzaU398kYQltiJUbm9tugjqydHocKyyC Uvk3KJ5DzcomtWh4QjxoWrVDPrtfA9/qVRV5J99Snx45PVLeWjoFWE/R+8FqIhXMQXm4 COfkiFSCtZ+XQ4MYretty/vHZs+ZhUCW2zvvoEGvWFT5ueVtcN6rwqL9tj9kBJ2ixxHp Fq9F/sSf0+QyBElSB9Q4lW00apVNvJnvcdLeclqVkHfqTETiooFOChp5/6kEkp4WQy6Z 1zYsp9ahoyEm88avqhYXSW/pfZnEcOFMQJy3LdorrsmhzTqVCWOYP1h5EOxF+D7ztmgJ M9dA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:user-agent:date:from:to:cc:subject :references:mime-version:content-disposition; bh=4WZvaBozYx+F01gZFZuHqNNsF3KZUrA6yhHinAz2mTU=; b=Ed/GYffRuCZW6cRrWDc4yvk22CYAgFT/wnYBki5MsYF0Zg6E9sKYhrXxC0hQdhq/Z4 NmLmmVedx+Kpy+PLGjiHfnvTjZ9MoSfXChsOEtsoe4WbUXW8yEC70el6U8KFZKrR0aZx as/saXPB2INgsHduI685xvy0rlUsgOPqFtIkgVwTrZCWBqI1E72byqW4w7NmtOb8w22s b8w41SHxRTPGeOIDsCP94uJs5a1zThFK/w6K6R2j5OkDyjujlQBiwEmjr89mVNn/WSvT AUJUZakz3J8vOYFcBy51c4v3eiYPV0sl3/ex1V7Wem2LxqEDDgiDf705BxYlUom2bKAZ FrwA== X-Gm-Message-State: AKS2vOwQwjz4+MGOsQ3MLPIPOGOvQ695m6LWY9o//cP7DmGSEeFC15Ni XNsrdppTWiOCXQ== X-Received: by 10.28.54.154 with SMTP id y26mr12634889wmh.53.1497778536007; Sun, 18 Jun 2017 02:35:36 -0700 (PDT) Received: from sanghar.laptop ([2a00:23c4:7320:5900:224:d6ff:fe76:7136]) by smtp.gmail.com with ESMTPSA id n71sm8823465wrb.62.2017.06.18.02.35.33 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 18 Jun 2017 02:35:35 -0700 (PDT) Received: by sanghar.laptop (sSMTP sendmail emulation); Sun, 18 Jun 2017 10:35:33 +0100 Message-Id: <20170618093533.134956303@gmail.com> User-Agent: quilt/0.65 Date: Sun, 18 Jun 2017 09:58:26 +0100 From: Okash Khawaja To: Greg Kroah-Hartman , Jiri Slaby , Samuel Thibault , linux-kernel@vger.kernel.org Cc: William Hubbs , Chris Brannon , Kirk Reiser , speakup@linux-speakup.org, devel@driverdev.osuosl.org, Okash Khawaja Subject: [patch v2 1/3] tty: add function to convert device name to number References: <20170618085825.601359240@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Disposition: inline; filename=11_add_tty_dev_name_to_number X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 X-BeenThere: speakup@linux-speakup.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Speakup is a screen review system for Linux." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 18 Jun 2017 09:35:41 -0000 The function converts strings like ttyS0 and ttyUSB0 to dev_t like (4, 64) and (188, 0). It does this by scanning tty_drivers list for corresponding device name and index. If the driver is not registered, this function returns -ENODEV. It also acquires tty_mutex. Signed-off-by: Okash Khawaja --- drivers/tty/tty_io.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ include/linux/tty.h | 4 ++++ 2 files changed, 49 insertions(+) --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -325,6 +325,51 @@ static struct tty_driver *get_tty_driver return NULL; } +/** + * tty_dev_name_to_number - return dev_t for device name + * @device_name: user space name of device under /dev + * @dev_no: pointer to dev_t that this function will populate + * + * This function converts device names like ttyS0 or ttyUSB1 into dev_t + * like (4, 64) or (188, 1). If no corresponding driver is registered then + * the function returns -ENODEV. + * + * Locking: this acquires tty_mutex + */ +int tty_dev_name_to_number(char *dev_name, dev_t *dev_no) +{ + struct tty_driver *p; + int rv, index, prefix_length = 0; + + while (!isdigit(*(dev_name + prefix_length)) && prefix_length < + strlen(dev_name) ) + prefix_length++; + + if (prefix_length == strlen(dev_name)) + return -EINVAL; + + mutex_lock(&tty_mutex); + + list_for_each_entry(p, &tty_drivers, tty_drivers) + if (prefix_length == strlen(p->name) && strncmp(dev_name, + p->name, prefix_length) == 0) { + rv = kstrtoint(dev_name + prefix_length, 10, &index); + if (rv) { + mutex_unlock(&tty_mutex); + return rv; + } + if (index < p->num) { + *dev_no = MKDEV(p->major, p->minor_start + index); + mutex_unlock(&tty_mutex); + return 0; + } + } + + mutex_unlock(&tty_mutex); + return -ENODEV; +} +EXPORT_SYMBOL_GPL(tty_dev_name_to_number); + #ifdef CONFIG_CONSOLE_POLL /** --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -401,6 +401,7 @@ extern int __init tty_init(void); extern const char *tty_name(const struct tty_struct *tty); extern struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode, struct file *filp); +extern int tty_dev_name_to_number(char *dev_name, dev_t *dev_no); #else static inline void tty_kref_put(struct tty_struct *tty) { } @@ -424,6 +425,9 @@ static inline const char *tty_name(const static inline struct tty_struct *tty_open_by_driver(dev_t device, struct inode *inode, struct file *filp) { return NULL; } +static inline int tty_dev_name_to_number(char *dev_name, dev_t *dev_no) +{ return -ENOTSUPP; } + #endif extern struct ktermios tty_std_termios;