Example #1
0
File: url.c Project: galdor/libhttp
void
http_url_set_password(struct http_url *url, const char *string) {
    c_free(url->password);
    url->password = NULL;

    if (string)
        url->password = c_strdup(string);
}
Example #2
0
File: url.c Project: galdor/libhttp
void
http_url_set_user(struct http_url *url, const char *string) {
    c_free(url->user);
    url->user = NULL;

    if (string)
        url->user = c_strdup(string);
}
Example #3
0
File: url.c Project: galdor/libhttp
void
http_url_set_scheme(struct http_url *url, const char *string) {
    c_free(url->scheme);
    url->scheme = NULL;

    if (string)
        url->scheme = c_strdup(string);
}
Example #4
0
File: url.c Project: galdor/libhttp
struct http_url *
http_url_clone(const struct http_url *url) {
    struct http_url *new_url;

    new_url = http_url_new();

    if (url->scheme)
        new_url->scheme = c_strdup(url->scheme);
    if (url->user)
        new_url->user = c_strdup(url->user);
    if (url->password)
        new_url->password = c_strdup(url->password);
    if (url->host)
        new_url->host = c_strdup(url->host);
    if (url->port)
        new_url->port = c_strdup(url->port);
    new_url->port_number = url->port_number;
    if (url->path)
        new_url->path = c_strdup(url->path);
    if (url->query)
        new_url->query = c_strdup(url->query);
    if (url->fragment)
        new_url->fragment = c_strdup(url->fragment);

    if (url->query_parameters) {
        struct c_vector *parameters;

        parameters = c_vector_new(sizeof(struct http_query_parameter));
        for (size_t i = 0; i < c_vector_length(url->query_parameters); i++) {
            struct http_query_parameter *parameter;
            struct http_query_parameter new_parameter;

            parameter = c_vector_entry(url->query_parameters, i);

            http_query_parameter_init(&new_parameter);
            new_parameter.name = c_strdup(parameter->name);
            new_parameter.value = c_strdup(parameter->value);

            c_vector_append(parameters, &new_parameter);
        }

        new_url->query_parameters = parameters;
    }

    return new_url;
}
Example #5
0
static void setup_toplevel_dir( void **state ) {
    char basepath[255];

    strcpy( basepath, "tXXXXXX");
    assert_int_equal( c_tmpname(basepath), 0 );
    printf("Using top testing dir %s\n", basepath);
    assert_int_equal( test_mkdir( basepath ), 0 );
    *state = (void*) c_strdup(basepath);
}
Example #6
0
static void fill_stat_cache( csync_vio_file_stat_t *lfs ) {

    if( _stat_cache.name ) SAFE_FREE(_stat_cache.name);
    if( _stat_cache.etag  ) SAFE_FREE(_stat_cache.etag );

    if( !lfs) return;

    _stat_cache.name   = c_strdup(lfs->name);
    _stat_cache.mtime  = lfs->mtime;
    _stat_cache.fields = lfs->fields;
    _stat_cache.type   = lfs->type;
    _stat_cache.size   = lfs->size;
    csync_vio_file_stat_set_file_id(&_stat_cache, lfs->file_id);

    if( lfs->etag ) {
        _stat_cache.etag    = c_strdup(lfs->etag);
    }
}
csync_vio_file_stat_t* csync_vio_file_stat_copy(csync_vio_file_stat_t *file_stat) {
    csync_vio_file_stat_t *file_stat_cpy = csync_vio_file_stat_new();
    memcpy(file_stat_cpy, file_stat, sizeof(csync_vio_file_stat_t));
    if (file_stat_cpy->fields & CSYNC_VIO_FILE_STAT_FIELDS_ETAG) {
        file_stat_cpy->etag = c_strdup(file_stat_cpy->etag);
    }
    if (file_stat_cpy->directDownloadCookies) {
        file_stat_cpy->directDownloadCookies = c_strdup(file_stat_cpy->directDownloadCookies);
    }
    if (file_stat_cpy->directDownloadUrl) {
        file_stat_cpy->directDownloadUrl = c_strdup(file_stat_cpy->directDownloadUrl);
    }
    if (file_stat_cpy->checksumHeader) {
        file_stat_cpy->checksumHeader = c_strdup(file_stat_cpy->checksumHeader);
    }
    file_stat_cpy->name = c_strdup(file_stat_cpy->name);
    return file_stat_cpy;
}
Example #8
0
END_TEST

