[dbench @ tridge@samba.org-20070716041205-ndm0vhllg1guj8eb]
authorAndrew Tridgell <tridge@samba.org>
Mon, 16 Jul 2007 04:12:05 +0000 (14:12 +1000)
committerAndrew Tridgell <tridge@samba.org>
Mon, 16 Jul 2007 04:12:05 +0000 (14:12 +1000)
allow multiple clients per process

.bzrignore
child.c
dbench.c
dbench.h
fileio.c
proto.h
sockio.c

index fa58a108641fb1267a93b763d3b608ba9488c0b6..f36bb20ba0bc03ffd2f02d39d7abb7fe5fb5f7cb 100644 (file)
@@ -8,3 +8,5 @@ dbench
 tbench
 tbench_srv
 configure
+TAGS
+clients
diff --git a/child.c b/child.c
index 3b94450c6ca0eaec381d333a550227245dc9f801..20c038ea51bfd180612ef7c12b65f380e3f30cd9 100644 (file)
--- a/child.c
+++ b/child.c
 
 static void nb_target_rate(struct child_struct *child, double rate)
 {
-       static double last_bytes;
-       static struct timeval last_time;
        double tdelay;
 
-       if (last_bytes == 0) {
-               last_bytes = child->bytes;
-               last_time = timeval_current();
+       if (child->rate.last_bytes == 0) {
+               child->rate.last_bytes = child->bytes;
+               child->rate.last_time = timeval_current();
                return;
        }
 
        if (rate != 0) {
-               tdelay = (child->bytes - last_bytes)/(1.0e6*rate) - timeval_elapsed(&last_time);
+               tdelay = (child->bytes - child->rate.last_bytes)/(1.0e6*rate) - 
+                       timeval_elapsed(&child->rate.last_time);
        } else {
-               tdelay = - timeval_elapsed(&last_time);
+               tdelay = - timeval_elapsed(&child->rate.last_time);
        }
        if (tdelay > 0 && rate != 0) {
                msleep(tdelay*1000);
@@ -52,8 +51,8 @@ static void nb_target_rate(struct child_struct *child, double rate)
                child->max_latency = MAX(child->max_latency, -tdelay);
        }
 
-       last_time = timeval_current();
-       last_bytes = child->bytes;
+       child->rate.last_time = timeval_current();
+       child->rate.last_bytes = child->bytes;
 }
 
 static void nb_time_reset(struct child_struct *child)
@@ -72,25 +71,83 @@ static void nb_time_delay(struct child_struct *child, double targett)
 }
 
 
+/*
+  one child operation
+ */
+static void child_op(struct child_struct *child, char **params, 
+                    const char *fname, const char *fname2, const char *status)
+{
+#if 0
+       printf("op %s in client %d  fname=%s fname2=%s\n", params[0], child->id,
+              fname, fname2);
+#endif
+       if (!strcmp(params[0],"NTCreateX")) {
+               nb_createx(child, fname, ival(params[2]), ival(params[3]), 
+                          ival(params[4]), status);
+       } else if (!strcmp(params[0],"Close")) {
+               nb_close(child, ival(params[1]), status);
+       } else if (!strcmp(params[0],"Rename")) {
+               nb_rename(child, fname, fname2, status);
+       } else if (!strcmp(params[0],"Unlink")) {
+               nb_unlink(child, fname, ival(params[2]), status);
+       } else if (!strcmp(params[0],"Deltree")) {
+               nb_deltree(child, fname);
+       } else if (!strcmp(params[0],"Rmdir")) {
+               nb_rmdir(child, fname, status);
+       } else if (!strcmp(params[0],"Mkdir")) {
+               nb_mkdir(child, fname, status);
+       } else if (!strcmp(params[0],"QUERY_PATH_INFORMATION")) {
+               nb_qpathinfo(child, fname, ival(params[2]), status);
+       } else if (!strcmp(params[0],"QUERY_FILE_INFORMATION")) {
+               nb_qfileinfo(child, ival(params[1]), ival(params[2]), status);
+       } else if (!strcmp(params[0],"QUERY_FS_INFORMATION")) {
+               nb_qfsinfo(child, ival(params[1]), status);
+       } else if (!strcmp(params[0],"SET_FILE_INFORMATION")) {
+               nb_sfileinfo(child, ival(params[1]), ival(params[2]), status);
+       } else if (!strcmp(params[0],"FIND_FIRST")) {
+               nb_findfirst(child, fname, ival(params[2]), 
+                            ival(params[3]), ival(params[4]), status);
+       } else if (!strcmp(params[0],"WriteX")) {
+               nb_writex(child, ival(params[1]), 
+                         ival(params[2]), ival(params[3]), ival(params[4]),
+                         status);
+       } else if (!strcmp(params[0],"LockX")) {
+               nb_lockx(child, ival(params[1]), 
+                        ival(params[2]), ival(params[3]), status);
+       } else if (!strcmp(params[0],"UnlockX")) {
+               nb_unlockx(child, ival(params[1]), 
+                          ival(params[2]), ival(params[3]), status);
+       } else if (!strcmp(params[0],"ReadX")) {
+               nb_readx(child, ival(params[1]), 
+                        ival(params[2]), ival(params[3]), ival(params[4]),
+                        status);
+       } else if (!strcmp(params[0],"Flush")) {
+               nb_flush(child, ival(params[1]), status);
+       } else if (!strcmp(params[0],"Sleep")) {
+               nb_sleep(child, ival(params[1]), status);
+       } else {
+               printf("[%d] Unknown operation %s\n", child->line, params[0]);
+       }
+}
+
 
 /* run a test that simulates an approximate netbench client load */
