@@ -49,11 +49,8 @@ void *read_file(char *filename, ssize_t *_size)
49
49
50
50
/* slurp it into our buffer */
51
51
ret = read (fd , buffer , size );
52
- if (ret != size ) {
53
- free (buffer );
54
- buffer = NULL ;
52
+ if (ret != size )
55
53
goto bail ;
56
- }
57
54
58
55
/* let the caller know how big it is */
59
56
* _size = size ;
@@ -62,90 +59,33 @@ void *read_file(char *filename, ssize_t *_size)
62
59
close (fd );
63
60
return buffer ;
64
61
}
65
-
66
- char * truncate_sysfs_path (char * path , int count , char * buffer , size_t bufflen )
62
+ char * truncate_sysfs_path (char * path , int num_elements_to_remove , char * buffer )
67
63
{
68
- char * p ;
64
+ int i ;
69
65
70
- strlcpy (buffer , path , bufflen );
71
- p = buffer + strlen (buffer );
66
+ strcpy (buffer , path );
72
67
73
- for ( ; count > 0 ; count -- ) {
74
- while (p > buffer && p [-1 ] != '/' ) {
75
- p -- ;
76
- }
77
- if (p == buffer )
78
- break ;
68
+ for (i = 0 ; i < num_elements_to_remove ; i ++ ) {
69
+ char * p = & buffer [strlen (buffer )- 1 ];
79
70
80
- p -= 1 ;
71
+ for (p = & buffer [strlen (buffer ) - 1 ]; * p != '/' ; p -- );
72
+ * p = '\0' ;
81
73
}
82
- p [0 ] = '\0' ;
83
74
84
75
return buffer ;
85
76
}
86
77
87
- /* used to read the first line of a /sys file into a heap-allocated buffer
88
- * this assumes that reading the file returns a list of zero-terminated strings,
89
- * each could also have a terminating \n before the 0
90
- *
91
- * returns NULL on error, of a new string on success, which must be freed by the
92
- * caller.
93
- */
94
- char * read_first_line_of (const char * filepath )
78
+ char * read_sysfs_var (char * buffer , size_t maxlen , char * devpath , char * var )
95
79
{
96
- char * p , * q , * line ;
97
- size_t len ;
80
+ char filename [ 255 ] ;
81
+ char * p ;
98
82
ssize_t sz ;
99
83
100
- p = read_file ((char * )filepath , & sz );
101
- if (p == NULL )
102
- goto FAIL ;
103
-
104
- /* search end of first line */
105
- q = memchr (p , sz , '\0' );
106
- if (q == NULL )
107
- q = p + sz ; /* let's be flexible */
108
-
109
- len = (size_t )(q - p ); /* compute line length */
110
- if (len == 0 )
111
- goto FAIL ;
112
-
113
- if (p [len - 1 ] == '\n' ) { /* strip trailing \n */
114
- len -= 1 ;
115
- if (len == 0 )
116
- goto FAIL ;
117
- }
118
-
119
- line = malloc (len + 1 );
120
- if (line == NULL )
121
- goto FAIL ;
122
-
123
- memcpy (line , p , len );
124
- line [len ] = 0 ;
84
+ sprintf (filename , "/sys%s/%s" , devpath , var );
85
+ p = read_file (filename , & sz );
86
+ p [(strlen (p ) - 1 )] = '\0' ;
87
+ strncpy (buffer , p , maxlen );
125
88
free (p );
126
-
127
- return line ;
128
-
129
- FAIL :
130
- if (p != NULL )
131
- free (p );
132
-
133
- return NULL ;
134
- }
135
-
136
- char * read_sysfs_var (char * buffer , size_t maxlen , char * devpath , char * var )
137
- {
138
- char filename [255 ], * line ;
139
-
140
- snprintf (filename , sizeof filename , "/sys%s/%s" , devpath , var );
141
-
142
- line = read_first_line_of (filename );
143
- if (line == NULL )
144
- return NULL ;
145
-
146
- snprintf (buffer , maxlen , "%s" , line );
147
- free (line );
148
-
149
89
return buffer ;
150
90
}
151
91
0 commit comments