START_TEST (check_c_strdup_nomem)
{
  const char *str = "test";
  char *tdup = NULL;

  tdup = c_strdup(str);
  fail_unless(tdup == NULL, NULL);
}
Example #9
0
/* caller must free the memory */
csync_file_stat_t *csync_statedb_get_stat_by_inode(sqlite3 *db,
                                                   uint64_t inode) {
  csync_file_stat_t *st = NULL;
  c_strlist_t *result = NULL;
  char *stmt = NULL;
  size_t len = 0;

  if (!inode) {
      return NULL;
  }

  stmt = sqlite3_mprintf("SELECT * FROM metadata WHERE inode='%lld'",
             (long long signed int) inode);
  if (stmt == NULL) {
    return NULL;
  }

  result = csync_statedb_query(db, stmt);
  sqlite3_free(stmt);
  if (result == NULL) {
    return NULL;
  }

  if (result->count <= 6) {
    c_strlist_destroy(result);
    return NULL;
  }

  /* phash, pathlen, path, inode, uid, gid, mode, modtime */
  len = strlen(result->vector[2]);
  st = c_malloc(sizeof(csync_file_stat_t) + len + 1);
  if (st == NULL) {
    c_strlist_destroy(result);
    return NULL;
  }
  /* clear the whole structure */
  ZERO_STRUCTP(st);

  st->phash = atoll(result->vector[0]);
  st->pathlen = atoi(result->vector[1]);
  memcpy(st->path, (len ? result->vector[2] : ""), len + 1);
  st->inode = atoll(result->vector[3]);
  st->uid = atoi(result->vector[4]);
  st->gid = atoi(result->vector[5]);
  st->mode = atoi(result->vector[6]);
  st->modtime = strtoul(result->vector[7], NULL, 10);
  st->type = atoi(result->vector[8]);
  if( result->vector[9] )
    st->etag = c_strdup(result->vector[9]);
  csync_vio_set_file_id( st->file_id, result->vector[10]);

  c_strlist_destroy(result);

  return st;
}
Example #10
0
END_TEST

START_TEST (check_c_strreplace)
{
  char *str = c_strdup("/home/%(USER)");

  str = c_strreplace(str, "%(USER)", "csync");
  fail_unless(strcmp(str, "/home/csync") == 0, NULL);

  SAFE_FREE(str);
}
Example #11
0
// This funciton parses a line from the metadata table into the given csync_file_stat
// structure which it is also allocating.
// Note that this function calls laso sqlite3_step to actually get the info from db and
// returns the sqlite return type.
static int _csync_file_stat_from_metadata_table( csync_file_stat_t **st, sqlite3_stmt *stmt )
{
    int rc = SQLITE_ERROR;
    int column_count;
    int len;

    if( ! stmt ) {
       CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Fatal: Statement is NULL.");
       return SQLITE_ERROR;
    }

    column_count = sqlite3_column_count(stmt);

    rc = sqlite3_step(stmt);

    if( rc == SQLITE_ROW ) {
        if(column_count > 7) {
            const char *name;

            /* phash, pathlen, path, inode, uid, gid, mode, modtime */
            len = sqlite3_column_int(stmt, 1);
            *st = c_malloc(sizeof(csync_file_stat_t) + len + 1);
            if (*st == NULL) {
                return SQLITE_NOMEM;
            }
            /* clear the whole structure */
            ZERO_STRUCTP(*st);

            /* The query suceeded so use the phash we pass to the function. */
            (*st)->phash = sqlite3_column_int64(stmt, 0);

            (*st)->pathlen = sqlite3_column_int(stmt, 1);
            name = (const char*) sqlite3_column_text(stmt, 2);
            memcpy((*st)->path, (len ? name : ""), len + 1);
            (*st)->inode = sqlite3_column_int64(stmt,3);
            (*st)->uid = sqlite3_column_int(stmt, 4);
            (*st)->gid = sqlite3_column_int(stmt, 5);
            (*st)->mode = sqlite3_column_int(stmt, 6);
            (*st)->modtime = strtoul((char*)sqlite3_column_text(stmt, 7), NULL, 10);

            if(*st && column_count > 8 ) {
                (*st)->type = sqlite3_column_int(stmt, 8);
            }

            if(column_count > 9 && sqlite3_column_text(stmt, 9)) {
                (*st)->etag = c_strdup( (char*) sqlite3_column_text(stmt, 9) );
            }
            if(column_count > 10 && sqlite3_column_text(stmt,10)) {
                csync_vio_set_file_id((*st)->file_id, (char*) sqlite3_column_text(stmt, 10));
            }
        }
    }
    return rc;
}
Example #12
0
/*
 * helper: convert a resource struct to file_stat struct.
 */