-void child_run(struct child_struct *child, const char *loadfile)
+void child_run(struct child_struct *child0, const char *loadfile)
 {
        int i;
        char line[1024];
-       char *cname;
        char **sparams, **params;
        char *p;
        const char *status;
-       char *fname = NULL;
-       char *fname2 = NULL;
        FILE *f = fopen(loadfile, "r");
        pid_t parent = getppid();
        double targett;
+       struct child_struct *child;
 
-       child->line = 0;
-
-       asprintf(&cname,"client%d", child->id);
+       for (child=child0;child<child0+options.clients_per_process;child++) {
+               child->line = 0;
+               asprintf(&child->cname,"client%d", child->id);
+       }
 
        sparams = calloc(20, sizeof(char *));
        for (i=0;i<20;i++) {
@@ -98,7 +155,9 @@ void child_run(struct child_struct *child, const char *loadfile)
        }
 
 again:
-       nb_time_reset(child);
+       for (child=child0;child<child0+options.clients_per_process;child++) {
+               nb_time_reset(child);
+       }
 
        while (fgets(line, sizeof(line)-1, f)) {
                params = sparams;
@@ -111,7 +170,6 @@ again:
 
                line[strlen(line)-1] = 0;
 
-               all_string_sub(line,"client1", cname);
                all_string_sub(line,"\\", "/");
                all_string_sub(line," /", " ");
                
@@ -137,83 +195,38 @@ again:
                        targett = 0.0;
                }
 
-               if (options.targetrate != 0 || targett == 0.0) {
-                       nb_target_rate(child, options.targetrate);
-               } else {
-                       nb_time_delay(child, targett);
-               }
-               child->lasttime = timeval_current();
-
                if (strncmp(params[i-1], "NT_STATUS_", 10) != 0 &&
                    strncmp(params[i-1], "0x", 2) != 0) {
                        printf("Badly formed status at line %d\n", child->line);
                        continue;
                }
 
-               if (fname) {
-                       free(fname);
-                       fname = NULL;
-               }
-               if (fname2) {
-                       free(fname2);
-                       fname2 = NULL;
-               }
-
-               if (i>1 && params[1][0] == '/') {
-                       asprintf(&fname, "%s%s", child->directory, params[1]);
-               }
-               if (i>2 && params[2][0] == '/') {
-                       asprintf(&fname2, "%s%s", child->directory, params[2]);
-               }
-
                status = params[i-1];
-
-               if (!strcmp(params[0],"NTCreateX")) {
-                       nb_createx(child, fname, ival(params[2]), ival(params[3]), 
-                                  ival(params[4]), status);
-               } else if (!strcmp(params[0],"Close")) {
-                       nb_close(child, ival(params[1]), status);
-               } else if (!strcmp(params[0],"Rename")) {
-                       nb_rename(child, fname, fname2, status);
-               } else if (!strcmp(params[0],"Unlink")) {
-                       nb_unlink(child, fname, ival(params[2]), status);
-               } else if (!strcmp(params[0],"Deltree")) {
-                       nb_deltree(child, fname);
-               } else if (!strcmp(params[0],"Rmdir")) {
-                       nb_rmdir(child, fname, status);
-               } else if (!strcmp(params[0],"Mkdir")) {
-                       nb_mkdir(child, fname, status);
-               } else if (!strcmp(params[0],"QUERY_PATH_INFORMATION")) {
-                       nb_qpathinfo(child, fname, ival(params[2]), status);
-               } else if (!strcmp(params[0],"QUERY_FILE_INFORMATION")) {
-                       nb_qfileinfo(child, ival(params[1]), ival(params[2]), status);
-               } else if (!strcmp(params[0],"QUERY_FS_INFORMATION")) {
-                       nb_qfsinfo(child, ival(params[1]), status);
-               } else if (!strcmp(params[0],"SET_FILE_INFORMATION")) {
-                       nb_sfileinfo(child, ival(params[1]), ival(params[2]), status);
-               } else if (!strcmp(params[0],"FIND_FIRST")) {
-                       nb_findfirst(child, fname, ival(params[2]), 
-                                    ival(params[3]), ival(params[4]), status);
-               } else if (!strcmp(params[0],"WriteX")) {
-                       nb_writex(child, ival(params[1]), 
-                                 ival(params[2]), ival(params[3]), ival(params[4]),
-                                 status);
-               } else if (!strcmp(params[0],"LockX")) {
-                       nb_lockx(child, ival(params[1]), 
-                                ival(params[2]), ival(params[3]), status);
-               } else if (!strcmp(params[0],"UnlockX")) {
-                       nb_unlockx(child, ival(params[1]), 
-                                ival(params[2]), ival(params[3]), status);
-               } else if (!strcmp(params[0],"ReadX")) {
-                       nb_readx(child, ival(params[1]), 
-                                ival(params[2]), ival(params[3]), ival(params[4]),
-                                status);
-               } else if (!strcmp(params[0],"Flush")) {
-                       nb_flush(child, ival(params[1]), status);
-               } else if (!strcmp(params[0],"Sleep")) {
-                       nb_sleep(child, ival(params[1]), status);
-               } else {
-                       printf("[%d] Unknown operation %s\n", child->line, params[0]);
+               
+               for (child=child0;child<child0+options.clients_per_process;child++) {
+                       char *fname = NULL;
+                       char *fname2 = NULL;
+
+                       if (i>1 && params[1][0] == '/') {
+                               asprintf(&fname, "%s%s", child->directory, params[1]);
+                               all_string_sub(fname,"client1", child->cname);
+                       }
+                       if (i>2 && params[2][0] == '/') {
+                               if (fname2) free(fname2);
+                               asprintf(&fname2, "%s%s", child->directory, params[2]);
+                               all_string_sub(fname2,"client1", child->cname);
+                       }
+
+                       if (options.targetrate != 0 || targett == 0.0) {
+                               nb_target_rate(child, options.targetrate);
+                       } else {
+                               nb_time_delay(child, targett);
+                       }
+                       child->lasttime = timeval_current();
+
+                       child_op(child, params, fname, fname2, status);
+                       if (fname) free(fname);
+                       if (fname2) free(fname2);
                }
        }
 
@@ -221,7 +234,9 @@ again:
        goto again;
 
 done:
-       child->cleanup = 1;
        fclose(f);
-       nb_cleanup(child);
+       for (child=child0;child<child0+options.clients_per_process;child++) {
+               child->cleanup = 1;
+               nb_cleanup(child);
+       }
 }
