.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* IIO - useful set of util functionality |
---|
2 | 3 | * |
---|
3 | 4 | * Copyright (c) 2008 Jonathan Cameron |
---|
4 | | - * |
---|
5 | | - * This program is free software; you can redistribute it and/or modify it |
---|
6 | | - * under the terms of the GNU General Public License version 2 as published by |
---|
7 | | - * the Free Software Foundation. |
---|
8 | 5 | */ |
---|
9 | 6 | #include <string.h> |
---|
10 | 7 | #include <stdlib.h> |
---|
.. | .. |
---|
265 | 262 | if (fscanf(sysfsfp, "%f", output) != 1) |
---|
266 | 263 | ret = errno ? -errno : -ENODATA; |
---|
267 | 264 | |
---|
| 265 | + fclose(sysfsfp); |
---|
268 | 266 | break; |
---|
269 | 267 | } |
---|
270 | 268 | error_free_filename: |
---|
.. | .. |
---|
345 | 343 | } |
---|
346 | 344 | |
---|
347 | 345 | sysfsfp = fopen(filename, "r"); |
---|
| 346 | + free(filename); |
---|
348 | 347 | if (!sysfsfp) { |
---|
349 | 348 | ret = -errno; |
---|
350 | | - free(filename); |
---|
351 | 349 | goto error_close_dir; |
---|
352 | 350 | } |
---|
353 | 351 | |
---|
.. | .. |
---|
357 | 355 | if (fclose(sysfsfp)) |
---|
358 | 356 | perror("build_channel_array(): Failed to close file"); |
---|
359 | 357 | |
---|
360 | | - free(filename); |
---|
361 | 358 | goto error_close_dir; |
---|
362 | 359 | } |
---|
363 | 360 | if (ret == 1) |
---|
.. | .. |
---|
365 | 362 | |
---|
366 | 363 | if (fclose(sysfsfp)) { |
---|
367 | 364 | ret = -errno; |
---|
368 | | - free(filename); |
---|
369 | 365 | goto error_close_dir; |
---|
370 | 366 | } |
---|
371 | 367 | |
---|
372 | | - free(filename); |
---|
373 | 368 | } |
---|
374 | 369 | |
---|
375 | 370 | *ci_array = malloc(sizeof(**ci_array) * (*counter)); |
---|
.. | .. |
---|
395 | 390 | } |
---|
396 | 391 | |
---|
397 | 392 | sysfsfp = fopen(filename, "r"); |
---|
| 393 | + free(filename); |
---|
398 | 394 | if (!sysfsfp) { |
---|
399 | 395 | ret = -errno; |
---|
400 | | - free(filename); |
---|
401 | 396 | count--; |
---|
402 | 397 | goto error_cleanup_array; |
---|
403 | 398 | } |
---|
.. | .. |
---|
405 | 400 | errno = 0; |
---|
406 | 401 | if (fscanf(sysfsfp, "%i", ¤t_enabled) != 1) { |
---|
407 | 402 | ret = errno ? -errno : -ENODATA; |
---|
408 | | - free(filename); |
---|
409 | 403 | count--; |
---|
410 | 404 | goto error_cleanup_array; |
---|
411 | 405 | } |
---|
412 | 406 | |
---|
413 | 407 | if (fclose(sysfsfp)) { |
---|
414 | 408 | ret = -errno; |
---|
415 | | - free(filename); |
---|
416 | 409 | count--; |
---|
417 | 410 | goto error_cleanup_array; |
---|
418 | 411 | } |
---|
419 | 412 | |
---|
420 | 413 | if (!current_enabled) { |
---|
421 | | - free(filename); |
---|
422 | 414 | count--; |
---|
423 | 415 | continue; |
---|
424 | 416 | } |
---|
.. | .. |
---|
429 | 421 | strlen(ent->d_name) - |
---|
430 | 422 | strlen("_en")); |
---|
431 | 423 | if (!current->name) { |
---|
432 | | - free(filename); |
---|
433 | 424 | ret = -ENOMEM; |
---|
434 | 425 | count--; |
---|
435 | 426 | goto error_cleanup_array; |
---|
.. | .. |
---|
439 | 430 | ret = iioutils_break_up_name(current->name, |
---|
440 | 431 | ¤t->generic_name); |
---|
441 | 432 | if (ret) { |
---|
442 | | - free(filename); |
---|
443 | 433 | free(current->name); |
---|
444 | 434 | count--; |
---|
445 | 435 | goto error_cleanup_array; |
---|
.. | .. |
---|
450 | 440 | scan_el_dir, |
---|
451 | 441 | current->name); |
---|
452 | 442 | if (ret < 0) { |
---|
453 | | - free(filename); |
---|
454 | 443 | ret = -ENOMEM; |
---|
455 | 444 | goto error_cleanup_array; |
---|
456 | 445 | } |
---|
457 | 446 | |
---|
458 | 447 | sysfsfp = fopen(filename, "r"); |
---|
| 448 | + free(filename); |
---|
459 | 449 | if (!sysfsfp) { |
---|
460 | 450 | ret = -errno; |
---|
461 | | - fprintf(stderr, "failed to open %s\n", |
---|
462 | | - filename); |
---|
463 | | - free(filename); |
---|
| 451 | + fprintf(stderr, "failed to open %s/%s_index\n", |
---|
| 452 | + scan_el_dir, current->name); |
---|
464 | 453 | goto error_cleanup_array; |
---|
465 | 454 | } |
---|
466 | 455 | |
---|
.. | .. |
---|
470 | 459 | if (fclose(sysfsfp)) |
---|
471 | 460 | perror("build_channel_array(): Failed to close file"); |
---|
472 | 461 | |
---|
473 | | - free(filename); |
---|
474 | 462 | goto error_cleanup_array; |
---|
475 | 463 | } |
---|
476 | 464 | |
---|
477 | 465 | if (fclose(sysfsfp)) { |
---|
478 | 466 | ret = -errno; |
---|
479 | | - free(filename); |
---|
480 | 467 | goto error_cleanup_array; |
---|
481 | 468 | } |
---|
482 | 469 | |
---|
483 | | - free(filename); |
---|
484 | 470 | /* Find the scale */ |
---|
485 | 471 | ret = iioutils_get_param_float(¤t->scale, |
---|
486 | 472 | "scale", |
---|
.. | .. |
---|
546 | 532 | { |
---|
547 | 533 | int count = 0; |
---|
548 | 534 | |
---|
| 535 | + /* It takes a digit to represent zero */ |
---|
| 536 | + if (!num) |
---|
| 537 | + return 1; |
---|
| 538 | + |
---|
549 | 539 | while (num != 0) { |
---|
550 | 540 | num /= 10; |
---|
551 | 541 | count++; |
---|