void resourceToFileStat(csync_vio_file_stat_t *lfs, struct resource *res )
{
    ZERO_STRUCTP(lfs);

    lfs->name = c_strdup( res->name );

    lfs->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
    if( res->type == resr_normal ) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
        lfs->type = CSYNC_VIO_FILE_TYPE_REGULAR;
    } else if( res->type == resr_collection ) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
        lfs->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
    } else {
        DEBUG_WEBDAV("ERROR: Unknown resource type %d", res->type);
    }

    // FIXME Those are defaults, we'll have to use the real ownCloud WebDAV permissions soon
    lfs->mode   = _stat_perms( lfs->type );
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_PERMISSIONS;

    lfs->mtime = res->modtime;
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME;
    lfs->size  = res->size;
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
    if( res->md5 ) {
        lfs->etag   = c_strdup(res->md5);
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ETAG;
    }

    csync_vio_file_stat_set_file_id(lfs, res->file_id);

    if (res->directDownloadUrl) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADURL;
        lfs->directDownloadUrl = c_strdup(res->directDownloadUrl);
    }
    if (res->directDownloadCookies) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADCOOKIES;
        lfs->directDownloadCookies = c_strdup(res->directDownloadCookies);
    }
}
/*
 * helper: convert a resource struct to file_stat struct.
 */
void resourceToFileStat(csync_vio_file_stat_t *lfs, struct resource *res )
{
    ZERO_STRUCTP(lfs);

    lfs->name = c_strdup( res->name );

    lfs->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
    if( res->type == resr_normal ) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
        lfs->type = CSYNC_VIO_FILE_TYPE_REGULAR;
    } else if( res->type == resr_collection ) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
        lfs->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
    } else {
        DEBUG_WEBDAV("ERROR: Unknown resource type %d", res->type);
    }

    lfs->mtime = res->modtime;
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME;
    lfs->size  = res->size;
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
    if( res->md5 ) {
        lfs->etag   = c_strdup(res->md5);
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ETAG;
    }

    csync_vio_file_stat_set_file_id(lfs, res->file_id);

    if (res->directDownloadUrl) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADURL;
        lfs->directDownloadUrl = c_strdup(res->directDownloadUrl);
    }
    if (res->directDownloadCookies) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_DIRECTDOWNLOADCOOKIES;
        lfs->directDownloadCookies = c_strdup(res->directDownloadCookies);
    }
    if (strlen(res->remotePerm) > 0) {
        lfs->fields = CSYNC_VIO_FILE_STAT_FIELDS_PERM;
        strncpy(lfs->remotePerm, res->remotePerm, sizeof(lfs->remotePerm));
    }
}
Example #14
0
END_TEST

