refactor the handling of the filename arg to make consistent
authorDan Dennedy <dan@dennedy.org>
Mon, 12 Mar 2012 04:57:46 +0000 (21:57 -0700)
committerDan Dennedy <dan@dennedy.org>
Mon, 12 Mar 2012 04:57:46 +0000 (21:57 -0700)
...across load, insert, and apnd commands.

src/melted/melted_unit_commands.c

index a21ab31..6ce8e6e 100644 (file)
 #include "melted_commands.h"
 #include "melted_log.h"
 
-int melted_load( command_argument cmd_arg )
-{
-       melted_unit unit = melted_get_unit(cmd_arg->unit);
-       char *filename = (char*) cmd_arg->argument;
-       char fullname[1024];
-       int flush = 1;
-       char *service;
 
-       if ( filename[0] == '!' )
-       {
-               flush = 0;
-               filename ++;
-       }
+void get_fullname( command_argument cmd_arg, char *fullname, size_t len, char *filename )
+{
+       char *service = strchr( filename, ':' );
 
-       service = strchr( filename, ':' );
        if ( service != NULL )
        {
                service = filename;
                filename = strchr( service, ':' );
                *filename ++ = '\0';
-               
+
                if ( strlen( cmd_arg->root_dir ) && filename[0] == '/' )
                        filename++;
-       
-               snprintf( fullname, 1023, "%s:%s%s", service, cmd_arg->root_dir, filename );
+
+               snprintf( fullname, len, "%s:%s%s", service, cmd_arg->root_dir, filename );
        }
        else
        {
                if ( strlen( cmd_arg->root_dir ) && filename[0] == '/' )
                        filename++;
 
-               snprintf( fullname, 1023, "%s%s", cmd_arg->root_dir, filename );
+               snprintf( fullname, len, "%s%s", cmd_arg->root_dir, filename );
        }
-       
+}
+
+int melted_load( command_argument cmd_arg )
+{
+       melted_unit unit = melted_get_unit(cmd_arg->unit);
+       char *filename = (char*) cmd_arg->argument;
+       char fullname[1024];
+       int flush = 1;
+
+       if ( filename[0] == '!' )
+       {
+               flush = 0;
+               filename ++;
+       }
+       get_fullname( cmd_arg, fullname, sizeof(fullname), filename );
+
        if (unit == NULL)
                return RESPONSE_INVALID_UNIT;
        else
@@ -122,11 +127,8 @@ int melted_insert( command_argument cmd_arg )
        char *filename = (char*) cmd_arg->argument;
        char fullname[1024];
 
-       if ( strlen( cmd_arg->root_dir ) && filename[0] == '/' )
-               filename++;
+       get_fullname( cmd_arg, fullname, sizeof(fullname), filename );
 
-       snprintf( fullname, 1023, "%s%s", cmd_arg->root_dir, filename );
-       
        if (unit == NULL)
                return RESPONSE_INVALID_UNIT;
        else
@@ -242,11 +244,8 @@ int melted_append( command_argument cmd_arg )
        char *filename = (char*) cmd_arg->argument;
        char fullname[1024];
 
-       if ( strlen( cmd_arg->root_dir ) && filename[0] == '/' )
-               filename++;
+       get_fullname( cmd_arg, fullname, sizeof(fullname), filename );
 
-       snprintf( fullname, 1023, "%s%s", cmd_arg->root_dir, filename );
-       
        if (unit == NULL)
                return RESPONSE_INVALID_UNIT;
        else