mirror of https://github.com/nirenjan/libx52.git
				
				
				
			Move opening from environment into separate function
							parent
							
								
									d53e56c491
								
							
						
					
					
						commit
						c9ffb415c8
					
				|  | @ -14,17 +14,17 @@ CC = $(PTHREAD_CC) | ||||||
| # libusb stub library for use by test programs
 | # libusb stub library for use by test programs
 | ||||||
| check_LTLIBRARIES = libusbx52.la | check_LTLIBRARIES = libusbx52.la | ||||||
| 
 | 
 | ||||||
| libusbx52_la_SOURCES = usb_x52_stub.c | libusbx52_la_SOURCES = usb_x52_stub.c fopen_env.c | ||||||
| libusbx52_la_CFLAGS = @LIBUSB_CFLAGS@ | libusbx52_la_CFLAGS = @LIBUSB_CFLAGS@ | ||||||
| libusbx52_la_LDFLAGS = -rpath /nowhere -module | libusbx52_la_LDFLAGS = -rpath /nowhere -module | ||||||
| 
 | 
 | ||||||
| # Utility programs for use by tests
 | # Utility programs for use by tests
 | ||||||
| check_PROGRAMS = x52test_create_device_list x52test_log_actions | check_PROGRAMS = x52test_create_device_list x52test_log_actions | ||||||
| 
 | 
 | ||||||
| x52test_create_device_list_SOURCES = util/create_device_list.c | x52test_create_device_list_SOURCES = util/create_device_list.c $(libusbx52_la_SOURCES) | ||||||
| x52test_create_device_list_CFLAGS = @LIBUSB_CFLAGS@ | x52test_create_device_list_CFLAGS = @LIBUSB_CFLAGS@ | ||||||
| 
 | 
 | ||||||
| x52test_log_actions_SOURCES = util/log_actions.c usb_x52_stub.c | x52test_log_actions_SOURCES = util/log_actions.c $(libusbx52_la_SOURCES) | ||||||
| x52test_log_actions_CFLAGS = @X52_INCLUDE@ @LIBUSB_CFLAGS@ | x52test_log_actions_CFLAGS = @X52_INCLUDE@ @LIBUSB_CFLAGS@ | ||||||
| 
 | 
 | ||||||
| EXTRA_DIST = README.md libusbx52.h | EXTRA_DIST = README.md libusbx52.h | ||||||
|  |  | ||||||
|  | @ -0,0 +1,22 @@ | ||||||
|  | /*
 | ||||||
|  |  * LibUSB stub driver for testing the Saitek X52/X52 Pro | ||||||
|  |  * Common functionality | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2020 Nirenjan Krishnan (nirenjan@nirenjan.org) | ||||||
|  |  * | ||||||
|  |  * SPDX-License-Identifier: GPL-2.0-only WITH Classpath-exception-2.0 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | 
 | ||||||
|  | FILE * fopen_env(const char *env, const char *env_default, const char *mode) | ||||||
|  | { | ||||||
|  |     // Get the filename from the environment. Use defaults if unset or empty
 | ||||||
|  |     const char *filename = getenv(env); | ||||||
|  |     if (filename == NULL || filename[0] == '\0') { | ||||||
|  |         filename = env_default; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return fopen(filename, mode); | ||||||
|  | } | ||||||
|  | @ -7,7 +7,6 @@ | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| // #include <libusb-1.0/libusb.h>
 |  | ||||||
| #include <libusb.h> | #include <libusb.h> | ||||||
| 
 | 
 | ||||||
| struct libusb_device { | struct libusb_device { | ||||||
|  | @ -65,3 +64,5 @@ struct libusb_device_handle { | ||||||
|  */ |  */ | ||||||
| #define DEFAULT_OUTPUT_DATA_FILE        "/tmp/libusbx52_output_data" | #define DEFAULT_OUTPUT_DATA_FILE        "/tmp/libusbx52_output_data" | ||||||
| 
 | 
 | ||||||
|  | /* Open file from environment variable */ | ||||||
|  | FILE * fopen_env(const char *env, const char *env_default, const char *mode); | ||||||
|  |  | ||||||
|  | @ -21,7 +21,6 @@ int libusb_init(libusb_context **ctx) | ||||||
|     unsigned int vid; |     unsigned int vid; | ||||||
|     unsigned int pid; |     unsigned int pid; | ||||||
|     int parsed; |     int parsed; | ||||||
|     char *dev_list_file; |  | ||||||
|     FILE *dev_list; |     FILE *dev_list; | ||||||
|     int i; |     int i; | ||||||
| 
 | 
 | ||||||