START_TEST (check_c_strdup)
{
  const char *str = "test";
  char *tdup = NULL;

  tdup = c_strdup(str);
  fail_unless(strcmp(tdup, str) == 0, NULL);

  free(tdup);
}
Example #15
0
static void check_c_strdup(void **state)
{
  const char *str = "test";
  char *tdup = NULL;

  (void) state; /* unused */

  tdup = c_strdup(str);
  assert_string_equal(tdup, str);

  free(tdup);
}
Example #16
0
/*
 * dirname - parse directory component.
 */
char *c_dirname (const char *path) {
  char *newbuf = NULL;
  unsigned int len;

  if (path == NULL || *path == '\0') {
    return c_strdup(".");
  }

  len = strlen(path);

  /* Remove trailing slashes */
  while(len > 0 && path[len - 1] == '/') --len;

  /* We have only slashes */
  if (len == 0) {
    return c_strdup("/");
  }

  /* goto next slash */
  while(len > 0 && path[len - 1] != '/') --len;

  if (len == 0) {
    return c_strdup(".");
  } else if (len == 1) {
    return c_strdup("/");
  }

  /* Remove slashes again */
  while(len > 0 && path[len - 1] == '/') --len;

  newbuf = c_malloc(len + 1);
  if (newbuf == NULL) {
    return NULL;
  }

  strncpy(newbuf, path, len);
  newbuf[len] = '\0';

  return newbuf;
}
Example #17
0
csync_vio_file_stat_t *csync_vio_convert_file_stat(csync_file_stat_t *st) {
  csync_vio_file_stat_t *vfs = NULL;

  if (st == NULL) {
    return NULL;
  }

  vfs = csync_vio_file_stat_new();
  if (vfs == NULL) {
    return NULL;
  }
  vfs->acl = NULL;
  if (st->pathlen > 0) {
    vfs->name = c_strdup(st->path);
  }
  vfs->uid   = st->uid;
  vfs->gid   = st->gid;

  vfs->atime = 0;
  vfs->mtime = st->modtime;
  vfs->ctime = 0;

  vfs->size  = st->size;
  vfs->blksize  = 0;  /* Depricated. */
  vfs->blkcount = 0;

  vfs->mode  = st->mode;
  vfs->device = 0;
  vfs->inode = st->inode;
  vfs->nlink = st->nlink;

  /* fields. */
  vfs->fields = CSYNC_VIO_FILE_STAT_FIELDS_TYPE
      + CSYNC_VIO_FILE_STAT_FIELDS_PERMISSIONS
      + CSYNC_VIO_FILE_STAT_FIELDS_INODE
      + CSYNC_VIO_FILE_STAT_FIELDS_LINK_COUNT
      + CSYNC_VIO_FILE_STAT_FIELDS_SIZE
      + CSYNC_VIO_FILE_STAT_FIELDS_MTIME
      + CSYNC_VIO_FILE_STAT_FIELDS_UID
      + CSYNC_VIO_FILE_STAT_FIELDS_GID;

  if (st->type == CSYNC_FTW_TYPE_DIR)
    vfs->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
  else if (st->type == CSYNC_FTW_TYPE_FILE)
    vfs->type = CSYNC_VIO_FILE_TYPE_REGULAR;
  else if (st->type == CSYNC_FTW_TYPE_SLINK)
    vfs->type = CSYNC_VIO_FILE_TYPE_SYMBOLIC_LINK;
  else
    vfs->type = CSYNC_VIO_FILE_TYPE_UNKNOWN;

  return vfs;
}
Example #18
0
static void setup(void **state) {
    CSYNC *csync;
    int rc;

    rc = csync_create(&csync, "/tmp/check_csync1", "/tmp/check_csync2");
    assert_int_equal(rc, 0);

    free(csync->options.config_dir);
    csync->options.config_dir = c_strdup("/tmp/check_csync1/");
    assert_non_null(csync->options.config_dir);

    *state = csync;
}
Example #19
0
char *c_basename (const char *path) {
  char *newbuf = NULL;
  const char *s;
  unsigned int len;

  if (path == NULL || *path == '\0') {
    return c_strdup(".");
  }

  len = strlen(path);
  /* Remove trailing slashes */
  while(len > 0 && path[len - 1] == '/') --len;

  /* We have only slashes */
  if (len == 0) {
    return c_strdup("/");
  }

  while(len > 0 && path[len - 1] != '/') --len;

  if (len > 0) {
    s = path + len;
    len = strlen(s);

    while(len > 0 && s[len - 1] == '/') --len;
  } else {
    return c_strdup(path);
  }

  newbuf = c_malloc(len + 1);
  if (newbuf == NULL) {
    return NULL;
  }

  strncpy(newbuf, s, len);
  newbuf[len] = '\0';

  return newbuf;
}
/*
 * helper: convert a resource struct to file_stat struct.
 */