index fdb00108e85d9b254d8750369121faa24732dcd3..8292c52ac948f3c2aeb2a6bf2e617efcdcbfe7f1 100644 (file)
--- a/dbench.c
+++ b/dbench.c
 #include <sys/sem.h>
 
 struct options options = {
-       .timelimit        = 600,
-       .loadfile         = DATADIR "/client.txt",
-       .directory        = ".",
-       .tcp_options      = TCP_OPTIONS,
-       .nprocs           = 10,
-       .sync_open        = 0,
-       .sync_dirs        = 0,
-       .do_fsync         = 0,
-       .fsync_frequency  = 0,
-       .warmup           = -1,
-       .targetrate       = 0.0,
-       .ea_enable        = 0
+       .timelimit           = 600,
+       .loadfile            = DATADIR "/client.txt",
+       .directory           = ".",
+       .tcp_options         = TCP_OPTIONS,
+       .nprocs              = 10,
+       .sync_open           = 0,
+       .sync_dirs           = 0,
+       .do_fsync            = 0,
+       .fsync_frequency     = 0,
+       .warmup              = -1,
+       .targetrate          = 0.0,
+       .ea_enable           = 0,
+       .clients_per_process = 1,
 };
 
 static struct timeval tv_start;
@@ -72,7 +73,7 @@ static void sig_alarm(int sig)
        double total_bytes = 0;
        int total_lines = 0;
        int i;
