Skip to content
Snippets Groups Projects
main.c 3.44 KiB
Newer Older
  • Learn to ignore specific revisions
  • Suru Dissanaike's avatar
    Suru Dissanaike committed
    /*
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
     * main.c -
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
     * unixtime that returns current time in epoch format.
     *
     * Copyright (C) 2020 iopsys Software Solutions AB. All rights reserved.
     *
     *
     * This program is free software; you can redistribute it and/or
     * modify it under the terms of the GNU General Public License
     * version 2 as published by the Free Software Foundation.
     *
     * 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, write to the Free Software
     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
     * 02110-1301 USA
     */
    
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    #include "getopt.h"
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    #include "helper.h"
    
    #include "ubus_api_validator.h"
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    #include "ubus_call.h"
    
    #include <dirent.h>
    #include <json-validator.h>
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    #include <signal.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    #include <unistd.h>
    
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    #define API_PATH "/usr/share/api/"
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    struct global_args_t {
      char *path;
      const char *dir_path;
    } global_args;
    
    static const char *opt_string = "f:d:t:h";
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    
    static void show_usage(char *application_name) {
    
      fprintf(stdout,
              "\nUsage: %s: <options> \n"
              "Options: \n"
    
              "  -t Timeout for ubus call in seconds\n"
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
              "  -f json file with ubus objects\n"
    
              "  -d directory with json files \n"
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
              "  -h help\n\n",
              application_name);
    }
    
    static void parse_command_line_args(int argc, char *argv[]) {
      int opt;
    
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      while ((opt = getopt(argc, argv, opt_string)) != -1) {
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    
        switch (opt) {
        case 'f':
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
          global_args.path = optarg;
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
          global_args.dir_path = optarg;
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
          break;
    
    
        case 't':
          set_ubus_timeout(atoi(optarg));
          break;
    
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
        case 'h':
          show_usage(argv[0]);
          exit(EXIT_SUCCESS);
    
        default:
          show_usage(argv[0]);
          exit(EXIT_FAILURE);
          break;
        }
      }
    }
    
    int main(int argc, char *argv[]) {
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      int rv;
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      parse_command_line_args(argc, argv);
    
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      rv = schema_validator_init();
      if (rv) {
    
        perror("schema_validator_init failed");
        return EXIT_FAILURE;
      }
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      rv = ubus_init();
      if (rv) {
    
        perror("ubus registration succesfull");
        return EXIT_FAILURE;
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      if (global_args.path != NULL)
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
        validate_path(global_args.path);
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      if (global_args.path == NULL && global_args.dir_path != NULL) {
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
        // printf("\n working with directory: %s \n ", global_args.dir_path);
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
        d = opendir(global_args.dir_path);
    
          struct dirent *dir;
    
    
          while ((dir = readdir(d)) != NULL) {
            char *res;
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
            char *format;
    
            if (strlastchar(global_args.dir_path, '/') == 0)
              format = "%s%s";
            else
              format = "%s/%s";
            rv = asprintf(&res, format, global_args.dir_path, dir->d_name);
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
            if (rv == -1) {
    
              fprintf(stderr, "asprintf() failed: insufficient memory!\n");
              return EXIT_FAILURE;
            }
            if (dir->d_type == DT_REG) {
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
              // printf("Result: '%s'\n", res);
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
              validate_path(res);
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
            free(res);
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
        } else {
          perror("directory error \n");
          return EXIT_FAILURE;
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
      } else if (global_args.path == NULL && global_args.dir_path == NULL) {
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
        printf("trying default file... \n");
    
        validate_path("./json/ubus.json");
    
    Suru Dissanaike's avatar
    Suru Dissanaike committed
    }