csync_vio_file_stat_t *resourceToFileStat( struct resource *res )
{
    csync_vio_file_stat_t *lfs = NULL;

    if( ! res ) {
        return NULL;
    }

    lfs = c_malloc(sizeof(csync_vio_file_stat_t));
    if (lfs == NULL) {
        errno = ENOMEM;
        return NULL;
    }

    lfs->name = c_strdup( res->name );

    lfs->fields = CSYNC_VIO_FILE_STAT_FIELDS_NONE;
    if( res->type == resr_normal ) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
        lfs->type = CSYNC_VIO_FILE_TYPE_REGULAR;
    } else if( res->type == resr_collection ) {
        lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_TYPE;
        lfs->type = CSYNC_VIO_FILE_TYPE_DIRECTORY;
    } else {
        DEBUG_WEBDAV("ERROR: Unknown resource type %d", res->type);
    }

    lfs->mtime = res->modtime;
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_MTIME;
    lfs->size  = res->size;
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_SIZE;
    if( res->md5 ) {
        lfs->etag   = c_strdup(res->md5);
    }
    lfs->fields |= CSYNC_VIO_FILE_STAT_FIELDS_ETAG;
    csync_vio_file_stat_set_file_id(lfs, res->file_id);

    return lfs;
}
Example #21
0
struct resource* resource_dup(struct resource* o) {
    struct resource *r = c_malloc (sizeof( struct resource ));
    ZERO_STRUCTP(r);

    r->uri = c_strdup(o->uri);
    r->name = c_strdup(o->name);
    r->type = o->type;
    r->size = o->size;
    r->modtime = o->modtime;
    if( o->md5 ) {
        r->md5 = c_strdup(o->md5);
    }
    if (o->directDownloadUrl) {
        r->directDownloadUrl = c_strdup(o->directDownloadUrl);
    }
    if (o->directDownloadCookies) {
        r->directDownloadCookies = c_strdup(o->directDownloadCookies);
    }
    r->next = o->next;
    csync_vio_set_file_id(r->file_id, o->file_id);