-       int nprocs = children[0].nprocs;
+       int nclients = options.nprocs * options.clients_per_process;
        int in_warmup = 0;
        double t;
        static int in_cleanup;
@@ -83,7 +84,7 @@ static void sig_alarm(int sig)
 
        tnow = timeval_current();
 
-       for (i=0;i<nprocs;i++) {
+       for (i=0;i<nclients;i++) {
                total_bytes += children[i].bytes - children[i].bytes_done_warmup;
                if (children[i].bytes == 0) {
                        in_warmup = 1;
@@ -96,7 +97,7 @@ static void sig_alarm(int sig)
        if (!in_warmup && options.warmup>0 && t > options.warmup) {
                tv_start = tnow;
                options.warmup = 0;
-               for (i=0;i<nprocs;i++) {
+               for (i=0;i<nclients;i++) {
                        children[i].bytes_done_warmup = children[i].bytes;
                }
                goto next;
@@ -104,7 +105,7 @@ static void sig_alarm(int sig)
        if (t < options.warmup) {
                in_warmup = 1;
        } else if (!in_warmup && !in_cleanup && t > options.timelimit) {
-               for (i=0;i<nprocs;i++) {
+               for (i=0;i<nclients;i++) {
                        children[i].done = 1;
                }
                tv_end = tnow;
@@ -115,7 +116,7 @@ static void sig_alarm(int sig)
        }
 
        latency = 0;
-       for (i=0;i<nprocs;i++) {
+       for (i=0;i<nclients;i++) {
                latency = MAX(children[i].max_latency, latency);
                latency = MAX(latency, timeval_elapsed2(&children[i].lasttime, &tnow));
                children[i].max_latency = 0;
@@ -123,15 +124,15 @@ static void sig_alarm(int sig)
 
         if (in_warmup) {
                 printf("%4d  %8d  %7.2f MB/sec  warmup %3.0f sec  latency %.03f ms \n", 
-                       nprocs, total_lines/nprocs, 
+                       nclients, total_lines/nclients, 
                        1.0e-6 * total_bytes / t, t, latency*1000);
         } else if (in_cleanup) {
                 printf("%4d  %8d  %7.2f MB/sec  cleanup %3.0f sec  latency %.03f ms\n", 
-                       nprocs, total_lines/nprocs, 
+                       nclients, total_lines/nclients, 
                        1.0e-6 * total_bytes / t, t, latency*1000);
         } else {
                 printf("%4d  %8d  %7.2f MB/sec  execute %3.0f sec  latency %.03f ms\n", 
-                       nprocs, total_lines/nprocs, 
+                       nclients, total_lines/nclients, 
                        1.0e-6 * total_bytes / t, t, latency*1000);
         }
 
@@ -145,6 +146,7 @@ next:
    in all of them */
 static void create_procs(int nprocs, void (*fn)(struct child_struct *, const char *))
 {
+       int nclients = nprocs * options.clients_per_process;
        int i, status;
        int synccount;
        struct timeval tv;
@@ -164,17 +166,16 @@ static void create_procs(int nprocs, void (*fn)(struct child_struct *, const cha
                return;
        }
 
-       children = shm_setup(sizeof(struct child_struct)*nprocs);
+       children = shm_setup(sizeof(struct child_struct)*nclients);
        if (!children) {
                printf("Failed to setup shared memory\n");
                return;
        }
 
-       memset(children, 0, sizeof(*children)*nprocs);
+       memset(children, 0, sizeof(*children)*nclients);
 
-       for (i=0;i<nprocs;i++) {
+       for (i=0;i<nclients;i++) {
                children[i].id = i;
-               children[i].nprocs = nprocs;
                children[i].cleanup = 0;
                children[i].directory = options.directory;
                children[i].starttime = timeval_current();
@@ -198,10 +199,15 @@ static void create_procs(int nprocs, void (*fn)(struct child_struct *, const cha
 
        for (i=0;i<nprocs;i++) {
                if (fork() == 0) {
+                       int j;
+
                        setlinebuf(stdout);
-                       nb_setup(&children[i]);
 
-                       sbuf.sem_op  =  0;
+                       for (j=0;j<options.clients_per_process;j++) {
+                               nb_setup(&children[i*options.clients_per_process + j]);
+                       }
+
+                       sbuf.sem_op = 0;
                        if (semop(barrier, &sbuf, 1) == -1) {
                                printf("failed to use the barrier semaphore in child %d\n",getpid());
                                exit(1);
@@ -209,7 +215,7 @@ static void create_procs(int nprocs, void (*fn)(struct child_struct *, const cha
 
                        semctl(barrier,0,IPC_RMID);
 
-                       fn(&children[i], options.loadfile);
+                       fn(&children[i*options.clients_per_process], options.loadfile);
                        _exit(0);
                }
        }
@@ -219,7 +225,7 @@ static void create_procs(int nprocs, void (*fn)(struct child_struct *, const cha
        do {
                synccount = semctl(barrier,0,GETZCNT);
                t = timeval_elapsed(&tv);
-               printf("%d of %d clients prepared for launch %3.0f sec\n", synccount, nprocs, t);
+               printf("%d of %d processes prepared for launch %3.0f sec\n", synccount, nprocs, t);
                if (synccount == nprocs) break;
                usleep(100*1000);
        } while (timeval_elapsed(&tv) < 30);
@@ -303,6 +309,8 @@ static int process_opts(int argc, const char **argv)
                  "fsync on write", NULL },
                { "xattr", 'x', POPT_ARG_NONE, &options.ea_enable, 0, 
                  "use xattrs", NULL },
+               { "clients-per-process", 0, POPT_ARG_INT, &options.clients_per_process, 0, 
+                 "number of clients per process", NULL },
                POPT_TABLEEND
        };
        poptContext pc;
index 51628ab61a856653ca8a0aeed5b4b37037ddcfd8..2639f62e2393da4a9bda444d68f44a92c24b679e 100644 (file)
--- a/dbench.h
+++ b/dbench.h
@@ -93,7 +93,6 @@
 
 struct child_struct {
        int id;
-       int nprocs;
        int failed;
        int line;
        int done;
@@ -105,6 +104,11 @@ struct child_struct {
        struct timeval starttime;
        struct timeval lasttime;
        off_t bytes_since_fsync;
+       char *cname;
+       struct {
+               double last_bytes;
+               struct timeval last_time;
+       } rate;
        void *private;
 };
 
@@ -122,6 +126,7 @@ struct options {
        double targetrate;
        int ea_enable;
        const char *server;
+       int clients_per_process;
 };
 
 /* CreateDisposition field. */
index b2baa90af18d264b111f3460f7cc230f3d29ebe2..19a609a09407490311d8ee4f7f6d3cb5e47cc4af 100644 (file)
--- a/fileio.c
+++ b/fileio.c
@@ -45,7 +45,7 @@ static int find_handle(struct child_struct *child, int handle)
    this in -S mode after a directory-modifying mode, to simulate the
    way knfsd tries to flush directories.  MKDIR and similar operations
    are meant to be synchronous on NFSv2. */
-static void sync_parent(char *fname)
+static void sync_parent(const char *fname)
 {
        char *copy_name;
        int dir_fd;
@@ -194,7 +194,7 @@ void nb_setup(struct child_struct *child)
        child->private = ftable;
 }
 
-void nb_unlink(struct child_struct *child, char *fname, int attr, const char *status)
+void nb_unlink(struct child_struct *child, const char *fname, int attr, const char *status)
 {
        (void)attr;
 
@@ -208,7 +208,7 @@ void nb_unlink(struct child_struct *child, char *fname, int attr, const char *st
        if (options.sync_dirs) sync_parent(fname);
 }
 
-void nb_mkdir(struct child_struct *child, char *dname, const char *status)
+void nb_mkdir(struct child_struct *child, const char *dname, const char *status)
 {
        (void)child;
        (void)status;
@@ -216,7 +216,7 @@ void nb_mkdir(struct child_struct *child, char *dname, const char *status)
        mkdir(dname, 0777);
 }
 
-void nb_rmdir(struct child_struct *child, char *fname, const char *status)
+void nb_rmdir(struct child_struct *child, const char *fname, const char *status)
 {
        resolve_name(fname);
 
@@ -367,7 +367,7 @@ void nb_close(struct child_struct *child, int handle, const char *status)
        ftable[i].name = NULL;
 }
 
-void nb_rename(struct child_struct *child, char *old, char *new, const char *status)
+void nb_rename(struct child_struct *child, const char *old, const char *new, const char *status)
 {
        resolve_name(old);
        resolve_name(new);
@@ -419,7 +419,7 @@ void nb_qfsinfo(struct child_struct *child, int level, const char *status)
        statvfs(child->directory, &st);
 }
 
-void nb_findfirst(struct child_struct *child, char *fname, int level, int maxcnt, 
+void nb_findfirst(struct child_struct *child, const char *fname, int level, int maxcnt, 
                  int count, const char *status)
 {
        DIR *dir;
@@ -459,7 +459,7 @@ void nb_cleanup(struct child_struct *child)
        free(dname);
 }
 
-void nb_deltree(struct child_struct *child, char *dname)
+void nb_deltree(struct child_struct *child, const char *dname)
 {
        char *path;
        (void)child;
diff --git a/proto.h b/proto.h
index 48f0d24acc7f310c28ebd4d10c685787a3f8bb4a..5e4c73b5bf6a2f174c6ceb7bbd80f5c3198e3641 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -6,7 +6,7 @@
 
 /* The following definitions come from child.c  */
 
-void child_run(struct child_struct *child, const char *loadfile);
+void child_run(struct child_struct *child0, const char *loadfile);
 
 /* The following definitions come from dbench.c  */
 
@@ -14,9 +14,9 @@ void child_run(struct child_struct *child, const char *loadfile);
 /* The following definitions come from fileio.c  */
 
 void nb_setup(struct child_struct *child);
-void nb_unlink(struct child_struct *child, char *fname, int attr, const char *status);
-void nb_mkdir(struct child_struct *child, char *dname, const char *status);
-void nb_rmdir(struct child_struct *child, char *fname, const char *status);
+void nb_unlink(struct child_struct *child, const char *fname, int attr, const char *status);
+void nb_mkdir(struct child_struct *child, const char *dname, const char *status);
+void nb_rmdir(struct child_struct *child, const char *fname, const char *status);
 void nb_createx(struct child_struct *child, const char *fname, 
                uint32_t create_options, uint32_t create_disposition, int fnum,
                const char *status);
@@ -25,16 +25,16 @@ void nb_writex(struct child_struct *child, int handle, int offset,
 void nb_readx(struct child_struct *child, int handle, int offset, 
              int size, int ret_size, const char *status);
 void nb_close(struct child_struct *child, int handle, const char *status);
-void nb_rename(struct child_struct *child, char *old, char *new, const char *status);
+void nb_rename(struct child_struct *child, const char *old, const char *new, const char *status);
 void nb_flush(struct child_struct *child, int handle, const char *status);
 void nb_qpathinfo(struct child_struct *child, const char *fname, int level, 
                  const char *status);
 void nb_qfileinfo(struct child_struct *child, int handle, int level, const char *status);
 void nb_qfsinfo(struct child_struct *child, int level, const char *status);
-void nb_findfirst(struct child_struct *child, char *fname, int level, int maxcnt, 
+void nb_findfirst(struct child_struct *child, const char *fname, int level, int maxcnt, 
                  int count, const char *status);
 void nb_cleanup(struct child_struct *child);
-void nb_deltree(struct child_struct *child, char *dname);
+void nb_deltree(struct child_struct *child, const char *dname);
 void nb_sfileinfo(struct child_struct *child, int handle, int level, const char *status);
 void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size, 
              const char *status);
@@ -62,9 +62,9 @@ void do_create(char *fname, int size);
 /* The following definitions come from sockio.c  */
 
 void nb_setup(struct child_struct *child);
-void nb_unlink(struct child_struct *child, char *fname, int attr, const char *status);
-void nb_mkdir(struct child_struct *child, char *dname, const char *status);
-void nb_rmdir(struct child_struct *child, char *fname, const char *status);
+void nb_unlink(struct child_struct *child, const char *fname, int attr, const char *status);
+void nb_mkdir(struct child_struct *child, const char *dname, const char *status);
+void nb_rmdir(struct child_struct *child, const char *fname, const char *status);
 void nb_createx(struct child_struct *child, const char *fname, 
                uint32_t create_options, uint32_t create_disposition, int fnum,
                const char *status);
@@ -73,16 +73,16 @@ void nb_writex(struct child_struct *child, int handle, int offset,
 void nb_readx(struct child_struct *child, int handle, int offset, 
              int size, int ret_size, const char *status);
 void nb_close(struct child_struct *child, int handle, const char *status);
-void nb_rename(struct child_struct *child, char *old, char *new, const char *status);
+void nb_rename(struct child_struct *child, const char *old, const char *new, const char *status);
 void nb_flush(struct child_struct *child, int handle, const char *status);
 void nb_qpathinfo(struct child_struct *child, const char *fname, int level, 
                  const char *status);
 void nb_qfileinfo(struct child_struct *child, int handle, int level, const char *status);
 void nb_qfsinfo(struct child_struct *child, int level, const char *status);
-void nb_findfirst(struct child_struct *child, char *fname, int level, int maxcnt, 
+void nb_findfirst(struct child_struct *child, const char *fname, int level, int maxcnt, 
                  int count, const char *status);
 void nb_cleanup(struct child_struct *child);
-void nb_deltree(struct child_struct *child, char *dname);
+void nb_deltree(struct child_struct *child, const char *dname);
 void nb_sfileinfo(struct child_struct *child, int handle, int level, const char *status);
 void nb_lockx(struct child_struct *child, int handle, uint32_t offset, int size, 
              const char *status);
index e0a3ec1eff7c6b733d7c33efada60dd8597e9977..f86d0e501b5204c27500b29aa19d684e3712247b 100644 (file)
--- a/sockio.c
+++ b/sockio.c
@@ -80,7 +80,7 @@ void nb_setup(struct child_struct *child)
 }
 
 
-void nb_unlink(struct child_struct *child, char *fname, int attr, const char *status)
+void nb_unlink(struct child_struct *child, const char *fname, int attr, const char *status)
 {
        (void)child;
        (void)attr;
@@ -88,14 +88,14 @@ void nb_unlink(struct child_struct *child, char *fname, int attr, const char *st
         do_packets(child, 39+2+strlen(fname)*2+2, 39);
 }
 
-void nb_mkdir(struct child_struct *child, char *dname, const char *status)
+void nb_mkdir(struct child_struct *child, const char *dname, const char *status)
 {
        (void)child;
        (void)status;
         do_packets(child, 39+2+strlen(dname)*2+2, 39);
 }
 
-void nb_rmdir(struct child_struct *child, char *fname, const char *status)
+void nb_rmdir(struct child_struct *child, const char *fname, const char *status)
 {
        (void)child;
        (void)status;
@@ -146,7 +146,7 @@ void nb_close(struct child_struct *child, int handle, const char *status)
         do_packets(child, 39+8, 39);
 }
 
-void nb_rename(struct child_struct *child, char *old, char *new, const char *status)
+void nb_rename(struct child_struct *child, const char *old, const char *new, const char *status)
 {
        (void)child;
        (void)status;
@@ -187,7 +187,7 @@ void nb_qfsinfo(struct child_struct *child, int level, const char *status)
         do_packets(child, 39+20, 39+32);
 }
 
-void nb_findfirst(struct child_struct *child, char *fname, int level, int maxcnt, 
+void nb_findfirst(struct child_struct *child, const char *fname, int level, int maxcnt, 
                  int count, const char *status)
 {
        (void)child;
@@ -202,7 +202,7 @@ void nb_cleanup(struct child_struct *child)
        (void)child;
 }
 
-void nb_deltree(struct child_struct *child, char *dname)
+void nb_deltree(struct child_struct *child, const char *dname)
 {
        (void)child;
        (void)dname;