mcabber/src/settings.c
changeset 341 dea407d53fe6
parent 337 3a25be278864
child 362 d8f147d6e872
equal deleted inserted replaced
340:2362167ac0f3 341:dea407d53fe6
    22 #include <strings.h>
    22 #include <strings.h>
    23 #include <stdlib.h>
    23 #include <stdlib.h>
    24 #include <ctype.h>
    24 #include <ctype.h>
    25 
    25 
    26 #include "settings.h"
    26 #include "settings.h"
       
    27 #include "commands.h"
       
    28 #include "utils.h"
       
    29 #include "screen.h"
    27 
    30 
    28 static GSList *option;
    31 static GSList *option;
    29 static GSList *alias;
    32 static GSList *alias;
    30 static GSList *binding;
    33 static GSList *binding;
    31 
    34 
    56 
    59 
    57   return ptr;
    60   return ptr;
    58 }
    61 }
    59 
    62 
    60 /* -- */
    63 /* -- */
       
    64 
       
    65 //  cfg_read_file(filename)
       
    66 // Read and parse config file "filename".  If filename is NULL,
       
    67 // try to open the configuration file at the default locations.
       
    68 //
       
    69 int cfg_read_file(char *filename)
       
    70 {
       
    71   FILE *fp;
       
    72   char *buf;
       
    73   char *line, *eol;
       
    74   unsigned int ln = 0;
       
    75   int err = 0;
       
    76 
       
    77   if (!filename) {
       
    78     // Use default config file locations
       
    79     char *home = getenv("HOME");
       
    80     if (!home) {
       
    81       ut_WriteLog("Can't find home dir!\n");
       
    82       fprintf(stderr, "Can't find home dir!\n");
       
    83       return -1;
       
    84     }
       
    85     filename = g_new(char, strlen(home)+24);
       
    86     sprintf(filename, "%s/.mcabber/mcabberrc", home);
       
    87     if ((fp = fopen(filename, "r")) == NULL) {
       
    88       // 2nd try...
       
    89       sprintf(filename, "%s/.mcabberrc", home);
       
    90       if ((fp = fopen(filename, "r")) == NULL) {
       
    91         fprintf(stderr, "Cannot open config file!\n");
       
    92         return -1;
       
    93       }
       
    94     }
       
    95     g_free(filename);
       
    96   }
       
    97   else if ((fp = fopen(filename, "r")) == NULL) {
       
    98     perror("fopen (cfg_file())");
       
    99     return -1;
       
   100   }
       
   101 
       
   102   buf = g_new(char, 512);
       
   103 
       
   104   while (fgets(buf+1, 511, fp) != NULL) {
       
   105     // The first char is reserved to add a '/', to make a command line
       
   106     line = buf+1;
       
   107     ln++;
       
   108 
       
   109     // Strip leading spaces
       
   110     while (isspace(*line))
       
   111       line++;
       
   112 
       
   113     // Make eol point to the last char of the line
       
   114     for (eol = line ; *eol ; eol++)
       
   115       ;
       
   116     if (eol > line)
       
   117       eol--;
       
   118 
       
   119     // Strip trailing spaces
       
   120     while (eol > line && isspace(*eol))
       
   121       *eol-- = 0;
       
   122 
       
   123     // Ignore empty lines and comments
       
   124     if ((*line == '\n') || (*line == '\0') || (*line == '#'))
       
   125       continue;
       
   126 
       
   127     if ((strchr(line, '=') != NULL)) {
       
   128       // Only accept the set, alias and bind commands
       
   129       if (strncmp(line, "set ", 4) &&
       
   130           strncmp(line, "bind ", 5) &&
       
   131           strncmp(line, "alias ", 6)) {
       
   132         scr_LogPrint("Error in configuration file (l. %d): bad command", ln);
       
   133         err++;
       
   134         continue;
       
   135       }
       
   136       *(--line) = '/';        // Set the leading '/' to build a command line
       
   137       process_command(line);  // Process the command
       
   138     } else {
       
   139       scr_LogPrint("Error in configuration file (l. %d): no assignment", ln);
       
   140       err++;
       
   141     }
       
   142   }
       
   143   g_free(buf);
       
   144   fclose(fp);
       
   145   return err;
       
   146 }
    61 
   147 
    62 //  parse_assigment(assignment, pkey, pval)
   148 //  parse_assigment(assignment, pkey, pval)
    63 // Read assignment and split it to key, value
   149 // Read assignment and split it to key, value
    64 //
   150 //
    65 // If this is an assignment, the function will return TRUE and
   151 // If this is an assignment, the function will return TRUE and