fix default calibration file path for boards with '/' in name
authorFrank Mori Hess <fmhess@speakeasy.net>
Wed, 28 May 2003 21:18:34 +0000 (21:18 +0000)
committerFrank Mori Hess <fmhess@speakeasy.net>
Wed, 28 May 2003 21:18:34 +0000 (21:18 +0000)
lib/calib.c

index 565ac4a1d943ed3ce37ec1043152058b4f00c49e..d5068880018c45ce3ce4a7c81cdae9e33f1ee134 100644 (file)
@@ -161,12 +161,19 @@ int _comedi_apply_parsed_calibration( comedi_t *dev, unsigned int subdev, unsign
        return retval;
 }
 
+/* munge characters in board name that will cause problems with file paths */
+static void fixup_board_name( char *name )
+{
+       while( ( name = strchr( name, '/' ) ) )
+               if( name ) *name = '-';
+}
+
 EXPORT_ALIAS_DEFAULT(_comedi_get_default_calibration_path,comedi_get_default_calibration_path,0.7.20);
 char* _comedi_get_default_calibration_path( comedi_t *dev )
 {
        struct stat file_stats;
        char *file_path;
-       char *board_name;
+       char *board_name, *temp;
        char *driver_name;
 
        if( fstat( comedi_fileno( dev ), &file_stats ) < 0 )
@@ -175,19 +182,23 @@ char* _comedi_get_default_calibration_path( comedi_t *dev )
                return NULL;
        }
 
-       board_name = comedi_get_board_name( dev );
-       if( board_name == NULL )
+       driver_name = comedi_get_driver_name( dev );
+       if( driver_name == NULL )
        {
                return NULL;
        }
-       driver_name = comedi_get_driver_name( dev );
-       if( driver_name == NULL )
+       temp = comedi_get_board_name( dev );
+       if( temp == NULL )
        {
                return NULL;
        }
+       board_name = strdup( temp );
+
+       fixup_board_name( board_name );
        asprintf( &file_path, "/etc/comedi/calibrations/%s_%s_comedi%li",
                driver_name, board_name, ( unsigned long ) minor( file_stats.st_rdev ) );
 
+       free( board_name );
        return file_path;
 }