|  | @ -38,15 +37,7 @@ int libusb_init(libusb_context **ctx) | ||||||
|         goto init_err_recovery; |         goto init_err_recovery; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /*
 |     dev_list = fopen_env(INPUT_DEVICE_LIST_ENV, DEFAULT_INPUT_DEVICE_LIST_FILE, "r"); | ||||||
|      * Get the device file name from the environment, |  | ||||||
|      * use a default name if unset or empty |  | ||||||
|      */ |  | ||||||
|     dev_list_file = getenv(INPUT_DEVICE_LIST_ENV); |  | ||||||
|     if (dev_list_file == NULL || dev_list_file[0] == '\0') { |  | ||||||
|         dev_list_file = DEFAULT_INPUT_DEVICE_LIST_FILE; |  | ||||||
|     } |  | ||||||
|     dev_list = fopen(dev_list_file, "r"); |  | ||||||
|     if (dev_list == NULL) { |     if (dev_list == NULL) { | ||||||
|         rc = LIBUSB_ERROR_IO; |         rc = LIBUSB_ERROR_IO; | ||||||
|         goto init_err_recovery; |         goto init_err_recovery; | ||||||
|  | @ -210,8 +201,6 @@ int libusb_get_device_descriptor(libusb_device *dev, | ||||||
| 
 | 
 | ||||||
| int libusb_open(libusb_device *dev, libusb_device_handle **handle) | int libusb_open(libusb_device *dev, libusb_device_handle **handle) | ||||||
| { | { | ||||||
|     char *output_data_file; |  | ||||||
| 
 |  | ||||||
|     /* Allocate a handle for the application */ |     /* Allocate a handle for the application */ | ||||||
|     libusb_device_handle *tmp_hdl = calloc(1, sizeof(*tmp_hdl)); |     libusb_device_handle *tmp_hdl = calloc(1, sizeof(*tmp_hdl)); | ||||||
|     if (tmp_hdl == NULL) { |     if (tmp_hdl == NULL) { | ||||||
|  | @ -225,15 +214,8 @@ int libusb_open(libusb_device *dev, libusb_device_handle **handle) | ||||||
|     tmp_hdl->ctx = dev->context; |     tmp_hdl->ctx = dev->context; | ||||||
|     tmp_hdl->dev = dev; |     tmp_hdl->dev = dev; | ||||||
| 
 | 
 | ||||||
|     /*
 |     tmp_hdl->packet_data_file = fopen_env(OUTPUT_DATA_FILE_ENV, | ||||||
|      * Get the name of the output data file from the environment, |                                           DEFAULT_OUTPUT_DATA_FILE, "w"); | ||||||
|      * use a default name if the environment variable is unset or empty |  | ||||||
|      */ |  | ||||||
|     output_data_file = getenv(OUTPUT_DATA_FILE_ENV); |  | ||||||
|     if (output_data_file == NULL || output_data_file[0] == '\0') { |  | ||||||
|         output_data_file = DEFAULT_OUTPUT_DATA_FILE; |  | ||||||
|     } |  | ||||||
|     tmp_hdl->packet_data_file = fopen(output_data_file, "w"); |  | ||||||
| 
 | 
 | ||||||
|     /* Make sure that the file opened correctly */ |     /* Make sure that the file opened correctly */ | ||||||
|     if (tmp_hdl->packet_data_file == NULL) { |     if (tmp_hdl->packet_data_file == NULL) { | ||||||
|  | @ -280,7 +262,7 @@ int libusb_control_transfer(libusb_device_handle *dev_handle, | ||||||
| { | { | ||||||
|     /* Always log the control transfer */ |     /* Always log the control transfer */ | ||||||
|     fprintf(dev_handle->packet_data_file, |     fprintf(dev_handle->packet_data_file, | ||||||
|         "%s: RqType: %02x bRequest: %02x wValue: %04x wIndex: %04x timeout: %d\n", |         "%s: RqType: %02x bRequest: %02x wValue: %04x wIndex: %04x timeout: %u\n", | ||||||
|         __func__, request_type, bRequest, wValue, wIndex, timeout); |         __func__, request_type, bRequest, wValue, wIndex, timeout); | ||||||
|     if (data != NULL) { |     if (data != NULL) { | ||||||
|         int i; |         int i; | ||||||
|  |  | ||||||
|  | @ -16,20 +16,15 @@ | ||||||
| 
 | 
 | ||||||
| int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||||||
| { | { | ||||||
|     char *data_file; |  | ||||||
|     FILE *data; |     FILE *data; | ||||||
|     char **id_pair; |     char **id_pair; | ||||||
|     unsigned int vid; |     unsigned int vid; | ||||||
|     unsigned int pid; |     unsigned int pid; | ||||||
|     int i; |     int i; | ||||||
| 
 | 
 | ||||||
|     data_file = getenv(INPUT_DEVICE_LIST_ENV); |     data = fopen_env(INPUT_DEVICE_LIST_ENV, DEFAULT_INPUT_DEVICE_LIST_FILE, "w"); | ||||||
|     if (data_file == NULL || data_file[0] == '\0') { |  | ||||||
|         data_file = DEFAULT_INPUT_DEVICE_LIST_FILE; |  | ||||||
|     } |  | ||||||
|     data = fopen(data_file, "w"); |  | ||||||
|     if (data == NULL) { |     if (data == NULL) { | ||||||
|         fprintf(stderr, "Unable to open %s for writing\n", data_file); |         fprintf(stderr, "Unable to open device list file for writing\n"); | ||||||
|         fprintf(stderr, "%s\n", strerror(errno)); |         fprintf(stderr, "%s\n", strerror(errno)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue