Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 42685d57 authored by matt mooney's avatar matt mooney Committed by Greg Kroah-Hartman
Browse files

staging: usbip: userspace: utils: remove libsysfs circumvention



Removes all of the helper functions that used a lot of hard-coded
values intead of libsysfs. Most of these functions were unused
anyway.

Signed-off-by: default avatarmatt mooney <mfm@muteddisk.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 4737d7e3
Loading
Loading
Loading
Loading
+0 −250
Original line number Diff line number Diff line
@@ -62,253 +62,3 @@ int modify_match_busid(char *busid, int add)

	return 0;
}

int read_integer(char *path)
{
	char buff[100];
	int fd;
	int ret = 0;

	memset(buff, 0, sizeof(buff));

	fd = open(path, O_RDONLY);
	if (fd < 0)
		return -1;

	ret = read(fd, buff, sizeof(buff));
	if (ret < 0) {
		close(fd);
		return -1;
	}

	sscanf(buff, "%d", &ret);

	close(fd);

	return ret;
}

int read_string(char *path, char *string, size_t len)
{
	int fd;
	int ret = 0;
	char  *p;

	memset(string, 0, len);

	fd = open(path, O_RDONLY);
	if (fd < 0) {
		string = NULL;
		return -1;
	}

	ret = read(fd, string, len-1);
	if (ret < 0) {
		string = NULL;
		close(fd);
		return -1;
	}

	p = strchr(string, '\n');
	*p = '\0';

	close(fd);

	return 0;
}

int write_integer(char *path, int value)
{
	int fd;
	int ret;
	char buff[100];

	snprintf(buff, sizeof(buff), "%d", value);

	fd = open(path, O_WRONLY);
	if (fd < 0)
		return -1;

	ret = write(fd, buff, strlen(buff));
	if (ret < 0) {
		close(fd);
		return -1;
	}

	close(fd);

	return 0;
}

int read_bConfigurationValue(char *busid)
{
	char path[PATH_MAX];

	snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bConfigurationValue", busid);

	return read_integer(path);
}

int write_bConfigurationValue(char *busid, int config)
{
	char path[PATH_MAX];

	snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bConfigurationValue", busid);

	return write_integer(path, config);
}

int read_bNumInterfaces(char *busid)
{
	char path[PATH_MAX];

	snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bNumInterfaces", busid);

	return read_integer(path);
}

int read_bDeviceClass(char *busid)
{
	char path[PATH_MAX];

	snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/bDeviceClass", busid);

	return read_integer(path);
}

int getdriver(char *busid, int conf, int infnum, char *driver, size_t len)
{
	char path[PATH_MAX];
	char linkto[PATH_MAX];
	const char none[] = "none";
	int ret;

	snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s:%d.%d/driver", busid, conf, infnum);

	/* readlink does not add NULL */
	memset(linkto, 0, sizeof(linkto));
	ret = readlink(path, linkto, sizeof(linkto)-1);
	if (ret < 0) {
		strncpy(driver, none, len);
		return -1;
	} else {
		strncpy(driver, basename(linkto), len);
		return 0;
	}
}

int getdevicename(char *busid, char *name, size_t len)
{
	char path[PATH_MAX];
	char idProduct[10], idVendor[10];

	snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/idVendor", busid);
	read_string(path, idVendor, sizeof(idVendor));

	snprintf(path, PATH_MAX, "/sys/bus/usb/devices/%s/idProduct", busid);
	read_string(path, idProduct, sizeof(idProduct));

	if (!idVendor[0] || !idProduct[0])
		return -1;

	snprintf(name, len, "%s:%s", idVendor, idProduct);

	return 0;
}

#define MAXLINE 100

/* if this cannot read a whole line, return -1 */
int readline(int sockfd, char *buff, int bufflen)
{
	int ret;
	char c;
	int index = 0;


	while (index < bufflen) {
		ret = read(sockfd, &c, sizeof(c));
		if (ret < 0 && errno == EINTR)
			continue;
		if (ret <= 0) {
			return -1;
		}

		buff[index] = c;

		if ( index > 0 && buff[index-1] == '\r'  && buff[index] == '\n') {
			/* end of line */
			buff[index-1] = '\0';	/* get rid of delimitor */
			return index;
		} else
			index++;
	}

	return -1;
}

#if 0
int writeline(int sockfd, char *str, int strlen)
{
	int ret;
	int index = 0;
	int len;
	char buff[MAXLINE];

	if (strlen + 3 > MAXLINE)
		return -1;

	strncpy(buff, str, strlen);
	buff[strlen+1] = '\r';
	buff[strlen+2] = '\n';
	buff[strlen+3] = '\0';

	len = strlen + 3;

	while (len > 0) {
		ret = write(sockfd, buff+index, len);
		if (ret <= 0) {
			return -1;
		}

		len -= ret;
		index += ret;
	}

	return index;
}
#endif

int writeline(int sockfd, char *str, int strlen)
{
	int ret;
	int index = 0;
	int len;
	char buff[MAXLINE];

	len = strnlen(str, strlen);

	if (strlen + 2 > MAXLINE)
		return -1;

	memcpy(buff, str, strlen);
	buff[strlen] = '\r';
	buff[strlen+1] = '\n';		/* strlen+1 <= MAXLINE-1 */

	len = strlen + 2;

	while (len > 0) {
		ret = write(sockfd, buff+index, len);
		if (ret < 0 && errno == EINTR)
			continue;
		if (ret <= 0) {
			return -1;
		}

		len -= ret;
		index += ret;
	}

	return index;
}
+18 −13
Original line number Diff line number Diff line
/*
 * Copyright (C) 2011 matt mooney <mfm@muteddisk.com>
 *               2005-2007 Takahiro Hirofuchi
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __UTILS_H
#define __UTILS_H

#include <stdlib.h>

int modify_match_busid(char *busid, int add);
int read_string(char *path, char *, size_t len);
int read_integer(char *path);
int getdevicename(char *busid, char *name, size_t len);
int getdriver(char *busid, int conf, int infnum, char *driver, size_t len);
int read_bNumInterfaces(char *busid);
int read_bConfigurationValue(char *busid);
int write_integer(char *path, int value);
int write_bConfigurationValue(char *busid, int config);
int read_bDeviceClass(char *busid);
int readline(int sockfd, char *str, int strlen);
int writeline(int sockfd, char *buff, int bufflen);

#endif /* __UTILS_H */