    return r;
}
Example #22
0
int csync_set_config_dir(CSYNC *ctx, const char *path) {
  if (ctx == NULL || path == NULL) {
    return -1;
  }

  SAFE_FREE(ctx->options.config_dir);
  ctx->options.config_dir = c_strdup(path);
  if (ctx->options.config_dir == NULL) {
    ctx->status_code = CSYNC_STATUS_MEMORY_ERROR;
    return -1;
  }

  return 0;
}
Example #23
0
File: sircc.c Project: galdor/sircc
void
sircc_chan_set_topic(struct sircc_chan *chan, const char *topic) {
    if (chan->topic) {
        c_free(chan->topic);
        chan->topic = NULL;
    }

    if (topic)
        chan->topic = c_strdup(topic);

    if (sircc_chan_is_current(chan)) {
        sircc_ui_topic_redraw();
        sircc_ui_update();
    }
}
Example #24
0
char *csync_get_user_home_dir(void) {
    char home[PATH_MAX] = {0};
    const char *envp;
    struct passwd pwd;
    struct passwd *pwdbuf;
    char buf[NSS_BUFLEN_PASSWD];
    int rc;

    envp = getenv("HOME");
    if (envp != NULL) {
        snprintf(home, sizeof(home), "%s", envp);
        if (home[0] != '\0') {
            return c_strdup(home);
        }
    }

    /* Still nothing found, read the password file */
    rc = getpwuid_r(getuid(), &pwd, buf, NSS_BUFLEN_PASSWD, &pwdbuf);
    if (rc != 0) {
        return c_strdup(pwd.pw_dir);
    }

    return NULL;
}
Example #25
0
int csync_set_config_dir(CSYNC *ctx, const char *path) {
  if (ctx == NULL || path == NULL) {
    return -1;
  }
  ctx->error_code = CSYNC_ERR_NONE;

  SAFE_FREE(ctx->options.config_dir);
  ctx->options.config_dir = c_strdup(path);
  if (ctx->options.config_dir == NULL) {
    ctx->error_code = CSYNC_ERR_MEM;
    return -1;
  }

  return 0;
}
Example #26
0
static void setup_init(void **state) {
    CSYNC *csync;
    int rc;

    rc = csync_create(&csync, "/tmp/check_csync1", "/tmp/check_csync2");
    assert_int_equal(rc, 0);

    free(csync->options.config_dir);
    csync->options.config_dir = c_strdup("/tmp/check_csync1/");
    assert_non_null(csync->options.config_dir);

    rc = csync_exclude_load(csync, BINARYDIR "/config/" CSYNC_EXCLUDE_FILE);
    assert_int_equal(rc, 0);

    *state = csync;
}
Example #27
0
c_quark_t
c_quark_from_string(const char *string)
{
    void *quark_ptr;

    ensure_quark_hash_table();

    quark_ptr = c_hash_table_lookup(_quark_hash_table, string);
    if (!quark_ptr) {
        c_quark_t new_quark = _next_quark++;
        c_hash_table_insert(_quark_hash_table, (void *)c_strdup(string),
                            C_UINT_TO_POINTER(new_quark));
        return new_quark;
    } else
        return C_POINTER_TO_UINT(quark_ptr);
}
Example #28
0
static csync_vio_method_handle_t *_opendir(const char *name) {
  smb_dhandle_t *handle = NULL;

  handle = c_malloc(sizeof(smb_dhandle_t));
  if (handle == NULL) {
    return NULL;
  }

  handle->dh = smbc_opendir(name);
  if (handle->dh < 0) {
    SAFE_FREE(handle);
    return NULL;
  }
  handle->path = c_strdup(name);

  return (csync_vio_method_handle_t *) handle;
}
Example #29
0
int c_strlist_add(c_strlist_t *strlist, const char *string) {
  if (strlist == NULL || string == NULL) {
    return -1;
  }

  if (strlist->count < strlist->size) {
    strlist->vector[strlist->count] = c_strdup(string);
    if (strlist->vector[strlist->count] == NULL) {
      return -1;
    }
    strlist->count++;
  } else {
    errno = ENOBUFS;
    return -1;
  }

  return 0;
}
static void setup(void **state) {
    CSYNC *csync;
    int rc;

    rc = system("rm -rf /tmp/check_csync1");
    assert_int_equal(rc, 0);

    rc = system("mkdir -p /tmp/check_csync1");
    assert_int_equal(rc, 0);

    rc = csync_create(&csync, "/tmp/check_csync1", "/tmp/check_csync2");
    assert_int_equal(rc, 0);

    csync_set_config_dir(csync, "/tmp/check_csync1/");

    csync->statedb.file = c_strdup( TESTDB );
    *state = csync;
}