~bratsche/gnome-user-share/notifications

« back to all changes in this revision

Viewing changes to user_share.c

  • Committer: Bazaar Package Importer
  • Date: 2008-10-11 11:51:04 UTC
  • Revision ID: jamesw@ubuntu.com-20081011115104-x607x7tbflaa0gz9
Tags: upstream-ubuntu-0.11
ImportĀ upstreamĀ versionĀ 0.11

Show diffs side-by-side

added added

removed removed

Lines of Context:
67
67
static pid_t httpd_pid = 0;
68
68
static guint disabled_timeout_tag = 0;
69
69
 
 
70
static char *
 
71
lookup_public_dir (void)
 
72
{
 
73
  FILE *file;
 
74
  char *config_file;
 
75
  char buffer[512];
 
76
  char *user_dir;
 
77
  char *p, *d;
 
78
  int len;
 
79
  int relative;
 
80
  
 
81
  config_file = g_build_filename (g_get_user_config_dir (), "user-dirs.dirs", NULL);
 
82
  file = fopen (config_file, "r");
 
83
  free (config_file);
 
84
  if (file == NULL)
 
85
          goto error;
 
86
  
 
87
  user_dir = NULL;
 
88
  while (fgets (buffer, sizeof (buffer), file)) {
 
89
          /* Remove newline at end */
 
90
          len = strlen (buffer);
 
91
      if (len > 0 && buffer[len-1] == '\n')
 
92
                  buffer[len-1] = 0;
 
93
      
 
94
      p = buffer;
 
95
      while (*p == ' ' || *p == '\t')
 
96
                  p++;
 
97
      
 
98
      if (!g_str_has_prefix (p, "XDG_PUBLICSHARE_DIR"))
 
99
                  continue;
 
100
      p += strlen ("XDG_PUBLICSHARE_DIR");
 
101
          
 
102
      while (*p == ' ' || *p == '\t')
 
103
                  p++;
 
104
          
 
105
      if (*p != '=')
 
106
                  continue;
 
107
      p++;
 
108
      
 
109
      while (*p == ' ' || *p == '\t')
 
110
                  p++;
 
111
          
 
112
      if (*p != '"')
 
113
                  continue;
 
114
      p++;
 
115
      
 
116
      relative = 0;
 
117
      if (strncmp (p, "$HOME/", 6) == 0) {
 
118
                  p += 6;
 
119
                  relative = 1;
 
120
          }
 
121
      else if (*p != '/')
 
122
                  continue;
 
123
      
 
124
      if (relative)     {
 
125
                  user_dir = g_malloc (strlen (g_get_home_dir()) + 1 + strlen (p) + 1);
 
126
                  strcpy (user_dir, g_get_home_dir ());
 
127
                  strcat (user_dir, "/");
 
128
          } else {
 
129
                  user_dir = g_malloc (strlen (p) + 1);
 
130
                  *user_dir = 0;
 
131
          }
 
132
      
 
133
      d = user_dir + strlen (user_dir);
 
134
      while (*p && *p != '"') {
 
135
                  if ((*p == '\\') && (*(p+1) != 0))
 
136
                          p++;
 
137
                  *d++ = *p++;
 
138
          }
 
139
      *d = 0;
 
140
  }  
 
141
  fclose (file);
 
142
  
 
143
  if (user_dir)
 
144
          return user_dir;
 
145
  
 
146
 error:
 
147
  return g_build_filename (g_get_home_dir (), "Public", NULL);
 
148
}
 
149
 
70
150
static int
71
151
get_port (void)
72
152
{
337
417
 
338
418
 
339
419
static void
340
 
ensure_public_dir (void)
 
420
ensure_public_dir (char *dirname)
341
421
{
342
 
    char *dirname;
343
 
 
344
 
    dirname = g_build_filename (g_get_home_dir (), "Public", NULL);
345
422
    if (!g_file_test (dirname, G_FILE_TEST_IS_DIR)) {
346
423
                mkdir (dirname, 0755);
347
424
    }
348
 
    g_free (dirname);
349
425
}
350
426
 
351
427
static void
387
463
static gboolean
388
464
spawn_httpd (int port, pid_t *pid_out)
389
465
{
390
 
    char *free1, *free2;
 
466
    char *free1, *free2, *free3;
391
467
    gboolean res;
392
468
    char *argv[10];
393
469
    char *env[10];
399
475
    gboolean got_pidfile;
400
476
    GConfClient *client;
401
477
    char *str;
 
478
        char *public_dir;
402
479
 
403
 
    ensure_public_dir ();
 
480
        public_dir = lookup_public_dir ();
 
481
        
 
482
    ensure_public_dir (public_dir);
404
483
    ensure_conf_dir ();
405
484
 
406
485
    i = 0;
431
510
 
432
511
    i = 0;
433
512
    free2 = env[i++] = g_strdup_printf("HOME=%s", g_get_home_dir());
 
513
    free3 = env[i++] = g_strdup_printf("XDG_PUBLICSHARE_DIR=%s", public_dir);
434
514
    env[i++] = "LANG=C";
435
515
    env[i] = NULL;
436
516
 
448
528
                        &error);
449
529
    g_free (free1);
450
530
    g_free (free2);
451
 
    
 
531
    g_free (free3);
 
532
        g_free (public_dir);
 
533
 
452
534
    if (!res) {
453
535
                fprintf (stderr, "error spawning httpd: %s\n",
454
536
                                 error->message);