Mercurial > hg > nginx-quic
comparison src/os/win32/ngx_files.c @ 1632:2142e5cf62da
fix win32 glob
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 11 Nov 2007 17:50:47 +0000 |
parents | 81da6273fb04 |
children | d3cbb96818f1 |
comparison
equal
deleted
inserted
replaced
1631:b67b75bb09b7 | 1632:2142e5cf62da |
---|---|
325 | 325 |
326 | 326 |
327 ngx_int_t | 327 ngx_int_t |
328 ngx_open_glob(ngx_glob_t *gl) | 328 ngx_open_glob(ngx_glob_t *gl) |
329 { | 329 { |
330 u_char *p; | |
331 size_t len; | |
332 | |
330 gl->dir = FindFirstFile((const char *) gl->pattern, &gl->finddata); | 333 gl->dir = FindFirstFile((const char *) gl->pattern, &gl->finddata); |
331 | 334 |
332 if (gl->dir == INVALID_HANDLE_VALUE) { | 335 if (gl->dir == INVALID_HANDLE_VALUE) { |
333 return NGX_ERROR; | 336 return NGX_ERROR; |
334 } | 337 } |
335 | 338 |
339 for (p = gl->pattern; *p; p++) { | |
340 if (*p == '/') { | |
341 gl->last = p + 1 - gl->pattern; | |
342 } | |
343 } | |
344 | |
345 len = ngx_strlen(gl->finddata.cFileName); | |
346 gl->name.len = gl->last + len; | |
347 | |
348 gl->name.data = ngx_alloc(gl->name.len + 1, gl->log); | |
349 if (gl->name.data == NULL) { | |
350 return NGX_ERROR; | |
351 } | |
352 | |
353 ngx_memcpy(gl->name.data, gl->pattern, gl->last); | |
354 ngx_cpystrn(gl->name.data + gl->last, (u_char *) gl->finddata.cFileName, | |
355 len + 1); | |
356 | |
336 gl->ready = 1; | 357 gl->ready = 1; |
337 | 358 |
338 return NGX_OK; | 359 return NGX_OK; |
339 } | 360 } |
340 | 361 |
341 | 362 |
342 ngx_int_t | 363 ngx_int_t |
343 ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name) | 364 ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name) |
344 { | 365 { |
366 size_t len; | |
345 ngx_err_t err; | 367 ngx_err_t err; |
346 | 368 |
347 if (gl->ready) { | 369 if (gl->ready) { |
348 name->len = ngx_strlen(gl->finddata.cFileName); | 370 *name = gl->name; |
349 name->data = (u_char *) gl->finddata.cFileName; | |
350 | 371 |
351 gl->ready = 0; | 372 gl->ready = 0; |
352 return NGX_OK; | 373 return NGX_OK; |
353 } | 374 } |
354 | 375 |
376 ngx_free(gl->name.data); | |
377 gl->name.data = NULL; | |
378 | |
355 if (FindNextFile(gl->dir, &gl->finddata) != 0) { | 379 if (FindNextFile(gl->dir, &gl->finddata) != 0) { |
356 name->len = ngx_strlen(gl->finddata.cFileName); | 380 |
357 name->data = (u_char *) gl->finddata.cFileName; | 381 len = ngx_strlen(gl->finddata.cFileName); |
382 gl->name.len = gl->last + len; | |
383 | |
384 gl->name.data = ngx_alloc(gl->name.len + 1, gl->log); | |
385 if (gl->name.data == NULL) { | |
386 return NGX_ERROR; | |
387 } | |
388 | |
389 ngx_memcpy(gl->name.data, gl->pattern, gl->last); | |
390 ngx_cpystrn(gl->name.data + gl->last, (u_char *) gl->finddata.cFileName, | |
391 len + 1); | |
392 | |
393 *name = gl->name; | |
358 | 394 |
359 return NGX_OK; | 395 return NGX_OK; |
360 } | 396 } |
361 | 397 |
362 err = ngx_errno; | 398 err = ngx_errno; |
373 | 409 |
374 | 410 |
375 void | 411 void |
376 ngx_close_glob(ngx_glob_t *gl) | 412 ngx_close_glob(ngx_glob_t *gl) |
377 { | 413 { |
378 if (FindClose(gl->dir) != 0) { | 414 if (gl->name.data) { |
415 ngx_free(gl->name.data); | |
416 } | |
417 | |
418 if (FindClose(gl->dir) == 0) { | |
379 ngx_log_error(NGX_LOG_ALERT, gl->log, ngx_errno, | 419 ngx_log_error(NGX_LOG_ALERT, gl->log, ngx_errno, |
380 "FindClose(%s) failed", gl->pattern); | 420 "FindClose(%s) failed", gl->pattern); |
381 } | 421 } |
382 } | 422 } |
383 | 423 |